diff --git a/.all-contributorsrc b/.all-contributorsrc
index aad44dc24..535b18912 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -46,16 +46,6 @@
"promotion"
]
},
- {
- "login": "maggar",
- "name": "maggar",
- "avatar_url": "https://avatars.githubusercontent.com/u/55561955?v=4",
- "profile": "https://github.com/maggar",
- "contributions": [
- "leader",
- "ideas"
- ]
- },
{
"login": "MSBrett",
"name": "Brett Wilson",
@@ -68,23 +58,15 @@
]
},
{
- "login": "sebassem",
- "name": "Seif Bassem",
- "avatar_url": "https://avatars.githubusercontent.com/u/38246040?v=4",
- "profile": "https://www.seifbassem.com/",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "aromano2",
- "name": "Anthony Romano",
- "avatar_url": "https://avatars.githubusercontent.com/u/26576969?v=4",
- "profile": "https://github.com/aromano2",
+ "login": "helderpinto",
+ "name": "HΓ©lder Pinto",
+ "avatar_url": "https://avatars.githubusercontent.com/u/10661605?v=4",
+ "profile": "https://aka.ms/helderpinto",
"contributions": [
"code",
"review",
- "doc"
+ "doc",
+ "bug"
]
},
{
@@ -97,6 +79,25 @@
"doc"
]
},
+ {
+ "login": "bandersmsft",
+ "name": "Bill Anderson",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9596428?v=4",
+ "profile": "https://github.com/bandersmsft",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "ro100e",
+ "name": "Robel",
+ "avatar_url": "https://avatars.githubusercontent.com/u/59753782?v=4",
+ "profile": "https://github.com/ro100e",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
{
"login": "Springstone",
"name": "Sacha Narinx",
@@ -109,21 +110,43 @@
]
},
{
- "login": "jamelachahbar",
- "name": "jamelachahbar",
- "avatar_url": "https://avatars.githubusercontent.com/u/127963872?v=4",
- "profile": "https://github.com/jamelachahbar",
+ "login": "aromano2",
+ "name": "Anthony Romano",
+ "avatar_url": "https://avatars.githubusercontent.com/u/26576969?v=4",
+ "profile": "https://github.com/aromano2",
"contributions": [
- "code"
+ "code",
+ "review",
+ "doc"
]
},
{
- "login": "saadmsft",
- "name": "Saad Mahmood",
- "avatar_url": "https://avatars.githubusercontent.com/u/66096650?v=4",
- "profile": "https://github.com/saadmsft",
+ "login": "grantxyzou",
+ "name": "grantxyzou",
+ "avatar_url": "https://avatars.githubusercontent.com/u/110638253?v=4",
+ "profile": "https://github.com/grantxyzou",
"contributions": [
- "code"
+ "design"
+ ]
+ },
+ {
+ "login": "lmoscinski",
+ "name": "lmoscinski",
+ "avatar_url": "https://avatars.githubusercontent.com/u/135173807?v=4",
+ "profile": "https://github.com/lmoscinski",
+ "contributions": [
+ "design"
+ ]
+ },
+ {
+ "login": "RolandKrummenacher",
+ "name": "Roland Krummenacher",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1803486?v=4",
+ "profile": "https://github.com/RolandKrummenacher",
+ "contributions": [
+ "code",
+ "review",
+ "bug"
]
},
{
@@ -136,35 +159,155 @@
]
},
{
- "login": "arjenhuitema",
- "name": "Arjen Huitema",
- "avatar_url": "https://avatars.githubusercontent.com/u/15944031?v=4",
- "profile": "https://github.com/arjenhuitema",
+ "login": "jamelachahbar",
+ "name": "jamelachahbar",
+ "avatar_url": "https://avatars.githubusercontent.com/u/127963872?v=4",
+ "profile": "https://github.com/jamelachahbar",
"contributions": [
"code"
]
},
{
- "login": "bandersmsft",
- "name": "Bill Anderson",
- "avatar_url": "https://avatars.githubusercontent.com/u/9596428?v=4",
- "profile": "https://github.com/bandersmsft",
+ "login": "akiskips",
+ "name": "Orthodoxos Kipouridis",
+ "avatar_url": "https://avatars.githubusercontent.com/u/56831775?v=4",
+ "profile": "https://github.com/akiskips",
+ "contributions": [
+ "code",
+ "doc"
+ ]
+ },
+ {
+ "login": "BenShy",
+ "name": "Ben Shy",
+ "avatar_url": "https://avatars.githubusercontent.com/u/18198475?v=4",
+ "profile": "https://github.com/BenShy",
+ "contributions": [
+ "code",
+ "review"
+ ]
+ },
+ {
+ "login": "KevDLR",
+ "name": "Kevin De La Rosa",
+ "avatar_url": "https://avatars.githubusercontent.com/u/86437159?v=4",
+ "profile": "https://github.com/KevDLR",
"contributions": [
"doc"
]
},
{
- "login": "helderpinto",
- "name": "HΓ©lder Pinto",
- "avatar_url": "https://avatars.githubusercontent.com/u/10661605?v=4",
- "profile": "https://aka.ms/helderpinto",
+ "login": "bwatts64",
+ "name": "bwatts64",
+ "avatar_url": "https://avatars.githubusercontent.com/u/32721128?v=4",
+ "profile": "https://github.com/bwatts64",
"contributions": [
"code",
- "review",
+ "review"
+ ]
+ },
+ {
+ "login": "danyhoterms",
+ "name": "Dany Hoter",
+ "avatar_url": "https://avatars.githubusercontent.com/u/155433721?v=4",
+ "profile": "https://github.com/DanyhoterMS",
+ "contributions": [
+ "code",
+ "review"
+ ]
+ },
+ {
+ "login": "jojohpm",
+ "name": "Joseph John",
+ "avatar_url": "https://avatars.githubusercontent.com/u/103460544?v=4",
+ "profile": "https://github.com/jojohpm",
+ "contributions": [
"doc",
+ "review"
+ ]
+ },
+ {
+ "login": "ripadrao",
+ "name": "ripadrao",
+ "avatar_url": "https://avatars.githubusercontent.com/u/61794401?v=4",
+ "profile": "https://github.com/ripadrao",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "pedrocsousa",
+ "name": "Pedro Sousa",
+ "avatar_url": "https://avatars.githubusercontent.com/u/99349050?v=4",
+ "profile": "https://github.com/pedrocsousa",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "Zeo-shark",
+ "name": "Sourav Bera",
+ "avatar_url": "https://avatars.githubusercontent.com/u/53810519?v=4",
+ "profile": "https://bento.me/souravbera",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "JayAreP",
+ "name": "J.R. Phillips",
+ "avatar_url": "https://avatars.githubusercontent.com/u/43276115?v=4",
+ "profile": "https://github.com/JayAreP",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "saadmsft",
+ "name": "Saad Mahmood",
+ "avatar_url": "https://avatars.githubusercontent.com/u/66096650?v=4",
+ "profile": "https://github.com/saadmsft",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "simonarbel",
+ "name": "simonarbel",
+ "avatar_url": "https://avatars.githubusercontent.com/u/100203391?v=4",
+ "profile": "https://github.com/simonarbel",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "DUeffing",
+ "name": "Daniel Ueffing",
+ "avatar_url": "https://avatars.githubusercontent.com/u/94981829?v=4",
+ "profile": "https://github.com/DUeffing",
+ "contributions": [
+ "ideas",
"bug"
]
},
+ {
+ "login": "sebassem",
+ "name": "Seif Bassem",
+ "avatar_url": "https://avatars.githubusercontent.com/u/38246040?v=4",
+ "profile": "https://www.seifbassem.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "arjenhuitema",
+ "name": "Arjen Huitema",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15944031?v=4",
+ "profile": "https://github.com/arjenhuitema",
+ "contributions": [
+ "code"
+ ]
+ },
{
"login": "yuanzhang9",
"name": "Yuan Zhang",
@@ -212,25 +355,6 @@
"bug"
]
},
- {
- "login": "mutansee",
- "name": "Mubarak Tanseer",
- "avatar_url": "https://avatars.githubusercontent.com/u/64589176?v=4",
- "profile": "https://github.com/mutansee",
- "contributions": [
- "bug"
- ]
- },
- {
- "login": "BenShy",
- "name": "Ben Shy",
- "avatar_url": "https://avatars.githubusercontent.com/u/18198475?v=4",
- "profile": "https://github.com/BenShy",
- "contributions": [
- "code",
- "review"
- ]
- },
{
"login": "treymorgan",
"name": "Trey Morgan",
@@ -285,6 +409,33 @@
"review"
]
},
+ {
+ "login": "sreenav",
+ "name": "SREENADHA REDDY VANKIREDDY",
+ "avatar_url": "https://avatars.githubusercontent.com/u/57934984?v=4",
+ "profile": "https://github.com/sreenav",
+ "contributions": [
+ "review"
+ ]
+ },
+ {
+ "login": "mutansee",
+ "name": "Mubarak Tanseer",
+ "avatar_url": "https://avatars.githubusercontent.com/u/64589176?v=4",
+ "profile": "https://github.com/mutansee",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "maggar",
+ "name": "maggar",
+ "avatar_url": "https://avatars.githubusercontent.com/u/55561955?v=4",
+ "profile": "https://github.com/maggar",
+ "contributions": [
+ "ideas"
+ ]
+ },
{
"login": "lkshck",
"name": "lkshck",
@@ -303,15 +454,6 @@
"review"
]
},
- {
- "login": "sreenav",
- "name": "SREENADHA REDDY VANKIREDDY",
- "avatar_url": "https://avatars.githubusercontent.com/u/57934984?v=4",
- "profile": "https://github.com/sreenav",
- "contributions": [
- "review"
- ]
- },
{
"login": "AdamAndersson",
"name": "Adam Andersson",
@@ -422,53 +564,6 @@
"bug"
]
},
- {
- "login": "ripadrao",
- "name": "ripadrao",
- "avatar_url": "https://avatars.githubusercontent.com/u/61794401?v=4",
- "profile": "https://github.com/ripadrao",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "pedrocsousa",
- "name": "Pedro Sousa",
- "avatar_url": "https://avatars.githubusercontent.com/u/99349050?v=4",
- "profile": "https://github.com/pedrocsousa",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "KevDLR",
- "name": "Kevin De La Rosa",
- "avatar_url": "https://avatars.githubusercontent.com/u/86437159?v=4",
- "profile": "https://github.com/KevDLR",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "ro100e",
- "name": "Robel",
- "avatar_url": "https://avatars.githubusercontent.com/u/59753782?v=4",
- "profile": "https://github.com/ro100e",
- "contributions": [
- "code",
- "doc"
- ]
- },
- {
- "login": "jojohpm",
- "name": "Joseph John",
- "avatar_url": "https://avatars.githubusercontent.com/u/103460544?v=4",
- "profile": "https://github.com/jojohpm",
- "contributions": [
- "doc",
- "review"
- ]
- },
{
"login": "misba-yousuf",
"name": "Misba Yousuf",
@@ -478,15 +573,6 @@
"doc"
]
},
- {
- "login": "simonarbel",
- "name": "simonarbel",
- "avatar_url": "https://avatars.githubusercontent.com/u/100203391?v=4",
- "profile": "https://github.com/simonarbel",
- "contributions": [
- "bug"
- ]
- },
{
"login": "wwmurphyAB",
"name": "Will Murphy",
@@ -496,16 +582,6 @@
"bug"
]
},
- {
- "login": "DUeffing",
- "name": "Daniel Ueffing",
- "avatar_url": "https://avatars.githubusercontent.com/u/94981829?v=4",
- "profile": "https://github.com/DUeffing",
- "contributions": [
- "ideas",
- "bug"
- ]
- },
{
"login": "da5is",
"name": "Matt Davis",
@@ -515,34 +591,6 @@
"bug"
]
},
- {
- "login": "Zeo-shark",
- "name": "Sourav Bera",
- "avatar_url": "https://avatars.githubusercontent.com/u/53810519?v=4",
- "profile": "https://bento.me/souravbera",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "akiskips",
- "name": "Orthodoxos Kipouridis",
- "avatar_url": "https://avatars.githubusercontent.com/u/56831775?v=4",
- "profile": "https://github.com/akiskips",
- "contributions": [
- "code",
- "doc"
- ]
- },
- {
- "login": "grantxyzou",
- "name": "grantxyzou",
- "avatar_url": "https://avatars.githubusercontent.com/u/110638253?v=4",
- "profile": "https://github.com/grantxyzou",
- "contributions": [
- "design"
- ]
- },
{
"login": "juyamagu",
"name": "Junya Yamaguchi",
@@ -552,15 +600,6 @@
"code"
]
},
- {
- "login": "bwatts64",
- "name": "bwatts64",
- "avatar_url": "https://avatars.githubusercontent.com/u/32721128?v=4",
- "profile": "https://github.com/bwatts64",
- "contributions": [
- "code"
- ]
- },
{
"login": "claudiazambella",
"name": "Claudia Zambella",
@@ -581,26 +620,6 @@
"bug"
]
},
- {
- "login": "RolandKrummenacher",
- "name": "Roland Krummenacher",
- "avatar_url": "https://avatars.githubusercontent.com/u/1803486?v=4",
- "profile": "https://github.com/RolandKrummenacher",
- "contributions": [
- "code",
- "review",
- "bug"
- ]
- },
- {
- "login": "JayAreP",
- "name": "J.R. Phillips",
- "avatar_url": "https://avatars.githubusercontent.com/u/43276115?v=4",
- "profile": "https://github.com/JayAreP",
- "contributions": [
- "code"
- ]
- },
{
"login": "ivanboscolo",
"name": "ivanboscolo",
@@ -627,23 +646,6 @@
"contributions": [
"bug",
"question"
- },
- {
- "login": "danyhoterms",
- "name": "Dany Hoter",
- "avatar_url": "https://avatars.githubusercontent.com/u/155433721?v=4",
- "profile": "https://github.com/DanyhoterMS",
- "contributions": [
- "code"
- ]
- },
- {
- "login": "lmoscinski",
- "name": "lmoscinski",
- "avatar_url": "https://avatars.githubusercontent.com/u/135173807?v=4",
- "profile": "https://github.com/lmoscinski",
- "contributions": [
- "design"
]
}
],
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 977bb15d4..04355a8c5 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -12,6 +12,7 @@
"CostManagement",
"deallocate",
"deallocated",
+ "Entra",
"FinOps",
"hackathon",
"interruptible",
@@ -21,10 +22,15 @@
"micflan",
"MOSA",
"msexports",
+ "Multicloud",
+ "Multitenant",
"PAYG",
+ "PBIT",
"PBIX",
+ "pricesheet",
"Quickstart",
"quickstarts",
+ "reingest",
"Roadmap",
"showback",
"startswith",
diff --git a/README.md b/README.md
index 464aeb8af..d97ac4e8b 100644
--- a/README.md
+++ b/README.md
@@ -28,90 +28,92 @@ There are many ways to participate. From reporting bugs and requesting features
Michael Flanakin π π» π π π§βπ« π£
Arthur Clares π π» π π π§βπ« π£
Sonia Cuff π π£
- maggar π π€
Brett Wilson π» π π
- Seif Bassem π»
+ HΓ©lder Pinto π» π π π
+ Nicolas Teyan π» π
- Anthony Romano π» π π
- Nicolas Teyan π» π
+ Bill Anderson π
+ Robel π» π
Sacha Narinx π» π π
- jamelachahbar π»
- Saad Mahmood π»
+ Anthony Romano π» π π
+ grantxyzou π¨
+ lmoscinski π¨
+
+
+ Roland Krummenacher π» π π
Divyadeep Dayal π»
+ jamelachahbar π»
+ Orthodoxos Kipouridis π» π
+ Ben Shy π» π
+ Kevin De La Rosa π
+ bwatts64 π» π
+ Dany Hoter π» π
+ Joseph John π π
+ ripadrao π
+ Pedro Sousa π
+ Sourav Bera π
+
+
+ J.R. Phillips π»
+ Saad Mahmood π»
+ simonarbel π
+ Daniel Ueffing π€ π
+ Seif Bassem π»
Arjen Huitema π»
- Bill Anderson π
- HΓ©lder Pinto π» π π π
+
+
Yuan Zhang π»
ymehdimsft π»
srilatha inavolu π» π
-
-
soumyananda π» π
Chris Bowman π
- Mubarak Tanseer π
- Ben Shy π» π
Trey Morgan π»
- Travis Silvers π
+ Travis Silvers π
Travis Silvers π
vijayaj4 π»
pskulkarni π»
Ankur Sharma π
- lkshck π
- Slavik N π
+ SREENADHA REDDY VANKIREDDY π
- SREENADHA REDDY VANKIREDDY π
+ Mubarak Tanseer π
+ maggar π€
+ lkshck π
+ Slavik N π
Adam Andersson π
Irena Jurica π
+
+
renanalmeidjr π
elvismangarae π
erincon01 π π¬
-
-
NavidKhan8 π
Maik van der Gaag π
Rodney π
+
+
Graham π
psilantropy π
Marc Samendinger π
-
-
Patric K. π» π
- ripadrao π
- Pedro Sousa π
- Kevin De La Rosa π
- Robel π» π
- Joseph John π π
-
-
Misba Yousuf π
- simonarbel π
Will Murphy π
- Daniel Ueffing π€ π
- Matt Davis π
- Sourav Bera π
- Orthodoxos Kipouridis π» π
- grantxyzou π¨
+ Matt Davis π
Junya Yamaguchi π»
- bwatts64 π»
Claudia Zambella π‘οΈ
Brian Wyka π π π
-
-
- Roland Krummenacher π» π π
- J.R. Phillips π»
ivanboscolo π
buxel π¬
+
+
John Lundell π π¬
- Dany Hoter π»
- lmoscinski π¨
diff --git a/docs/README.md b/docs/README.md
index 2bab7a692..4c014e5f9 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -111,90 +111,92 @@ All the main changes are tracked in the changelog. For additional details, refer
Michael Flanakin π π» π π π§βπ« π£
Arthur Clares π π» π π π§βπ« π£
Sonia Cuff π π£
- maggar π π€
Brett Wilson π» π π
- Seif Bassem π»
+ HΓ©lder Pinto π» π π π
+ Nicolas Teyan π» π
- Anthony Romano π» π π
- Nicolas Teyan π» π
+ Bill Anderson π
+ Robel π» π
Sacha Narinx π» π π
- jamelachahbar π»
- Saad Mahmood π»
+ Anthony Romano π» π π
+ grantxyzou π¨
+ lmoscinski π¨
+
+
+ Roland Krummenacher π» π π
Divyadeep Dayal π»
+ jamelachahbar π»
+ Orthodoxos Kipouridis π» π
+ Ben Shy π» π
+ Kevin De La Rosa π
+ bwatts64 π» π
+ Dany Hoter π» π
+ Joseph John π π
+ ripadrao π
+ Pedro Sousa π
+ Sourav Bera π
+
+
+ J.R. Phillips π»
+ Saad Mahmood π»
+ simonarbel π
+ Daniel Ueffing π€ π
+ Seif Bassem π»
Arjen Huitema π»
- Bill Anderson π
- HΓ©lder Pinto π» π π π
+
+
Yuan Zhang π»
ymehdimsft π»
srilatha inavolu π» π
-
-
soumyananda π» π
Chris Bowman π
- Mubarak Tanseer π
- Ben Shy π» π
Trey Morgan π»
- Travis Silvers π
+ Travis Silvers π
Travis Silvers π
vijayaj4 π»
pskulkarni π»
Ankur Sharma π
- lkshck π
- Slavik N π
+ SREENADHA REDDY VANKIREDDY π
- SREENADHA REDDY VANKIREDDY π
+ Mubarak Tanseer π
+ maggar π€
+ lkshck π
+ Slavik N π
Adam Andersson π
Irena Jurica π
+
+
renanalmeidjr π
elvismangarae π
erincon01 π π¬
-
-
NavidKhan8 π
Maik van der Gaag π
Rodney π
+
+
Graham π
psilantropy π
Marc Samendinger π
-
-
Patric K. π» π
- ripadrao π
- Pedro Sousa π
- Kevin De La Rosa π
- Robel π» π
- Joseph John π π
-
-
Misba Yousuf π
- simonarbel π
Will Murphy π
- Daniel Ueffing π€ π
- Matt Davis π
- Sourav Bera π
- Orthodoxos Kipouridis π» π
- grantxyzou π¨
+ Matt Davis π
Junya Yamaguchi π»
- bwatts64 π»
Claudia Zambella π‘οΈ
Brian Wyka π π π
-
-
- Roland Krummenacher π» π π
- J.R. Phillips π»
ivanboscolo π
buxel π¬
+
+
John Lundell π π¬
- Dany Hoter π»
- lmoscinski π¨
diff --git a/docs/_includes/ftkver.txt b/docs/_includes/ftkver.txt
index 12f2e5f06..ce609caf8 100644
--- a/docs/_includes/ftkver.txt
+++ b/docs/_includes/ftkver.txt
@@ -1 +1 @@
-0.8-dev
\ No newline at end of file
+0.8
\ No newline at end of file
diff --git a/docs/_resources/changelog.md b/docs/_resources/changelog.md
index 9c8c8dae3..d63946dd6 100644
--- a/docs/_resources/changelog.md
+++ b/docs/_resources/changelog.md
@@ -71,20 +71,6 @@ Legend:
>
> 1. Cost Management export modules for subscriptions and resource groups.
-π FinOps workbooks
-{: .fs-5 .fw-500 .mt-4 mb-0 }
-
-> β Added:
->
-> - [Optimization workbook](../_optimize/workbooks/optimization/README.md)
-> 1. Azure Arc Windows license management under the **Commitment Discounts** tab.
->
-> π οΈ Fixed:
->
-> - [Optimization workbook](../_optimize/workbooks/optimization/README.md)
-> 1. Enabled "Export to CSV" option on the **Idle backups** query.
-> 1. Corrected VM processor details on the **Compute** tab query.
-
## π v0.8
@@ -101,6 +87,7 @@ Legend:
π¦ FinOps hubs
{: .fs-5 .fw-500 .mt-4 mb-0 }
+
> β Added:
>
> 1. Added Data Explorer dashboard template.
@@ -115,12 +102,13 @@ Legend:
> 1. Expand details about supported datasets in documentation.
> 1. Updated the default setting for Data Explorer trusted external tenants from "All tenants" to "My tenant only".
> - This change may cause breaking issues for Data Explorer clusters accessed by users from external tenants.
+> 1. Clean up bicep warnings in the FinOps hub deployment template.
>
> π« Deprecated:
>
> 1. Deprecated the `daterange()` KQL function. Please use `datestring(datetime, [datetime])` instead.
> 1. Deprecated the `monthsago()` KQL function. Please use `startofmonth(datetime, [offset])` instead.
->
+>
> π οΈ Fixed:
>
> 1. Added missing request body to fix the false positive `config_RunExportJobs` pipeline validation errors in Data Factory ([#1250](https://github.com/microsoft/finops-toolkit/issues/1250))
@@ -138,7 +126,7 @@ Legend:
> 1. Added the Pricing units open dataset to support price sheet data cleanup.
> 1. Added `PricingUnit` and `x_PricingBlockSize` columns to the **Prices** table.
> 1. Added Total savings page to the Rate optimization report.
-> 1. Added Effective Savings Rate (ESR).
+> 1. Added Effective Savings Rate (ESR) to Cost summary and Rate optimization reports.
>
> βοΈ Changed:
>
@@ -164,6 +152,7 @@ Legend:
π¦ FinOps hubs
{: .fs-5 .fw-500 .mt-4 mb-0 }
+
> β Added:
>
> 1. Add `resource_type()` KQL function to map internal resource type IDs to display names.
@@ -184,6 +173,20 @@ Legend:
> - This fix resolves the issue for all newly ingested data.
> - To fix historical data, reingest data using the `ingestion_ExecuteETL` Data Factory pipeline.
+π FinOps workbooks
+{: .fs-5 .fw-500 .mt-4 mb-0 }
+
+> β Added:
+>
+> - [Optimization workbook](../_optimize/workbooks/optimization/README.md)
+> 1. Azure Arc Windows license management under the **Commitment Discounts** tab.
+>
+> π οΈ Fixed:
+>
+> - [Optimization workbook](../_optimize/workbooks/optimization/README.md)
+> 1. Enabled "Export to CSV" option on the **Idle backups** query.
+> 1. Corrected VM processor details on the **Compute** tab query.
+
π Optimization engine
{: .fs-5 .fw-500 .mt-4 mb-0 }
@@ -200,7 +203,7 @@ Legend:
> 1. Added explicit `-SystemAssignedIdentity` switch parameter to the [New-FinOpsCostExport command](../_automation/powershell/cost/New-FinOpsCostExport.md) to enable system-assigned identity.
> 1. Updated the [Remove-FinOpsHub command](../_automation/powershell/hubs/Remove-FinOpsHub.md) to show a list of resources before confirming delete.
> - The name of each deleted resource is printed for better visibility during the deletion process.
-> - Added ability to confirm all deletions using a "Yes to All" option ([#1187](https://github.com/microsoft/finops-toolkit/issues/1187)).
+> - Added ability to confirm all deletions using a `-Force` parameter or "Yes to All" option ([#1187](https://github.com/microsoft/finops-toolkit/issues/1187)).
>
> βοΈ Changed:
>
@@ -236,23 +239,22 @@ Legend:
> β Added:
>
-
> - [Regions](../_reporting/data/README.md#οΈ-regions)
-> 1. Added the following new region values: "ase", "aue", "southeastus", "taiwannorthwest".
+> 1. Added the following new region values: "ase", "aue", "southeastus", "taiwannorthwest".
> - [Pricing units](../_reporting/data/README.md#-pricing-units)
> 1. Added the "1000 TB" unit of measure ([#1181](https://github.com/microsoft/finops-toolkit/issues/1181)).
> - [Resource types](../_reporting/data/README.md#-resource-types)
> 1. Added 8 new Microsoft.AzureCIS resource types.
-> 1. Added 5 new Commvault.ContentStore resource types.
+> 1. Added 5 new Commvault.ContentStore resource types.
> 1. Added 6 new Microsoft.ChangeSafety resource types.
> 1. Added 2 new Microsoft.DeviceOnboarding resource types.
> 1. Added 3 new Microsoft.DurableTask resource types.
> 1. Added 2 new Microsoft.Network DNS resolver resource types.
> 1. Added 2 new Microsoft.Relationships resource types.
> 1. Added 3 new Microsoft.Workloads resource types.
-> 1. Added 14 new resource types: microsoft.baremetal/peeringsettings, microsoft.cdn/edgeactions, microsoft.compute/computefleetscalesets, microsoft.compute/virtualmachinescalesetscomputehub, microsoft.liftrpilot/organizations, microsoft.managednetworkfabric/networkmonitors, microsoft.mission/approvals, microsoft.mysqldiscovery/mysqlsites/agents, microsoft.portalservices/settings, microsoft.proposal/proposals, microsoft.zerotrustsegmentation/segmentationmanagers, mongodb.atlas/organizations.
+> 1. Added 14 new resource types: microsoft.baremetal/peeringsettings, microsoft.cdn/edgeactions, microsoft.compute/computefleetscalesets, microsoft.compute/virtualmachinescalesetscomputehub, microsoft.liftrpilot/organizations, microsoft.managednetworkfabric/networkmonitors, microsoft.mission/approvals, microsoft.mysqldiscovery/mysqlsites/agents, microsoft.portalservices/settings, microsoft.proposal/proposals, microsoft.zerotrustsegmentation/segmentationmanagers, mongodb.atlas/organizations.
> - [Services](../_reporting/data/README.md#-services)
-> 1. Added 4 resource types to new services: microsoft.azurefleet/fleets, microsoft.hybridnetwork/sitenetworkservices, microsoft.iotoperations/instances, and microsoft.networkcloud/baremetalmachines.
+> 1. Added 4 resource types to new services: microsoft.azurefleet/fleets, microsoft.hybridnetwork/sitenetworkservices, microsoft.iotoperations/instances, and microsoft.networkcloud/baremetalmachines.
>
> βοΈ Changed:
>
@@ -263,7 +265,7 @@ Legend:
> 1. Updated 7 Microsoft.MobilePacketCore resource types.
> 1. Updated 5 Microsoft.StandByPool resource types.
> 1. Updated 3 Microsoft.Workloads resource types.
-> 1. Updated 17 resource types: arizeai.observabilityeval/organizations, microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems, microsoft.azurelargeinstance/azurelargestorageinstances, microsoft.community/communitytrainings, microsoft.compute/images, microsoft.compute/imagescomputehub, microsoft.deviceonboarding/onboardingservices/policies, microsoft.devopsinfrastructure/pools, microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups, microsoft.kubernetes/connectedclusters, microsoft.machinelearningservices/aistudio, microsoft.manufacturingplatform/manufacturingdataservices, microsoft.messagingconnectors/connectors, microsoft.network/dnszones, microsoft.network/trafficmanagerprofiles, microsoft.network/virtualnetworktaps, microsoft.servicebus/namespaces.
+> 1. Updated 17 resource types: arizeai.observabilityeval/organizations, microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems, microsoft.azurelargeinstance/azurelargestorageinstances, microsoft.community/communitytrainings, microsoft.compute/images, microsoft.compute/imagescomputehub, microsoft.deviceonboarding/onboardingservices/policies, microsoft.devopsinfrastructure/pools, microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups, microsoft.kubernetes/connectedclusters, microsoft.machinelearningservices/aistudio, microsoft.manufacturingplatform/manufacturingdataservices, microsoft.messagingconnectors/connectors, microsoft.network/dnszones, microsoft.network/trafficmanagerprofiles, microsoft.network/virtualnetworktaps, microsoft.servicebus/namespaces.
@@ -409,15 +411,15 @@ This release is a minor patch to update documentation and fix Power BI storage r
> 1. Added 4 new Microsoft.Fabric resource types.
> 1. Added 5 new Microsoft.OpenLogisticsPlatform resource types.
> 1. Added 3 new Microsoft.Sovereign resource types.
-> 1. Added 14 other new resource types: arizeai.observabilityeval/organizations, lambdatest.hyperexecute/organizations, microsoft.azurestackhci/edgedevices/jobs, microsoft.clouddeviceplatform/delegatedidentities, microsoft.compute/capacityreservationgroupscomputehub, microsoft.compute/galleries/imagescomputehub, microsoft.compute/hostgroupscomputehub, microsoft.hybridcompute/machinessoftwareassurance, microsoft.machinelearning/workspaces, microsoft.resources/deletedresources, microsoft.security/defenderforstoragesettings/malwarescans, microsoft.weightsandbiases/instances, neon.postgres/organizations, pinecone.vectordb/organizations.
+> 1. Added 14 other new resource types: arizeai.observabilityeval/organizations, lambdatest.hyperexecute/organizations, microsoft.azurestackhci/edgedevices/jobs, microsoft.clouddeviceplatform/delegatedidentities, microsoft.compute/capacityreservationgroupscomputehub, microsoft.compute/galleries/imagescomputehub, microsoft.compute/hostgroupscomputehub, microsoft.hybridcompute/machinessoftwareassurance, microsoft.machinelearning/workspaces, microsoft.resources/deletedresources, microsoft.security/defenderforstoragesettings/malwarescans, microsoft.weightsandbiases/instances, neon.postgres/organizations, pinecone.vectordb/organizations.
> - [Services](../_reporting/data/README.md#-services)
-> 1. Added 3 resource types to existing services: microsoft.hardwaresecuritymodules/cloudhsmclusters, microsoft.healthdataaiservices/deidservices, microsoft.insights/datacollectionrules.
+> 1. Added 3 resource types to existing services: microsoft.hardwaresecuritymodules/cloudhsmclusters, microsoft.healthdataaiservices/deidservices, microsoft.insights/datacollectionrules.
>
> βοΈ Changed:
>
> - [Resource types](../_reporting/data/README.md#-resource-types)
> 1. Updated 17 new Microsoft.ComputeHub resource types.
-> 1. Updated 9 other resource type: microsoft.appsecurity/policies, microsoft.compute/virtualmachines/providers/guestconfigurationassignments, microsoft.dbforpostgresql/flexibleservers, microsoft.deviceregistry/billingcontainers, microsoft.durabletask/namespaces, microsoft.durabletask/namespaces/taskhubs, microsoft.edge/configurations, microsoft.hybridcompute/machines/providers/guestconfigurationassignments, microsoft.securitycopilot/capacities.
+> 1. Updated 9 other resource type: microsoft.appsecurity/policies, microsoft.compute/virtualmachines/providers/guestconfigurationassignments, microsoft.dbforpostgresql/flexibleservers, microsoft.deviceregistry/billingcontainers, microsoft.durabletask/namespaces, microsoft.durabletask/namespaces/taskhubs, microsoft.edge/configurations, microsoft.hybridcompute/machines/providers/guestconfigurationassignments, microsoft.securitycopilot/capacities.
@@ -552,7 +554,7 @@ This release is a minor patch to update documentation and fix Rate optimization
> π« Deprecated:
>
> 1. With the deprecation of the legacy Log Analytics agent in August 31, the `Setup-LogAnalyticsWorkspaces` script is no longer being maintained and will be removed in a future update.
-> - The script was used to setup performance counters collection for machines connected to Log Analytics workspaces with the legacy agent.
+> - The script was used to setup performance counters collection for machines connected to Log Analytics workspaces with the legacy agent.
> - We recommend migrating to the [Azure Monitor Agent](https://learn.microsoft.com/azure/azure-monitor/agents/azure-monitor-agent-migration) and use the `Setup-DataCollectionRules` script to [setup performance counters collection with Data Collection Rules](https://aka.ms/AzureOptimizationEngine/workspaces).
π₯οΈ PowerShell
@@ -572,10 +574,10 @@ This release is a minor patch to update documentation and fix Rate optimization
> 2. Added 17 new Microsoft.ComputeHub resource types.
> 3. Added 2 new Microsoft.DeviceOnboarding resource types.
> 4. Added 8 new Microsoft.Edge resource types.
-> 5. Added 8 other new resource types: "microsoft.agricultureplatform/agriservices", "microsoft.azurefleet/fleetscomputehub", "microsoft.cloudtest/buildcaches", "microsoft.contoso/employees/desks", "microsoft.databasefleetmanager/fleets", "microsoft.resources/databoundaries", "microsoft.subscription/changetenantrequest", "microsoft.sustainabilityservices/calculations".
+> 5. Added 8 other new resource types: "microsoft.agricultureplatform/agriservices", "microsoft.azurefleet/fleetscomputehub", "microsoft.cloudtest/buildcaches", "microsoft.contoso/employees/desks", "microsoft.databasefleetmanager/fleets", "microsoft.resources/databoundaries", "microsoft.subscription/changetenantrequest", "microsoft.sustainabilityservices/calculations".
> - [Services](../_reporting/data/README.md#-services)
> 1. Added a new ServiceSubcategory column to support FOCUS 1.1 ServiceSubcategory mapping.
-> 2. Added the following resource types to existing services: "microsoft.apimanagement/gateways", "microsoft.sql/longtermretentionmanagedinstances", "microsoft.sql/longtermretentionservers", "microsoft.verifiedid/authorities".
+> 2. Added the following resource types to existing services: "microsoft.apimanagement/gateways", "microsoft.sql/longtermretentionmanagedinstances", "microsoft.sql/longtermretentionservers", "microsoft.verifiedid/authorities".
>
> βοΈ Changed:
>
@@ -583,7 +585,7 @@ This release is a minor patch to update documentation and fix Rate optimization
> 1. Updated 2 Microsoft.DurableTask resource types.
> 2. Updated 4 Microsoft.SignalRService resource types.
> 3. Updated 4 Microsoft.TimeSeriesInsights resource types.
-> 4. Updated 4 other resource type: "microsoft.network/dnsresolvers", "microsoft.search/searchservices", "microsoft.storagepool/diskpools/iscsitargets", "oracle.database/oraclesubscriptions".
+> 4. Updated 4 other resource type: "microsoft.network/dnsresolvers", "microsoft.search/searchservices", "microsoft.storagepool/diskpools/iscsitargets", "oracle.database/oraclesubscriptions".
[Download v0.6](https://github.com/microsoft/finops-toolkit/releases/tag/v0.6){: .btn .mt-2 .mb-4 .mb-md-0 .mr-4 }
[Full changelog](https://github.com/microsoft/finops-toolkit/compare/v0.5...v0.6){: .btn .mt-2 .mb-4 .mb-md-0 .mr-4 }
@@ -676,7 +678,7 @@ This release is a minor patch to Power BI files. These files were updated in the
>
> - [Optimization workbook](../_optimize/workbooks/optimization/README.md):
> 1. Redesign of the Rate Optimization tab for easier identification of the break-even point for reservations
-> 2. Fixed the AHB VMSS query to count the total cores consumed per the entire scale set
+> 2. Fixed the AHB VMSS query to count the total cores consumed per the entire scale set
> 3. Improved storage idle disks query to ignore disks used by AKS pods
> 4. Updated Storage not v2 query to exclude blockBlobStorage accounts from the list
> 5. Added export option for the list of idle backups to streamline data extraction
@@ -726,21 +728,21 @@ This release is a minor patch to Power BI files. These files were updated in the
> - [Pricing units](../_reporting/data/README.md#-pricing-units)
> 1. Added handling for the following new UnitOfMeasure values: "1 /Minute", "10 PiB/Hour", "100000 /Month", "Text".
> - [Regions](../_reporting/data/README.md#οΈ-regions)
-> 1. Added the following new region values: "asiapacific", "australia", "azure stack", "eastsu2", "gbs", germany west "central", "japan", "sweden central", "unitedstates", "us dod central", "us dod east", "us gov iowa", "us gov virginia", "us2", "usa", "usv".
+> 1. Added the following new region values: "asiapacific", "australia", "azure stack", "eastsu2", "gbs", germany west "central", "japan", "sweden central", "unitedstates", "us dod central", "us dod east", "us gov iowa", "us gov virginia", "us2", "usa", "usv".
> - [Resource types](../_reporting/data/README.md#οΈ-resource-types)
-> 1. Added the following new resource types: "microsoft.app/logicapps", "microsoft.app/logicapps/workflows", "microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems", "microsoft.azurebusinesscontinuity/unifiedprotecteditems", "microsoft.azurecis/publishconfigvalues", "microsoft.compositesolutions/compositesolutiondefinitions", "microsoft.compositesolutions/compositesolutions", "microsoft.compute/capacityreservationgroups/capacityreservations", "microsoft.compute/virtualmachinescalesets/virtualmachines", "microsoft.datareplication/replicationvaults/alertsettings", "microsoft.datareplication/replicationvaults/events", "microsoft.datareplication/replicationvaults/jobs", "microsoft.datareplication/replicationvaults/jobs/operations", "microsoft.datareplication/replicationvaults/operations", "microsoft.datareplication/replicationvaults/protecteditems", "microsoft.datareplication/replicationvaults/protecteditems/operations", "microsoft.datareplication/replicationvaults/protecteditems/recoverypoints", "microsoft.datareplication/replicationvaults/replicationextensions", "microsoft.datareplication/replicationvaults/replicationextensions/operations", "microsoft.datareplication/replicationvaults/replicationpolicies", "microsoft.datareplication/replicationvaults/replicationpolicies/operations", "microsoft.deviceregistry/billingcontainers", "microsoft.deviceregistry/discoveredassetendpointprofiles", "microsoft.deviceregistry/discoveredassets", "microsoft.deviceregistry/schemaregistries", "microsoft.deviceregistry/schemaregistries/schemas", "microsoft.deviceregistry/schemaregistries/schemas/schemaversions", "microsoft.eventgrid/systemtopics/eventsubscriptions", "microsoft.hardware/orders", "microsoft.hybridcompute/machines/microsoft.awsconnector/ec2instances", "microsoft.hybridonboarding/extensionmanagers", "microsoft.iotoperations/instances", "microsoft.iotoperations/instances/brokers", "microsoft.iotoperations/instances/brokers/authentications", "microsoft.iotoperations/instances/brokers/authorizations", "microsoft.iotoperations/instances/brokers/listeners", "microsoft.iotoperations/instances/dataflowendpoints", "microsoft.iotoperations/instances/dataflowprofiles", "microsoft.iotoperations/instances/dataflowprofiles/dataflows", "microsoft.messagingconnectors/connectors", "microsoft.mobilepacketcore/networkfunctions", "microsoft.saashub/cloudservices/hidden", "microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses", "microsoft.secretsynccontroller/secretsyncs", "microsoft.storagepool/diskpools/iscsitargets", "microsoft.usagebilling/accounts/dataexports", "microsoft.usagebilling/accounts/metricexports", "microsoft.windowsesu/multipleactivationkeys".
+> 1. Added the following new resource types: "microsoft.app/logicapps", "microsoft.app/logicapps/workflows", "microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems", "microsoft.azurebusinesscontinuity/unifiedprotecteditems", "microsoft.azurecis/publishconfigvalues", "microsoft.compositesolutions/compositesolutiondefinitions", "microsoft.compositesolutions/compositesolutions", "microsoft.compute/capacityreservationgroups/capacityreservations", "microsoft.compute/virtualmachinescalesets/virtualmachines", "microsoft.datareplication/replicationvaults/alertsettings", "microsoft.datareplication/replicationvaults/events", "microsoft.datareplication/replicationvaults/jobs", "microsoft.datareplication/replicationvaults/jobs/operations", "microsoft.datareplication/replicationvaults/operations", "microsoft.datareplication/replicationvaults/protecteditems", "microsoft.datareplication/replicationvaults/protecteditems/operations", "microsoft.datareplication/replicationvaults/protecteditems/recoverypoints", "microsoft.datareplication/replicationvaults/replicationextensions", "microsoft.datareplication/replicationvaults/replicationextensions/operations", "microsoft.datareplication/replicationvaults/replicationpolicies", "microsoft.datareplication/replicationvaults/replicationpolicies/operations", "microsoft.deviceregistry/billingcontainers", "microsoft.deviceregistry/discoveredassetendpointprofiles", "microsoft.deviceregistry/discoveredassets", "microsoft.deviceregistry/schemaregistries", "microsoft.deviceregistry/schemaregistries/schemas", "microsoft.deviceregistry/schemaregistries/schemas/schemaversions", "microsoft.eventgrid/systemtopics/eventsubscriptions", "microsoft.hardware/orders", "microsoft.hybridcompute/machines/microsoft.awsconnector/ec2instances", "microsoft.hybridonboarding/extensionmanagers", "microsoft.iotoperations/instances", "microsoft.iotoperations/instances/brokers", "microsoft.iotoperations/instances/brokers/authentications", "microsoft.iotoperations/instances/brokers/authorizations", "microsoft.iotoperations/instances/brokers/listeners", "microsoft.iotoperations/instances/dataflowendpoints", "microsoft.iotoperations/instances/dataflowprofiles", "microsoft.iotoperations/instances/dataflowprofiles/dataflows", "microsoft.messagingconnectors/connectors", "microsoft.mobilepacketcore/networkfunctions", "microsoft.saashub/cloudservices/hidden", "microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses", "microsoft.secretsynccontroller/secretsyncs", "microsoft.storagepool/diskpools/iscsitargets", "microsoft.usagebilling/accounts/dataexports", "microsoft.usagebilling/accounts/metricexports", "microsoft.windowsesu/multipleactivationkeys".
> - [Services](../_reporting/data/README.md#οΈ-services)
> 1. Added the following consumed services: "API Center", "API Management", "Bastion Scale Units", "Microsoft.Community", "Microsoft.DataReplication.Admin", "Microsoft.DevOpsInfrastructure", "Microsoft.Dynamics365FraudProtection", "Microsoft.HybridContainerService", "Microsoft.NetworkFunction", "Microsoft.RecommendationsService", "Microsoft.ServiceNetworking", "Virtual Network".
-> 2. Added the following resource types to existing services: "Microsoft.AgFoodPlatform/farmBeats", "Microsoft.App/sessionPools", "Microsoft.AzureActiveDirectory/ciamDirectories", "Microsoft.AzureArcData/sqlServerEsuLicenses", "Microsoft.Graph/accounts", "Microsoft.MachineLearningServices/registries", "Microsoft.Orbital/groundStations", "PlayFabBillingService/partyVoice".
+> 2. Added the following resource types to existing services: "Microsoft.AgFoodPlatform/farmBeats", "Microsoft.App/sessionPools", "Microsoft.AzureActiveDirectory/ciamDirectories", "Microsoft.AzureArcData/sqlServerEsuLicenses", "Microsoft.Graph/accounts", "Microsoft.MachineLearningServices/registries", "Microsoft.Orbital/groundStations", "PlayFabBillingService/partyVoice".
>
> βοΈ Changed:
>
> - [Pricing units](../_reporting/data/README.md#-pricing-units)
> 1. Changed DistinctUnits for the "10000s" UnitOfMeasure from "Units" to "Transactions".
> - [Resource types](../_reporting/data/README.md#οΈ-resource-types)
-> 1. Updated the following resource types: "microsoft.apimanagement/gateways", "microsoft.azurearcdata/sqlserveresulicenses", "microsoft.azurestackhci/edgenodepools", "microsoft.azurestackhci/galleryimages", "microsoft.azurestackhci/logicalnetworks", "microsoft.azurestackhci/marketplacegalleryimages", "microsoft.azurestackhci/networkinterfaces", "microsoft.azurestackhci/storagecontainers", "microsoft.cache/redisenterprise", "microsoft.cache/redisenterprise/databases", "microsoft.databricks/accessconnectors", "microsoft.datareplication/replicationvaults", "microsoft.devhub/iacprofiles", "microsoft.edge/sites", "microsoft.eventhub/namespaces", "microsoft.hybridcompute/gateways", "microsoft.impact/connectors", "microsoft.iotoperationsorchestrator/instances", "microsoft.iotoperationsorchestrator/solutions", "microsoft.iotoperationsorchestrator/targets", "microsoft.kubernetesruntime/loadbalancers", "microsoft.manufacturingplatform/manufacturingdataservices", "microsoft.network/dnsforwardingrulesets", "microsoft.network/dnsresolvers", "microsoft.network/dnszones", "microsoft.powerbidedicated/capacities", "microsoft.programmableconnectivity/gateways", "microsoft.programmableconnectivity/operatorapiconnections", "microsoft.programmableconnectivity/operatorapiplans", "microsoft.resources/subscriptions/resourcegroups", "microsoft.security/pricings", "microsoft.sovereign/transparencylogs", "microsoft.storagepool/diskpools".
-> 2. Updated multiple resource types for the following resource providers: "microsoft.awsconnector".
-> 3. Changed the following resource providers to be GA: "microsoft.modsimworkbench".
+> 1. Updated the following resource types: "microsoft.apimanagement/gateways", "microsoft.azurearcdata/sqlserveresulicenses", "microsoft.azurestackhci/edgenodepools", "microsoft.azurestackhci/galleryimages", "microsoft.azurestackhci/logicalnetworks", "microsoft.azurestackhci/marketplacegalleryimages", "microsoft.azurestackhci/networkinterfaces", "microsoft.azurestackhci/storagecontainers", "microsoft.cache/redisenterprise", "microsoft.cache/redisenterprise/databases", "microsoft.databricks/accessconnectors", "microsoft.datareplication/replicationvaults", "microsoft.devhub/iacprofiles", "microsoft.edge/sites", "microsoft.eventhub/namespaces", "microsoft.hybridcompute/gateways", "microsoft.impact/connectors", "microsoft.iotoperationsorchestrator/instances", "microsoft.iotoperationsorchestrator/solutions", "microsoft.iotoperationsorchestrator/targets", "microsoft.kubernetesruntime/loadbalancers", "microsoft.manufacturingplatform/manufacturingdataservices", "microsoft.network/dnsforwardingrulesets", "microsoft.network/dnsresolvers", "microsoft.network/dnszones", "microsoft.powerbidedicated/capacities", "microsoft.programmableconnectivity/gateways", "microsoft.programmableconnectivity/operatorapiconnections", "microsoft.programmableconnectivity/operatorapiplans", "microsoft.resources/subscriptions/resourcegroups", "microsoft.security/pricings", "microsoft.sovereign/transparencylogs", "microsoft.storagepool/diskpools".
+> 2. Updated multiple resource types for the following resource providers: "microsoft.awsconnector".
+> 3. Changed the following resource providers to be GA: "microsoft.modsimworkbench".
> - [Services](../_reporting/data/README.md#οΈ-services)
> 1. Moved Microsoft Genomics from the "AI and Machine Learning" service category to "Analytics".
> 2. Changed Microsoft Genomics from the "SaaS" service model to "PaaS".
@@ -754,7 +756,7 @@ This release is a minor patch to Power BI files. These files were updated in the
> ποΈ Removed
>
> - [Resource types](../_reporting/data/README.md#οΈ-resource-types)
-> 1. Removed internal "microsoft.cognitiveservices/browse*" resource types.
+> 1. Removed internal "microsoft.cognitiveservices/browse*" resource types.
[Download v0.5](https://github.com/microsoft/finops-toolkit/releases/tag/v0.5){: .btn .mt-2 .mb-4 .mb-md-0 .mr-4 }
[Full changelog](https://github.com/microsoft/finops-toolkit/compare/v0.4...v0.5){: .btn .mt-2 .mb-4 .mb-md-0 .mr-4 }
@@ -813,10 +815,10 @@ This release is a minor patch to Power BI files. These files were updated in the
> 2. Simplified formatting for the `BillingPeriod` and `ChargePeriod` measures in Power BI.
> 3. Improved error handling for derived savings columns in the Costs query.
> 4. Simplified queries and improved error handling in the START HERE query for report setup steps.
-> 5. Changed internal storage for reports to use [Tabular Model Definition Language (TMDL)](https://learn.microsoft.com/power-bi/developer/projects/projects-dataset#tmdl-format).
+> 5. Changed internal storage for reports to use [Tabular Model Definition Language (TMDL)](https://learn.microsoft.com/power-bi/developer/projects/projects-dataset#tmdl-format).
> - This change makes it easier to review changes to the data model in Power BI.
> - Reports will still be released as PBIX files so this change should not impact end users.
-> - Visualizations are not being switched to [Power BI Enhanced Report (PBIR)](https://learn.microsoft.com/power-bi/developer/projects/projects-report#pbir-format) format yet due to functional limitations that would impact end users (as of June 2024).
+> - Visualizations are not being switched to [Power BI Enhanced Report (PBIR)](https://learn.microsoft.com/power-bi/developer/projects/projects-report#pbir-format) format yet due to functional limitations that would impact end users (as of June 2024).
> - [Cost summary](../_reporting/power-bi/cost-summary.md):
> 1. Changed the [Cost summary Purchases page](../_reporting/power-bi/cost-summary.md#purchases) and [Rate optimization Purchases page](../_reporting/power-bi/rate-optimization.md#purchases) to use PricingQuantity instead of Usage/ConsumedQuantity and added the PricingUnit column.
> 2. Updated the [DQ page](../_reporting/power-bi/cost-summary.md#dq) to identify empty ChargeDescription rows.
@@ -850,10 +852,10 @@ This release is a minor patch to Power BI files. These files were updated in the
> 4. Explore commitment discount savings to get a clear overview of rate optimization opportunities.
> 5. Quickly view public IP addresses with DDoS protection enabled and compare if it would be cheaper to enable DDoS to the vNet instead.
> 6. Identify Azure Hybrid Benefit usage for SQL Database elastic pools to maximize cost efficiency.
->
+>
> - [Governance workbook](../_optimize/workbooks/governance/README.md):
> 1. Added managed disk usage monitoring.
-
+>
> βοΈ Changed:
>
> - [Optimization workbook](../_optimize/workbooks/optimization/README.md):
diff --git a/docs/deploy/finops-hub-0.8.json b/docs/deploy/finops-hub-0.8.json
new file mode 100644
index 000000000..a80c857f4
--- /dev/null
+++ b/docs/deploy/finops-hub-0.8.json
@@ -0,0 +1,8194 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "13598346182779466463"
+ }
+ },
+ "parameters": {
+ "hubName": {
+ "type": "string",
+ "metadata": {
+ "description": "Optional. Name of the hub. Used to ensure unique resource names. Default: \"finops-hub\"."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Azure location where all resources should be created. See https://aka.ms/azureregions. Default: Same as deployment."
+ }
+ },
+ "storageSku": {
+ "type": "string",
+ "defaultValue": "Premium_LRS",
+ "allowedValues": [
+ "Premium_LRS",
+ "Premium_ZRS"
+ ],
+ "metadata": {
+ "description": "Optional. Storage SKU to use. LRS = Lowest cost, ZRS = High availability. Note Standard SKUs are not available for Data Lake gen2 storage. Allowed: Premium_LRS, Premium_ZRS. Default: Premium_LRS."
+ }
+ },
+ "enableInfrastructureEncryption": {
+ "type": "bool",
+ "defaultValue": false,
+ "metadata": {
+ "description": "Optional. Enable infrastructure encryption on the storage account. Default = false."
+ }
+ },
+ "remoteHubStorageUri": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Storage account to push data to for ingestion into a remote hub."
+ }
+ },
+ "remoteHubStorageKey": {
+ "type": "securestring",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Storage account key to use when pushing data to a remote hub."
+ }
+ },
+ "dataExplorerName": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer cluster to use for advanced analytics. If empty, Azure Data Explorer will not be deployed. Required to use with Power BI if you have more than $2-5M/mo in costs being monitored. Default: \"\" (do not use)."
+ }
+ },
+ "dataExplorerSku": {
+ "type": "string",
+ "defaultValue": "Dev(No SLA)_Standard_D11_v2",
+ "allowedValues": [
+ "Dev(No SLA)_Standard_E2a_v4",
+ "Dev(No SLA)_Standard_D11_v2",
+ "Standard_D11_v2",
+ "Standard_D12_v2",
+ "Standard_D13_v2",
+ "Standard_D14_v2",
+ "Standard_D16d_v5",
+ "Standard_D32d_v4",
+ "Standard_D32d_v5",
+ "Standard_DS13_v2+1TB_PS",
+ "Standard_DS13_v2+2TB_PS",
+ "Standard_DS14_v2+3TB_PS",
+ "Standard_DS14_v2+4TB_PS",
+ "Standard_E2a_v4",
+ "Standard_E2ads_v5",
+ "Standard_E2d_v4",
+ "Standard_E2d_v5",
+ "Standard_E4a_v4",
+ "Standard_E4ads_v5",
+ "Standard_E4d_v4",
+ "Standard_E4d_v5",
+ "Standard_E8a_v4",
+ "Standard_E8ads_v5",
+ "Standard_E8as_v4+1TB_PS",
+ "Standard_E8as_v4+2TB_PS",
+ "Standard_E8as_v5+1TB_PS",
+ "Standard_E8as_v5+2TB_PS",
+ "Standard_E8d_v4",
+ "Standard_E8d_v5",
+ "Standard_E8s_v4+1TB_PS",
+ "Standard_E8s_v4+2TB_PS",
+ "Standard_E8s_v5+1TB_PS",
+ "Standard_E8s_v5+2TB_PS",
+ "Standard_E16a_v4",
+ "Standard_E16ads_v5",
+ "Standard_E16as_v4+3TB_PS",
+ "Standard_E16as_v4+4TB_PS",
+ "Standard_E16as_v5+3TB_PS",
+ "Standard_E16as_v5+4TB_PS",
+ "Standard_E16d_v4",
+ "Standard_E16d_v5",
+ "Standard_E16s_v4+3TB_PS",
+ "Standard_E16s_v4+4TB_PS",
+ "Standard_E16s_v5+3TB_PS",
+ "Standard_E16s_v5+4TB_PS",
+ "Standard_E64i_v3",
+ "Standard_E80ids_v4",
+ "Standard_EC8ads_v5",
+ "Standard_EC8as_v5+1TB_PS",
+ "Standard_EC8as_v5+2TB_PS",
+ "Standard_EC16ads_v5",
+ "Standard_EC16as_v5+3TB_PS",
+ "Standard_EC16as_v5+4TB_PS",
+ "Standard_L4s",
+ "Standard_L8as_v3",
+ "Standard_L8s",
+ "Standard_L8s_v2",
+ "Standard_L8s_v3",
+ "Standard_L16as_v3",
+ "Standard_L16s",
+ "Standard_L16s_v2",
+ "Standard_L16s_v3",
+ "Standard_L32as_v3",
+ "Standard_L32s_v3"
+ ],
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer SKU. Default: \"Dev(No SLA)_Standard_D11_v2\"."
+ }
+ },
+ "dataExplorerCapacity": {
+ "type": "int",
+ "defaultValue": 1,
+ "minValue": 1,
+ "maxValue": 1000,
+ "metadata": {
+ "description": "Optional. Number of nodes to use in the cluster. Allowed values: 1 for the Basic SKU tier and 2-1000 for Standard. Default: 1 for dev/test SKUs, 2 for standard SKUs."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to all resources. We will also add the cm-resource-parent tag for improved cost roll-ups in Cost Management."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "scopesToMonitor": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. List of scope IDs to monitor and ingest cost for."
+ }
+ },
+ "exportRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the msexports container. Default: 0."
+ }
+ },
+ "ingestionRetentionInMonths": {
+ "type": "int",
+ "defaultValue": 13,
+ "metadata": {
+ "description": "Optional. Number of months of data to retain in the ingestion container. Default: 13."
+ }
+ },
+ "dataExplorerRawRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the Data Explorer *_raw tables. Default: 0."
+ }
+ },
+ "dataExplorerFinalRetentionInMonths": {
+ "type": "int",
+ "defaultValue": 13,
+ "metadata": {
+ "description": "Optional. Number of months of data to retain in the Data Explorer *_final_v* tables. Default: 13."
+ }
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable public access to FinOps hubs resources. Default: true."
+ }
+ },
+ "virtualNetworkAddressPrefix": {
+ "type": "string",
+ "defaultValue": "10.20.30.0/26",
+ "metadata": {
+ "description": "Optional. Address space for the workload. A /26 is required for the workload. Default: \"10.20.30.0/26\"."
+ }
+ }
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "hub",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "hubName": {
+ "value": "[parameters('hubName')]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "storageSku": {
+ "value": "[parameters('storageSku')]"
+ },
+ "enableInfrastructureEncryption": {
+ "value": "[parameters('enableInfrastructureEncryption')]"
+ },
+ "dataExplorerName": {
+ "value": "[parameters('dataExplorerName')]"
+ },
+ "dataExplorerSku": {
+ "value": "[parameters('dataExplorerSku')]"
+ },
+ "dataExplorerCapacity": {
+ "value": "[parameters('dataExplorerCapacity')]"
+ },
+ "tags": {
+ "value": "[parameters('tags')]"
+ },
+ "tagsByResource": {
+ "value": "[parameters('tagsByResource')]"
+ },
+ "scopesToMonitor": {
+ "value": "[parameters('scopesToMonitor')]"
+ },
+ "exportRetentionInDays": {
+ "value": "[parameters('exportRetentionInDays')]"
+ },
+ "ingestionRetentionInMonths": {
+ "value": "[parameters('ingestionRetentionInMonths')]"
+ },
+ "dataExplorerRawRetentionInDays": {
+ "value": "[parameters('dataExplorerRawRetentionInDays')]"
+ },
+ "dataExplorerFinalRetentionInMonths": {
+ "value": "[parameters('dataExplorerFinalRetentionInMonths')]"
+ },
+ "remoteHubStorageUri": {
+ "value": "[parameters('remoteHubStorageUri')]"
+ },
+ "remoteHubStorageKey": {
+ "value": "[parameters('remoteHubStorageKey')]"
+ },
+ "enablePublicAccess": {
+ "value": "[parameters('enablePublicAccess')]"
+ },
+ "virtualNetworkAddressPrefix": {
+ "value": "[parameters('virtualNetworkAddressPrefix')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "languageVersion": "2.0",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "4218126733130950078"
+ }
+ },
+ "parameters": {
+ "hubName": {
+ "type": "string",
+ "metadata": {
+ "description": "Optional. Name of the hub. Used to ensure unique resource names. Default: \"finops-hub\"."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Azure location where all resources should be created. See https://aka.ms/azureregions. Default: (resource group location)."
+ }
+ },
+ "storageSku": {
+ "type": "string",
+ "defaultValue": "Premium_LRS",
+ "allowedValues": [
+ "Premium_LRS",
+ "Premium_ZRS"
+ ],
+ "metadata": {
+ "description": "Optional. Storage SKU to use. LRS = Lowest cost, ZRS = High availability. Note Standard SKUs are not available for Data Lake gen2 storage. Allowed: Premium_LRS, Premium_ZRS. Default: Premium_LRS."
+ }
+ },
+ "enableInfrastructureEncryption": {
+ "type": "bool",
+ "defaultValue": false,
+ "metadata": {
+ "description": "Optional. Enable infrastructure encryption on the storage account. Default = false."
+ }
+ },
+ "remoteHubStorageUri": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Remote storage account for ingestion dataset."
+ }
+ },
+ "remoteHubStorageKey": {
+ "type": "securestring",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Storage account key for remote storage account."
+ }
+ },
+ "dataExplorerName": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer cluster to use for advanced analytics. If empty, Azure Data Explorer will not be deployed. Required to use with Power BI if you have more than $2-5M/mo in costs being monitored. Default: \"\" (do not use)."
+ }
+ },
+ "dataExplorerSku": {
+ "type": "string",
+ "defaultValue": "Dev(No SLA)_Standard_D11_v2",
+ "allowedValues": [
+ "Dev(No SLA)_Standard_E2a_v4",
+ "Dev(No SLA)_Standard_D11_v2",
+ "Standard_D11_v2",
+ "Standard_D12_v2",
+ "Standard_D13_v2",
+ "Standard_D14_v2",
+ "Standard_D16d_v5",
+ "Standard_D32d_v4",
+ "Standard_D32d_v5",
+ "Standard_DS13_v2+1TB_PS",
+ "Standard_DS13_v2+2TB_PS",
+ "Standard_DS14_v2+3TB_PS",
+ "Standard_DS14_v2+4TB_PS",
+ "Standard_E2a_v4",
+ "Standard_E2ads_v5",
+ "Standard_E2d_v4",
+ "Standard_E2d_v5",
+ "Standard_E4a_v4",
+ "Standard_E4ads_v5",
+ "Standard_E4d_v4",
+ "Standard_E4d_v5",
+ "Standard_E8a_v4",
+ "Standard_E8ads_v5",
+ "Standard_E8as_v4+1TB_PS",
+ "Standard_E8as_v4+2TB_PS",
+ "Standard_E8as_v5+1TB_PS",
+ "Standard_E8as_v5+2TB_PS",
+ "Standard_E8d_v4",
+ "Standard_E8d_v5",
+ "Standard_E8s_v4+1TB_PS",
+ "Standard_E8s_v4+2TB_PS",
+ "Standard_E8s_v5+1TB_PS",
+ "Standard_E8s_v5+2TB_PS",
+ "Standard_E16a_v4",
+ "Standard_E16ads_v5",
+ "Standard_E16as_v4+3TB_PS",
+ "Standard_E16as_v4+4TB_PS",
+ "Standard_E16as_v5+3TB_PS",
+ "Standard_E16as_v5+4TB_PS",
+ "Standard_E16d_v4",
+ "Standard_E16d_v5",
+ "Standard_E16s_v4+3TB_PS",
+ "Standard_E16s_v4+4TB_PS",
+ "Standard_E16s_v5+3TB_PS",
+ "Standard_E16s_v5+4TB_PS",
+ "Standard_E64i_v3",
+ "Standard_E80ids_v4",
+ "Standard_EC8ads_v5",
+ "Standard_EC8as_v5+1TB_PS",
+ "Standard_EC8as_v5+2TB_PS",
+ "Standard_EC16ads_v5",
+ "Standard_EC16as_v5+3TB_PS",
+ "Standard_EC16as_v5+4TB_PS",
+ "Standard_L4s",
+ "Standard_L8as_v3",
+ "Standard_L8s",
+ "Standard_L8s_v2",
+ "Standard_L8s_v3",
+ "Standard_L16as_v3",
+ "Standard_L16s",
+ "Standard_L16s_v2",
+ "Standard_L16s_v3",
+ "Standard_L32as_v3",
+ "Standard_L32s_v3"
+ ],
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer SKU. Default: \"Dev(No SLA)_Standard_D11_v2\"."
+ }
+ },
+ "dataExplorerCapacity": {
+ "type": "int",
+ "defaultValue": 1,
+ "minValue": 1,
+ "maxValue": 1000,
+ "metadata": {
+ "description": "Optional. Number of nodes to use in the cluster. Allowed values: 1 for the Basic SKU tier and 2-1000 for Standard. Default: 1 for dev/test SKUs, 2 for standard SKUs."
+ }
+ },
+ "dataExplorerTrustedExternalTenants": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access)."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to all resources. We will also add the cm-resource-parent tag for improved cost roll-ups in Cost Management."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "scopesToMonitor": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. List of scope IDs to monitor and ingest cost for."
+ }
+ },
+ "exportRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the msexports container. Default: 0."
+ }
+ },
+ "ingestionRetentionInMonths": {
+ "type": "int",
+ "defaultValue": 13,
+ "metadata": {
+ "description": "Optional. Number of months of data to retain in the ingestion container. Default: 13."
+ }
+ },
+ "dataExplorerRawRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the Data Explorer *_raw tables. Default: 0."
+ }
+ },
+ "dataExplorerFinalRetentionInMonths": {
+ "type": "int",
+ "defaultValue": 13,
+ "metadata": {
+ "description": "Optional. Number of months of data to retain in the Data Explorer *_final_v* tables. Default: 13."
+ }
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable public access to the data lake. Default: true."
+ }
+ },
+ "virtualNetworkAddressPrefix": {
+ "type": "string",
+ "defaultValue": "10.20.30.0/26",
+ "metadata": {
+ "description": "Optional. Address space for the workload. A /26 is required for the workload. Default: \"10.20.30.0/26\"."
+ }
+ },
+ "enableDefaultTelemetry": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": "0.8",
+ "finOpsToolkitVersion": "0.8",
+ "resourceTags": "[union(parameters('tags'), createObject('cm-resource-parent', format('{0}/providers/Microsoft.Cloud/hubs/{1}', resourceGroup().id, parameters('hubName')), 'ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', 'FinOps hubs'))]",
+ "uniqueSuffix": "[uniqueString(parameters('hubName'), resourceGroup().id)]",
+ "dataFactoryPrefix": "[format('{0}-engine', replace(parameters('hubName'), '_', '-'))]",
+ "dataFactorySuffix": "[format('-{0}', variables('uniqueSuffix'))]",
+ "dataFactoryName": "[replace(format('{0}{1}', take(variables('dataFactoryPrefix'), sub(63, length(variables('dataFactorySuffix')))), variables('dataFactorySuffix')), '--', '-')]",
+ "deployDataExplorer": "[not(empty(parameters('dataExplorerName')))]",
+ "telemetryId": "00f120b5-2007-6120-0000-40b000000000"
+ },
+ "resources": {
+ "defaultTelemetry": {
+ "condition": "[parameters('enableDefaultTelemetry')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]",
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "FinOps toolkit",
+ "version": "[variables('$fxv#0')]"
+ }
+ },
+ "resources": []
+ }
+ }
+ },
+ "dataFactory": {
+ "type": "Microsoft.DataFactory/factories",
+ "apiVersion": "2018-06-01",
+ "name": "[variables('dataFactoryName')]",
+ "location": "[parameters('location')]",
+ "tags": "[union(variables('resourceTags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.DataFactory/factories'), createObject()))]",
+ "identity": {
+ "type": "SystemAssigned"
+ },
+ "properties": {
+ "globalConfigurations": {
+ "PipelineBillingEnabled": "true"
+ }
+ }
+ },
+ "vnet": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "vnet",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "hubName": {
+ "value": "[parameters('hubName')]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "virtualNetworkAddressPrefix": {
+ "value": "[parameters('virtualNetworkAddressPrefix')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "tagsByResource": {
+ "value": "[parameters('tagsByResource')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "981936302292714375"
+ }
+ },
+ "parameters": {
+ "hubName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the hub. Used to ensure unique resource names."
+ }
+ },
+ "virtualNetworkAddressPrefix": {
+ "type": "string",
+ "defaultValue": "10.20.30.0/26",
+ "metadata": {
+ "description": "Optional. Address space for the workload. A /26 is required for the workload. Default: \"10.20.30.0/26\"."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Azure location where all resources should be created. See https://aka.ms/azureregions. Default: (resource group location)."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to all resources."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ }
+ },
+ "variables": {
+ "safeHubName": "[replace(replace(toLower(parameters('hubName')), '-', ''), '_', '')]",
+ "vNetName": "[format('{0}-vnet-{1}', variables('safeHubName'), parameters('location'))]",
+ "nsgName": "[format('{0}-nsg', variables('vNetName'))]",
+ "subnets": [
+ {
+ "name": "private-endpoint-subnet",
+ "properties": {
+ "addressPrefix": "[cidrSubnet(parameters('virtualNetworkAddressPrefix'), 28, 0)]",
+ "networkSecurityGroup": {
+ "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
+ },
+ "serviceEndpoints": [
+ {
+ "service": "Microsoft.Storage"
+ }
+ ]
+ }
+ },
+ {
+ "name": "script-subnet",
+ "properties": {
+ "addressPrefix": "[cidrSubnet(parameters('virtualNetworkAddressPrefix'), 28, 1)]",
+ "networkSecurityGroup": {
+ "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
+ },
+ "delegations": [
+ {
+ "name": "Microsoft.ContainerInstance/containerGroups",
+ "properties": {
+ "serviceName": "Microsoft.ContainerInstance/containerGroups"
+ }
+ }
+ ],
+ "serviceEndpoints": [
+ {
+ "service": "Microsoft.Storage"
+ }
+ ]
+ }
+ },
+ {
+ "name": "dataExplorer-subnet",
+ "properties": {
+ "addressPrefix": "[cidrSubnet(parameters('virtualNetworkAddressPrefix'), 27, 1)]",
+ "networkSecurityGroup": {
+ "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
+ }
+ }
+ }
+ ]
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Network/networkSecurityGroups",
+ "apiVersion": "2023-11-01",
+ "name": "[variables('nsgName')]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/networkSecurityGroups'), createObject()))]",
+ "properties": {
+ "securityRules": [
+ {
+ "name": "AllowVnetInBound",
+ "properties": {
+ "priority": 100,
+ "direction": "Inbound",
+ "access": "Allow",
+ "protocol": "*",
+ "sourcePortRange": "*",
+ "destinationPortRange": "*",
+ "sourceAddressPrefix": "VirtualNetwork",
+ "destinationAddressPrefix": "VirtualNetwork"
+ }
+ },
+ {
+ "name": "AllowAzureLoadBalancerInBound",
+ "properties": {
+ "priority": 200,
+ "direction": "Inbound",
+ "access": "Allow",
+ "protocol": "*",
+ "sourcePortRange": "*",
+ "destinationPortRange": "*",
+ "sourceAddressPrefix": "AzureLoadBalancer",
+ "destinationAddressPrefix": "*"
+ }
+ },
+ {
+ "name": "DenyAllInBound",
+ "properties": {
+ "priority": 4096,
+ "direction": "Inbound",
+ "access": "Deny",
+ "protocol": "*",
+ "sourcePortRange": "*",
+ "destinationPortRange": "*",
+ "sourceAddressPrefix": "*",
+ "destinationAddressPrefix": "*"
+ }
+ },
+ {
+ "name": "AllowVnetOutBound",
+ "properties": {
+ "priority": 100,
+ "direction": "Outbound",
+ "access": "Allow",
+ "protocol": "*",
+ "sourcePortRange": "*",
+ "destinationPortRange": "*",
+ "sourceAddressPrefix": "VirtualNetwork",
+ "destinationAddressPrefix": "VirtualNetwork"
+ }
+ },
+ {
+ "name": "AllowInternetOutBound",
+ "properties": {
+ "priority": 200,
+ "direction": "Outbound",
+ "access": "Allow",
+ "protocol": "*",
+ "sourcePortRange": "*",
+ "destinationPortRange": "*",
+ "sourceAddressPrefix": "*",
+ "destinationAddressPrefix": "Internet"
+ }
+ },
+ {
+ "name": "DenyAllOutBound",
+ "properties": {
+ "priority": 4096,
+ "direction": "Outbound",
+ "access": "Deny",
+ "protocol": "*",
+ "sourcePortRange": "*",
+ "destinationPortRange": "*",
+ "sourceAddressPrefix": "*",
+ "destinationAddressPrefix": "*"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Microsoft.Network/virtualNetworks",
+ "apiVersion": "2023-11-01",
+ "name": "[variables('vNetName')]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/virtualNetworks'), createObject()))]",
+ "properties": {
+ "addressSpace": {
+ "addressPrefixes": [
+ "[parameters('virtualNetworkAddressPrefix')]"
+ ]
+ },
+ "subnets": "[variables('subnets')]"
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
+ ]
+ }
+ ],
+ "outputs": {
+ "vNetId": {
+ "type": "string",
+ "value": "[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]"
+ },
+ "vNetName": {
+ "type": "string",
+ "value": "[variables('vNetName')]"
+ },
+ "vNetAddressSpace": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-11-01').addressSpace.addressPrefixes]"
+ },
+ "vNetSubnets": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-11-01').subnets]"
+ },
+ "finopsHubSubnetId": {
+ "type": "string",
+ "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-11-01').subnets[0].id]"
+ },
+ "scriptSubnetId": {
+ "type": "string",
+ "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-11-01').subnets[1].id]"
+ },
+ "dataExplorerSubnetId": {
+ "type": "string",
+ "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), '2023-11-01').subnets[2].id]"
+ }
+ }
+ }
+ }
+ },
+ "storage": {
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "storage",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "hubName": {
+ "value": "[parameters('hubName')]"
+ },
+ "uniqueSuffix": {
+ "value": "[variables('uniqueSuffix')]"
+ },
+ "sku": {
+ "value": "[parameters('storageSku')]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "tagsByResource": {
+ "value": "[parameters('tagsByResource')]"
+ },
+ "enableInfrastructureEncryption": {
+ "value": "[parameters('enableInfrastructureEncryption')]"
+ },
+ "scopesToMonitor": {
+ "value": "[parameters('scopesToMonitor')]"
+ },
+ "msexportRetentionInDays": {
+ "value": "[parameters('exportRetentionInDays')]"
+ },
+ "ingestionRetentionInMonths": {
+ "value": "[parameters('ingestionRetentionInMonths')]"
+ },
+ "rawRetentionInDays": {
+ "value": "[parameters('dataExplorerRawRetentionInDays')]"
+ },
+ "finalRetentionInMonths": {
+ "value": "[parameters('dataExplorerFinalRetentionInMonths')]"
+ },
+ "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.vNetId.value))]",
+ "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.finopsHubSubnetId.value))]",
+ "scriptSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.scriptSubnetId.value))]",
+ "enablePublicAccess": {
+ "value": "[parameters('enablePublicAccess')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "5620729023118426614"
+ }
+ },
+ "parameters": {
+ "hubName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the FinOps hub instance. Used to ensure unique resource names."
+ }
+ },
+ "uniqueSuffix": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Suffix to add to the storage account name to ensure uniqueness."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Azure location where all resources should be created. See https://aka.ms/azureregions. Default: (resource group location)."
+ }
+ },
+ "sku": {
+ "type": "string",
+ "defaultValue": "Premium_LRS",
+ "allowedValues": [
+ "Premium_LRS",
+ "Premium_ZRS"
+ ],
+ "metadata": {
+ "description": "Optional. Storage SKU to use. LRS = Lowest cost, ZRS = High availability. Note Standard SKUs are not available for Data Lake gen2 storage. Allowed: Premium_LRS, Premium_ZRS. Default: Premium_LRS."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to all resources."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "scopesToMonitor": {
+ "type": "array",
+ "metadata": {
+ "description": "Optional. List of scope IDs to monitor and ingest cost for."
+ }
+ },
+ "msexportRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the msexports container. Default: 0."
+ }
+ },
+ "ingestionRetentionInMonths": {
+ "type": "int",
+ "defaultValue": 13,
+ "metadata": {
+ "description": "Optional. Number of months of data to retain in the ingestion container. Default: 13."
+ }
+ },
+ "enableInfrastructureEncryption": {
+ "type": "bool",
+ "defaultValue": false,
+ "metadata": {
+ "description": "Optional. Enable infrastructure encryption on the storage account. Default = false."
+ }
+ },
+ "rawRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the Data Explorer *_raw tables. Default: 0."
+ }
+ },
+ "finalRetentionInMonths": {
+ "type": "int",
+ "defaultValue": 13,
+ "metadata": {
+ "description": "Optional. Number of months of data to retain in the Data Explorer *_final_v* tables. Default: 13."
+ }
+ },
+ "virtualNetworkId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Id of the virtual network for private endpoints."
+ }
+ },
+ "privateEndpointSubnetId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Id of the subnet for private endpoints."
+ }
+ },
+ "scriptSubnetId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Id of the virtual network for running deployment scripts."
+ }
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "metadata": {
+ "description": "Optional. Enable public access to the data lake. Default: false."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"BilledCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BilledCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeClass\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeClass\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountStatus\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountStatus\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ConsumedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ConsumedUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"EffectiveCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceIssuerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceIssuerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"PricingQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProviderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProviderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PublisherName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PublisherName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuPriceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuPriceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Tags\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Tags\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountOwnerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountOwnerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRateDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRateDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ContractedCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ContractedCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostAllocationRuleName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostAllocationRuleName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceIssuerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceIssuerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ListCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ListCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditApplied\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditApplied\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditRate\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingBlockSize\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PricingBlockSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingUnitDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingUnitDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceGroupName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceGroupName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDetails\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDetails\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuIsCreditEligible\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_SkuIsCreditEligible\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOfferId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOfferId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuPartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuPartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTerm\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTerm\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTier\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTier\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#1": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"BilledCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BilledCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeClass\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeClass\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountStatus\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountStatus\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ConsumedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ConsumedUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"EffectiveCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceIssuerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceIssuerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"PricingQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProviderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProviderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PublisherName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PublisherName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuPriceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuPriceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Tags\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Tags\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountOwnerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountOwnerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRateDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRateDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ContractedCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ContractedCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostAllocationRuleName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostAllocationRuleName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceIssuerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceIssuerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ListCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ListCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditApplied\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditApplied\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditRate\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingBlockSize\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PricingBlockSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingUnitDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingUnitDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceGroupName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceGroupName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDetails\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDetails\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuIsCreditEligible\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_SkuIsCreditEligible\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOfferId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOfferId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuPartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuPartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTerm\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTerm\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTier\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTier\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#10": "0.8",
+ "$fxv#11": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nWrite-Output \"Updating settings.json file...\"\r\nWrite-Output \" Storage account: $env:storageAccountName\"\r\nWrite-Output \" Container: $env:containerName\"\r\n\r\n$validateScopes = { $_.Length -gt 45 }\r\n\r\n# Initialize variables\r\n$fileName = 'settings.json'\r\n$filePath = Join-Path -Path . -ChildPath $fileName\r\n$newScopes = $env:scopes.Split('|') | Where-Object $validateScopes | ForEach-Object { @{ scope = $_ } }\r\n\r\n# Get storage context\r\n$storageContext = @{\r\n Context = New-AzStorageContext -StorageAccountName $env:storageAccountName -UseConnectedAccount\r\n Container = $env:containerName\r\n}\r\n\r\n# Download existing settings, if they exist\r\n$blob = Get-AzStorageBlobContent @storageContext -Blob $fileName -Destination $filePath -Force\r\nif ($blob)\r\n{\r\n $text = Get-Content $filePath -Raw\r\n Write-Output \"---------\"\r\n Write-Output $text\r\n Write-Output \"---------\"\r\n $json = $text | ConvertFrom-Json\r\n Write-Output \"Existing settings.json file found. Updating...\"\r\n # Rename exportScopes to scopes + convert to object array\r\n if ($json.exportScopes)\r\n {\r\n Write-Output \" Updating exportScopes...\"\r\n if ($json.exportScopes[0] -is [string])\r\n {\r\n Write-Output \" Converting string array to object array...\"\r\n $json.exportScopes = $json.exportScopes | Where-Object $validateScopes | ForEach-Object { @{ scope = $_ } }\r\n if (-not ($json.exportScopes -is [array]))\r\n {\r\n Write-Output \" Converting single object to object array...\"\r\n $json.exportScopes = @($json.exportScopes)\r\n }\r\n }\r\n\r\n Write-Output \" Renaming to 'scopes'...\"\r\n $json | Add-Member -MemberType NoteProperty -Name scopes -Value $json.exportScopes\r\n $json.PSObject.Properties.Remove('exportScopes')\r\n }\r\n}\r\n\r\n# Set default if not found\r\nif (!$json)\r\n{\r\n Write-Output \"No existing settings.json file found. Creating new file...\"\r\n $json = [ordered]@{\r\n '$schema' = 'https://aka.ms/finops/hubs/settings-schema'\r\n type = 'HubInstance'\r\n version = ''\r\n learnMore = 'https://aka.ms/finops/hubs'\r\n scopes = @()\r\n retention = @{\r\n 'msexports' = @{\r\n days = 0\r\n }\r\n 'ingestion' = @{\r\n months = 13\r\n }\r\n 'raw' = @{\r\n days = 0\r\n }\r\n 'final' = @{\r\n months = 13\r\n }\r\n }\r\n }\r\n\r\n $text = $json | ConvertTo-Json\r\n Write-Output \"---------\"\r\n Write-Output $text\r\n Write-Output \"---------\"\r\n}\r\n\r\n# Set values from inputs\r\n$json.scopes = $env:scopes.Split('|') | ForEach-Object { @{ 'scope' = $_ } }\r\nif (!($json.retention))\r\n{\r\n # In case the retention object is not present in the settings.json file (versions before 0.4), add it with default values\r\n $retention = @\"\r\n {\r\n \"msexports\": {\r\n \"days\": 0\r\n },\r\n \"ingestion\": {\r\n \"months\": 13\r\n },\r\n \"raw\": {\r\n \"days\": 0\r\n },\r\n \"final\": {\r\n \"months\": 13\r\n }\r\n }\r\n\"@\r\n $json | Add-Member -Name retention -Value (ConvertFrom-Json $retention) -MemberType NoteProperty\r\n}\r\n\r\n# Set or update msexports retention\r\nif (!($json.retention.msexports))\r\n{\r\n $json.retention | Add-Member -Name msexports -Value (ConvertFrom-Json \"{\"\"days\"\":$($env:msexportRetentionInDays)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.msexports.days = [Int32]::Parse($env:msexportRetentionInDays)\r\n}\r\n\r\n# Set or update ingestion retention\r\nif (!($json.retention.ingestion))\r\n{\r\n $json.retention | Add-Member -Name ingestion -Value (ConvertFrom-Json \"{\"\"months\"\":$($env:ingestionRetentionInMonths)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.ingestion.months = [Int32]::Parse($env:ingestionRetentionInMonths)\r\n}\r\n\r\n# Set or update raw retention\r\nif (!($json.retention.raw))\r\n{\r\n $json.retention | Add-Member -Name raw -Value (ConvertFrom-Json \"{\"\"days\"\":$($env:rawRetentionInDays)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.raw.days = [Int32]::Parse($env:rawRetentionInDays)\r\n}\r\n\r\n# Set or update final retention\r\nif (!($json.retention.final))\r\n{\r\n $json.retention | Add-Member -Name final -Value (ConvertFrom-Json \"{\"\"months\"\":$($env:finalRetentionInMonths)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.final.months = [Int32]::Parse($env:finalRetentionInMonths)\r\n}\r\n\r\n# Updating settings\r\nWrite-Output \"Updating version to $env:ftkVersion...\"\r\n$json.version = $env:ftkVersion\r\nif ($newScopes)\r\n{\r\n Write-Output \"Merging $($newScopes.Count) scopes...\"\r\n $json.scopes = Compare-Object -ReferenceObject $json.scopes -DifferenceObject $newScopes -Property scope -PassThru -IncludeEqual\r\n\r\n # Remove the SideIndicator property from the Compare-Object output\r\n $json.scopes | ForEach-Object { $_.PSObject.Properties.Remove('SideIndicator') } | ConvertTo-Json\r\n\r\n if (-not ($json.scopes -is [array]))\r\n {\r\n $json.scopes = @($json.scopes)\r\n }\r\n Write-Output \"$($json.scopes.Count) scopes found.\"\r\n}\r\n$text = $json | ConvertTo-Json\r\nWrite-Output \"---------\"\r\nWrite-Output $text\r\nWrite-Output \"---------\"\r\n$text | Out-File $filePath\r\n\r\n# Upload new/updated settings\r\nWrite-Output \"Uploading settings.json file...\"\r\nSet-AzStorageBlobContent @storageContext -File $filePath -Force | Out-Null\r\n\r\n# Save focusSchemaFile file to storage\r\n$schemaFiles = $env:schemaFiles | ConvertFrom-Json -Depth 10\r\nWrite-Output \"Uploading ${$schemaFiles.PSObject.Properties.Count} schema files...\"\r\n$schemaFiles.PSObject.Properties | ForEach-Object {\r\n $fileName = \"$($_.Name).json\"\r\n $tempPath = \"./$fileName\"\r\n Write-Output \" Uploading $($_.Name).json...\"\r\n $_.Value | Out-File $tempPath\r\n Set-AzStorageBlobContent @storageContext -File $tempPath -Blob \"schemas/$fileName\" -Force | Out-Null\r\n}\r\n",
+ "$fxv#2": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"AvailabilityZone\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"AvailabilityZone\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BilledCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BilledCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"EffectiveCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceIssuerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceIssuerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"PricingQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProviderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProviderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PublisherName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PublisherName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Region\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Region\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuPriceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuPriceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Tags\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Tags\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UsageQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"UsageQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UsageUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"UsageUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountOwnerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountOwnerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRateDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRateDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ChargeId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ChargeId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostAllocationRuleName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostAllocationRuleName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceIssuerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceIssuerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_OnDemandCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_OnDemandCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_OnDemandCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_OnDemandCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_OnDemandUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_OnDemandUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditApplied\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditApplied\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingBlockSize\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PricingBlockSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingUnitDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingUnitDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceGroupName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceGroupName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDetails\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDetails\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuIsCreditEligible\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_SkuIsCreditEligible\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOfferId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOfferId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuPartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuPartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTerm\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTerm\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTier\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTier\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#3": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"EnrollmentNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"EnrollmentNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterSubCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterSubCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Product\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Product\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProductID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProductID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UnitOfMeasure\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"UnitOfMeasure\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveStartDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EffectiveStartDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveEndDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EffectiveEndDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"UnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BasePrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BasePrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MarketPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"MarketPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CurrencyCode\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CurrencyCode\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"IncludedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"IncludedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"OfferID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"OfferID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PriceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PriceType\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#4": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Product\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Product\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProductId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProductId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UnitOfMeasure\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"UnitOfMeasure\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterSubCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterSubCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"TierMinimumUnits\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"TierMinimumUnits\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveStartDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EffectiveStartDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveEndDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EffectiveEndDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"UnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BasePrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BasePrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MarketPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"MarketPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Currency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Currency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PriceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PriceType\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#5": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"InstanceFlexibilityGroup\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityGroup\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InstanceFlexibilityRatio\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityRatio\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InstanceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InstanceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Kind\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Kind\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservationOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ReservationOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservationId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ReservationId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservedHours\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ReservedHours\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"TotalReservedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"TotalReservedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UsageDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"UsageDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UsedHours\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"UsedHours\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#6": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"SKU\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SKU\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Location\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Location\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CostWithNoReservedInstances\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CostWithNoReservedInstances\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"FirstUsageDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"FirstUsageDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InstanceFlexibilityRatio\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityRatio\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InstanceFlexibilityGroup\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InstanceFlexibilityGroup\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"LookBackPeriod\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"LookBackPeriod\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"NetSavings\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"NetSavings\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"NormalizedSize\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"NormalizedSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RecommendedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"RecommendedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RecommendedQuantityNormalized\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"RecommendedQuantityNormalized\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Scope\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Scope\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuProperties\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuProperties\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"TotalCostWithReservedInstances\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"TotalCostWithReservedInstances\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#7": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"Cost With No ReservedInstances\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Cost With No ReservedInstances\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"First UsageDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"First UsageDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Instance Flexibility Ratio\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Instance Flexibility Ratio\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Instance Flexibility Group\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Instance Flexibility Group\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Location\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Location\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"LookBackPeriod\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"LookBackPeriod\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Net Savings\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Net Savings\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Normalized Size\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Normalized Size\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Recommended Quantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Recommended Quantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Recommended Quantity Normalized\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Recommended Quantity Normalized\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"scope\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"scope\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Sku Properties\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Sku Properties\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Total Cost With ReservedInstances\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Total Cost With ReservedInstances\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#8": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"AccountOwnerEmail\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"AccountOwnerEmail\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Amount\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Amount\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ArmSkuName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ArmSkuName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingMonth\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingMonth\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Currency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Currency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CurrentEnrollmentId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CurrentEnrollmentId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"DepartmentName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"DepartmentName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Description\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Description\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EventDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EventDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EventType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"EventType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MonetaryCommitment\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"MonetaryCommitment\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Overage\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Overage\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PurchasingSubscriptionGuid\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PurchasingSubscriptionGuid\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PurchasingSubscriptionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PurchasingSubscriptionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PurchasingEnrollment\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PurchasingEnrollment\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Quantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Quantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Region\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Region\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservationOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ReservationOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservationOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ReservationOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "$fxv#9": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"Amount\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Amount\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ArmSkuName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ArmSkuName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Currency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Currency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Description\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Description\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EventDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EventDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EventType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"EventType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Invoice\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Invoice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PurchasingSubscriptionGuid\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PurchasingSubscriptionGuid\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PurchasingSubscriptionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PurchasingSubscriptionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Quantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"Quantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Region\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Region\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservationOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ReservationOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ReservationOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ReservationOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
+ "safeHubName": "[replace(replace(toLower(parameters('hubName')), '-', ''), '_', '')]",
+ "storageAccountSuffix": "[parameters('uniqueSuffix')]",
+ "storageAccountName": "[format('{0}{1}', take(variables('safeHubName'), sub(24, length(variables('storageAccountSuffix')))), variables('storageAccountSuffix'))]",
+ "scriptStorageAccountName": "[format('{0}script{1}', take(variables('safeHubName'), sub(16, length(variables('storageAccountSuffix')))), variables('storageAccountSuffix'))]",
+ "schemaFiles": {
+ "focuscost_1.0r2": "[variables('$fxv#0')]",
+ "focuscost_1.0": "[variables('$fxv#1')]",
+ "focuscost_1.0-preview(v1)": "[variables('$fxv#2')]",
+ "pricesheet_2023-05-01_ea": "[variables('$fxv#3')]",
+ "pricesheet_2023-05-01_mca": "[variables('$fxv#4')]",
+ "reservationdetails_2023-03-01": "[variables('$fxv#5')]",
+ "reservationrecommendations_2023-05-01_ea": "[variables('$fxv#6')]",
+ "reservationrecommendations_2023-05-01_mca": "[variables('$fxv#7')]",
+ "reservationtransactions_2023-05-01_ea": "[variables('$fxv#8')]",
+ "reservationtransactions_2023-05-01_mca": "[variables('$fxv#9')]"
+ },
+ "blobUploadRbacRoles": [
+ "ba92f5b4-2d11-453d-a403-e96b0029c9fe",
+ "e40ec5ca-96e0-45a2-b4ff-59039f2c2b59",
+ "69566ab7-960f-475b-8e7c-b3118f30c6bd"
+ ]
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Storage/storageAccounts",
+ "apiVersion": "2022-09-01",
+ "name": "[variables('storageAccountName')]",
+ "location": "[parameters('location')]",
+ "sku": {
+ "name": "[parameters('sku')]"
+ },
+ "kind": "BlockBlobStorage",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/storageAccounts'), createObject()))]",
+ "properties": "[union(if(not(parameters('enableInfrastructureEncryption')), createObject(), createObject('encryption', createObject('keySource', 'Microsoft.Storage', 'requireInfrastructureEncryption', parameters('enableInfrastructureEncryption')))), createObject('supportsHttpsTrafficOnly', true(), 'allowSharedKeyAccess', true(), 'isHnsEnabled', true(), 'minimumTlsVersion', 'TLS1_2', 'allowBlobPublicAccess', false(), 'publicNetworkAccess', 'Enabled', 'networkAcls', createObject('bypass', 'AzureServices', 'defaultAction', if(parameters('enablePublicAccess'), 'Allow', 'Deny'))))]"
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Storage/storageAccounts",
+ "apiVersion": "2022-09-01",
+ "name": "[variables('scriptStorageAccountName')]",
+ "location": "[parameters('location')]",
+ "sku": {
+ "name": "Standard_LRS"
+ },
+ "kind": "StorageV2",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/storageAccounts'), createObject()))]",
+ "properties": {
+ "supportsHttpsTrafficOnly": true,
+ "allowSharedKeyAccess": true,
+ "isHnsEnabled": false,
+ "minimumTlsVersion": "TLS1_2",
+ "allowBlobPublicAccess": false,
+ "publicNetworkAccess": "Enabled",
+ "networkAcls": {
+ "bypass": "AzureServices",
+ "defaultAction": "Deny",
+ "virtualNetworkRules": [
+ {
+ "id": "[parameters('scriptSubnetId')]",
+ "action": "Allow"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.blob.{0}', environment().suffixes.storage)]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
+ "properties": {}
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.dfs.{0}', environment().suffixes.storage)]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
+ "properties": {}
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.queue.{0}', environment().suffixes.storage)]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
+ "properties": {}
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.table.{0}', environment().suffixes.storage)]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
+ "properties": {}
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "apiVersion": "2024-06-01",
+ "name": "[format('{0}/{1}', format('privatelink.blob.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.blob.{0}', environment().suffixes.storage), '.', '-')))]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
+ "properties": {
+ "registrationEnabled": false,
+ "virtualNetwork": {
+ "id": "[parameters('virtualNetworkId')]"
+ }
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.blob.{0}', environment().suffixes.storage))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "apiVersion": "2024-06-01",
+ "name": "[format('{0}/{1}', format('privatelink.dfs.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.dfs.{0}', environment().suffixes.storage), '.', '-')))]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
+ "properties": {
+ "registrationEnabled": false,
+ "virtualNetwork": {
+ "id": "[parameters('virtualNetworkId')]"
+ }
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.dfs.{0}', environment().suffixes.storage))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "apiVersion": "2024-06-01",
+ "name": "[format('{0}/{1}', format('privatelink.queue.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.queue.{0}', environment().suffixes.storage), '.', '-')))]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
+ "properties": {
+ "registrationEnabled": false,
+ "virtualNetwork": {
+ "id": "[parameters('virtualNetworkId')]"
+ }
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.queue.{0}', environment().suffixes.storage))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "apiVersion": "2024-06-01",
+ "name": "[format('{0}/{1}', format('privatelink.table.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.table.{0}', environment().suffixes.storage), '.', '-')))]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
+ "properties": {
+ "registrationEnabled": false,
+ "virtualNetwork": {
+ "id": "[parameters('virtualNetworkId')]"
+ }
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.table.{0}', environment().suffixes.storage))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}-blob-ep', variables('storageAccountName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
+ "properties": {
+ "subnet": {
+ "id": "[parameters('privateEndpointSubnetId')]"
+ },
+ "privateLinkServiceConnections": [
+ {
+ "name": "blobLink",
+ "properties": {
+ "privateLinkServiceId": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
+ "groupIds": [
+ "blob"
+ ]
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}-blob-ep', variables('scriptStorageAccountName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
+ "properties": {
+ "subnet": {
+ "id": "[parameters('privateEndpointSubnetId')]"
+ },
+ "privateLinkServiceConnections": [
+ {
+ "name": "scriptLink",
+ "properties": {
+ "privateLinkServiceId": "[resourceId('Microsoft.Storage/storageAccounts', variables('scriptStorageAccountName'))]",
+ "groupIds": [
+ "blob"
+ ]
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts', variables('scriptStorageAccountName'))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}-dfs-ep', variables('storageAccountName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
+ "properties": {
+ "subnet": {
+ "id": "[parameters('privateEndpointSubnetId')]"
+ },
+ "privateLinkServiceConnections": [
+ {
+ "name": "dfsLink",
+ "properties": {
+ "privateLinkServiceId": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
+ "groupIds": [
+ "dfs"
+ ]
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}/{1}', format('{0}-blob-ep', variables('storageAccountName')), 'storage-endpoint-zone')]",
+ "properties": {
+ "privateDnsZoneConfigs": [
+ {
+ "name": "[format('privatelink.blob.{0}', environment().suffixes.storage)]",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.blob.{0}', environment().suffixes.storage))]"
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-blob-ep', variables('storageAccountName')))]",
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.blob.{0}', environment().suffixes.storage))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}/{1}', format('{0}-dfs-ep', variables('storageAccountName')), 'dfs-endpoint-zone')]",
+ "properties": {
+ "privateDnsZoneConfigs": [
+ {
+ "name": "[format('privatelink.dfs.{0}', environment().suffixes.storage)]",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.dfs.{0}', environment().suffixes.storage))]"
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-dfs-ep', variables('storageAccountName')))]",
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.dfs.{0}', environment().suffixes.storage))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}/{1}', format('{0}-blob-ep', variables('scriptStorageAccountName')), 'blob-endpoint-zone')]",
+ "properties": {
+ "privateDnsZoneConfigs": [
+ {
+ "name": "[format('privatelink.blob.{0}', environment().suffixes.storage)]",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.blob.{0}', environment().suffixes.storage))]"
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.blob.{0}', environment().suffixes.storage))]",
+ "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-blob-ep', variables('scriptStorageAccountName')))]"
+ ]
+ },
+ {
+ "type": "Microsoft.Storage/storageAccounts/blobServices",
+ "apiVersion": "2022-09-01",
+ "name": "[format('{0}/{1}', variables('storageAccountName'), 'default')]",
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
+ ]
+ },
+ {
+ "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
+ "apiVersion": "2022-09-01",
+ "name": "[format('{0}/{1}/{2}', variables('storageAccountName'), 'default', 'config')]",
+ "properties": {
+ "publicAccess": "None",
+ "metadata": {}
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]"
+ ]
+ },
+ {
+ "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
+ "apiVersion": "2022-09-01",
+ "name": "[format('{0}/{1}/{2}', variables('storageAccountName'), 'default', 'msexports')]",
+ "properties": {
+ "publicAccess": "None",
+ "metadata": {}
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]"
+ ]
+ },
+ {
+ "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
+ "apiVersion": "2022-09-01",
+ "name": "[format('{0}/{1}/{2}', variables('storageAccountName'), 'default', 'ingestion')]",
+ "properties": {
+ "publicAccess": "None",
+ "metadata": {}
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Storage/storageAccounts/blobServices', variables('storageAccountName'), 'default')]"
+ ]
+ },
+ {
+ "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
+ "apiVersion": "2023-01-31",
+ "name": "[format('{0}_blobManager', variables('storageAccountName'))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), createObject()))]",
+ "location": "[parameters('location')]"
+ },
+ {
+ "copy": {
+ "name": "identityRoleAssignments",
+ "count": "[length(variables('blobUploadRbacRoles'))]"
+ },
+ "type": "Microsoft.Authorization/roleAssignments",
+ "apiVersion": "2022-04-01",
+ "name": "[guid(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), variables('blobUploadRbacRoles')[copyIndex()], resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_blobManager', variables('storageAccountName'))))]",
+ "properties": {
+ "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', variables('blobUploadRbacRoles')[copyIndex()])]",
+ "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_blobManager', variables('storageAccountName'))), '2023-01-31').principalId]",
+ "principalType": "ServicePrincipal"
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_blobManager', variables('storageAccountName')))]",
+ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
+ ]
+ },
+ {
+ "type": "Microsoft.Resources/deploymentScripts",
+ "apiVersion": "2023-08-01",
+ "name": "[format('{0}_uploadSettings', variables('storageAccountName'))]",
+ "kind": "AzurePowerShell",
+ "location": "[if(startsWith(parameters('location'), 'china'), 'chinaeast2', parameters('location'))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]",
+ "identity": {
+ "type": "UserAssigned",
+ "userAssignedIdentities": {
+ "[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_blobManager', variables('storageAccountName'))))]": {}
+ }
+ },
+ "properties": "[union(if(parameters('enablePublicAccess'), createObject(), createObject('storageAccountSettings', createObject('storageAccountName', variables('scriptStorageAccountName')), 'containerSettings', createObject('containerGroupName', format('{0}cg', variables('scriptStorageAccountName')), 'subnetIds', createArray(createObject('id', parameters('scriptSubnetId')))))), createObject('azPowerShellVersion', '9.0', 'retentionInterval', 'PT1H', 'environmentVariables', createArray(createObject('name', 'ftkVersion', 'value', variables('$fxv#10')), createObject('name', 'scopes', 'value', join(parameters('scopesToMonitor'), '|')), createObject('name', 'msexportRetentionInDays', 'value', string(parameters('msexportRetentionInDays'))), createObject('name', 'ingestionRetentionInMonths', 'value', string(parameters('ingestionRetentionInMonths'))), createObject('name', 'rawRetentionInDays', 'value', string(parameters('rawRetentionInDays'))), createObject('name', 'finalRetentionInMonths', 'value', string(parameters('finalRetentionInMonths'))), createObject('name', 'storageAccountName', 'value', variables('storageAccountName')), createObject('name', 'containerName', 'value', 'config'), createObject('name', 'schemaFiles', 'value', string(variables('schemaFiles')))), 'scriptContent', variables('$fxv#11')))]",
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-blob-ep', variables('storageAccountName')))]",
+ "[resourceId('Microsoft.Network/privateEndpoints/privateDnsZoneGroups', format('{0}-blob-ep', variables('storageAccountName')), 'storage-endpoint-zone')]",
+ "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', variables('storageAccountName'), 'default', 'config')]",
+ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_blobManager', variables('storageAccountName')))]",
+ "identityRoleAssignments",
+ "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-blob-ep', variables('scriptStorageAccountName')))]",
+ "[resourceId('Microsoft.Network/privateEndpoints/privateDnsZoneGroups', format('{0}-blob-ep', variables('scriptStorageAccountName')), 'blob-endpoint-zone')]",
+ "[resourceId('Microsoft.Storage/storageAccounts', variables('scriptStorageAccountName'))]"
+ ]
+ }
+ ],
+ "outputs": {
+ "resourceId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the storage account."
+ },
+ "value": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
+ },
+ "name": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the storage account."
+ },
+ "value": "[variables('storageAccountName')]"
+ },
+ "scriptStorageAccountResourceId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the storage account."
+ },
+ "value": "[resourceId('Microsoft.Storage/storageAccounts', variables('scriptStorageAccountName'))]"
+ },
+ "scriptStorageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the storage account."
+ },
+ "value": "[variables('scriptStorageAccountName')]"
+ },
+ "configContainer": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the container used for configuration settings."
+ },
+ "value": "config"
+ },
+ "exportContainer": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the container used for Cost Management exports."
+ },
+ "value": "msexports"
+ },
+ "ingestionContainer": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the container used for normalized data ingestion."
+ },
+ "value": "ingestion"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "vnet"
+ ]
+ },
+ "dataExplorer": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "dataExplorer",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "clusterName": {
+ "value": "[parameters('dataExplorerName')]"
+ },
+ "clusterSku": {
+ "value": "[parameters('dataExplorerSku')]"
+ },
+ "clusterCapacity": {
+ "value": "[parameters('dataExplorerCapacity')]"
+ },
+ "clusterTrustedExternalTenants": {
+ "value": "[parameters('dataExplorerTrustedExternalTenants')]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "tagsByResource": {
+ "value": "[parameters('tagsByResource')]"
+ },
+ "dataFactoryName": {
+ "value": "[variables('dataFactoryName')]"
+ },
+ "rawRetentionInDays": {
+ "value": "[parameters('dataExplorerRawRetentionInDays')]"
+ },
+ "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.vNetId.value))]",
+ "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.dataExplorerSubnetId.value))]",
+ "enablePublicAccess": {
+ "value": "[parameters('enablePublicAccess')]"
+ },
+ "storageAccountName": {
+ "value": "[reference('storage').outputs.name.value]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "languageVersion": "2.0",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "4937657351857252728"
+ }
+ },
+ "parameters": {
+ "clusterName": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer cluster to use for advanced analytics. If empty, Azure Data Explorer will not be deployed. Required to use with Power BI if you have more than $2-5M/mo in costs being monitored. Default: \"\" (do not use)."
+ }
+ },
+ "clusterSku": {
+ "type": "string",
+ "defaultValue": "Dev(No SLA)_Standard_E2a_v4",
+ "allowedValues": [
+ "Dev(No SLA)_Standard_E2a_v4",
+ "Dev(No SLA)_Standard_D11_v2",
+ "Standard_D11_v2",
+ "Standard_D12_v2",
+ "Standard_D13_v2",
+ "Standard_D14_v2",
+ "Standard_D16d_v5",
+ "Standard_D32d_v4",
+ "Standard_D32d_v5",
+ "Standard_DS13_v2+1TB_PS",
+ "Standard_DS13_v2+2TB_PS",
+ "Standard_DS14_v2+3TB_PS",
+ "Standard_DS14_v2+4TB_PS",
+ "Standard_E2a_v4",
+ "Standard_E2ads_v5",
+ "Standard_E2d_v4",
+ "Standard_E2d_v5",
+ "Standard_E4a_v4",
+ "Standard_E4ads_v5",
+ "Standard_E4d_v4",
+ "Standard_E4d_v5",
+ "Standard_E8a_v4",
+ "Standard_E8ads_v5",
+ "Standard_E8as_v4+1TB_PS",
+ "Standard_E8as_v4+2TB_PS",
+ "Standard_E8as_v5+1TB_PS",
+ "Standard_E8as_v5+2TB_PS",
+ "Standard_E8d_v4",
+ "Standard_E8d_v5",
+ "Standard_E8s_v4+1TB_PS",
+ "Standard_E8s_v4+2TB_PS",
+ "Standard_E8s_v5+1TB_PS",
+ "Standard_E8s_v5+2TB_PS",
+ "Standard_E16a_v4",
+ "Standard_E16ads_v5",
+ "Standard_E16as_v4+3TB_PS",
+ "Standard_E16as_v4+4TB_PS",
+ "Standard_E16as_v5+3TB_PS",
+ "Standard_E16as_v5+4TB_PS",
+ "Standard_E16d_v4",
+ "Standard_E16d_v5",
+ "Standard_E16s_v4+3TB_PS",
+ "Standard_E16s_v4+4TB_PS",
+ "Standard_E16s_v5+3TB_PS",
+ "Standard_E16s_v5+4TB_PS",
+ "Standard_E64i_v3",
+ "Standard_E80ids_v4",
+ "Standard_EC8ads_v5",
+ "Standard_EC8as_v5+1TB_PS",
+ "Standard_EC8as_v5+2TB_PS",
+ "Standard_EC16ads_v5",
+ "Standard_EC16as_v5+3TB_PS",
+ "Standard_EC16as_v5+4TB_PS",
+ "Standard_L4s",
+ "Standard_L8as_v3",
+ "Standard_L8s",
+ "Standard_L8s_v2",
+ "Standard_L8s_v3",
+ "Standard_L16as_v3",
+ "Standard_L16s",
+ "Standard_L16s_v2",
+ "Standard_L16s_v3",
+ "Standard_L32as_v3",
+ "Standard_L32s_v3"
+ ],
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer SKU. Default: \"Dev(No SLA)_Standard_E2a_v4\"."
+ }
+ },
+ "clusterCapacity": {
+ "type": "int",
+ "defaultValue": 1,
+ "minValue": 1,
+ "maxValue": 1000,
+ "metadata": {
+ "description": "Optional. Number of nodes to use in the cluster. Allowed values: 1 for the Basic SKU tier and 2-1000 for Standard. Default: 1 for dev/test SKUs, 2 for standard SKUs."
+ }
+ },
+ "clusterTrustedExternalTenants": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access)."
+ }
+ },
+ "forceUpdateTag": {
+ "type": "string",
+ "defaultValue": "[utcNow()]",
+ "metadata": {
+ "description": "Optional. Forces the table to be updated if different from the last time it was deployed."
+ }
+ },
+ "continueOnErrors": {
+ "type": "bool",
+ "defaultValue": false,
+ "metadata": {
+ "description": "Optional. If true, ingestion will continue even if some rows fail to ingest. Default: false."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Azure location to use for the managed identity and deployment script to auto-start triggers. Default: (resource group location)."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to all resources."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "dataFactoryName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the Data Factory instance."
+ }
+ },
+ "rawRetentionInDays": {
+ "type": "int",
+ "defaultValue": 0,
+ "metadata": {
+ "description": "Optional. Number of days of data to retain in the Data Explorer *_raw tables. Default: 0."
+ }
+ },
+ "storageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the storage account to use for data ingestion."
+ }
+ },
+ "virtualNetworkId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Resource ID of the virtual network for private endpoints."
+ }
+ },
+ "privateEndpointSubnetId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Resource ID of the subnet for private endpoints."
+ }
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "metadata": {
+ "description": "Optional. Enable public access."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": "0.8",
+ "$fxv#1": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_1(id: string) {\r\n dynamic({\r\n \"arizeai.observabilityeval/organizations\": { \"SingularDisplayName\": \"Azure Native ArizeAi Cloud Service\" }\r\n ,\"astronomer.astro/organizations\": { \"SingularDisplayName\": \"Astro organization\" }\r\n ,\"citrix.services/xenappessentials\": { \"SingularDisplayName\": \"Citrix Virtual Apps Essentials\" }\r\n ,\"citrix.services/xendesktopessentials\": { \"SingularDisplayName\": \"Citrix Virtual Desktops Essentials\" }\r\n ,\"dell.storage/filesystems\": { \"SingularDisplayName\": \"Dell APEX File Storage, An Azure Native Service\" }\r\n ,\"dynatrace.observability/monitors\": { \"SingularDisplayName\": \"Dynatrace\" }\r\n ,\"github.network/networksettings\": { \"SingularDisplayName\": \"GitHub.Network network setting\" }\r\n ,\"informatica.datamanagement/organizations\": { \"SingularDisplayName\": \"Informatica Organization\" }\r\n ,\"lambdatest.hyperexecute/organizations\": { \"SingularDisplayName\": \"Azure Native LambdaTest Cloud Service\" }\r\n ,\"microsoft.aad/domainservices\": { \"SingularDisplayName\": \"Microsoft Entra Domain Services\" }\r\n ,\"microsoft.aadiam/diagnosticsettings\": { \"SingularDisplayName\": \"Microsoft.aadiam diagnostic setting\" }\r\n ,\"microsoft.aadiam/privatelinkforazuread\": { \"SingularDisplayName\": \"Private Link for Microsoft Entra ID\" }\r\n ,\"microsoft.advisor/advisorscore\": { \"SingularDisplayName\": \"Microsoft.Advisor advisor score\" }\r\n ,\"microsoft.advisor/configurations\": { \"SingularDisplayName\": \"Microsoft.Advisor configuration\" }\r\n ,\"microsoft.advisor/generaterecommendations\": { \"SingularDisplayName\": \"Microsoft.Advisor generate recommendation\" }\r\n ,\"microsoft.advisor/metadata\": { \"SingularDisplayName\": \"Microsoft.Advisor metadata\" }\r\n ,\"microsoft.advisor/recommendations\": { \"SingularDisplayName\": \"Microsoft.Advisor recommendation\" }\r\n ,\"microsoft.advisor/recommendations/suppressions\": { \"SingularDisplayName\": \"Microsoft.Advisor recommendations suppression\" }\r\n ,\"microsoft.agfoodplatform/farmbeats\": { \"SingularDisplayName\": \"Azure Data Manager for Agriculture\" }\r\n ,\"microsoft.agfoodplatform/farmbeatsextensiondefinitions\": { \"SingularDisplayName\": \"Microsoft.AgFoodPlatform farm beats extension definition\" }\r\n ,\"microsoft.agfoodplatform/farmbeatssolutiondefinitions\": { \"SingularDisplayName\": \"Microsoft.AgFoodPlatform farm beats solution definition\" }\r\n ,\"microsoft.agricultureplatform/agriservices\": { \"SingularDisplayName\": \"Microsoft.AgriculturePlatform agri service\" }\r\n ,\"microsoft.akshybrid/agentpools\": { \"SingularDisplayName\": \"Microsoft.AksHybrid agent pool\" }\r\n ,\"microsoft.akshybrid/provisionedclusters\": { \"SingularDisplayName\": \"Microsoft.AksHybrid provisioned cluster\" }\r\n ,\"microsoft.akshybrid/upgradeprofiles\": { \"SingularDisplayName\": \"Microsoft.AksHybrid upgrade profile\" }\r\n ,\"microsoft.alertsmanagement/actionrules\": { \"SingularDisplayName\": \"Alert processing rule\" }\r\n ,\"microsoft.alertsmanagement/alerts\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement alert\" }\r\n ,\"microsoft.alertsmanagement/alerts/enrichments\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement alerts enrichment\" }\r\n ,\"microsoft.alertsmanagement/prometheusrulegroups\": { \"SingularDisplayName\": \"Prometheus rule group\" }\r\n ,\"microsoft.alertsmanagement/smartdetectoralertrules\": { \"SingularDisplayName\": \"Smart detector alert rule\" }\r\n ,\"microsoft.alertsmanagement/smartgroups\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement smart group\" }\r\n ,\"microsoft.alertsmanagement/tenantactivitylogalerts\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement tenant activity log alert\" }\r\n ,\"microsoft.all/arcvirtualmachines\": { \"SingularDisplayName\": \"Azure Arc virtual machine\" }\r\n ,\"microsoft.all/hcivirtualmachines\": { \"SingularDisplayName\": \"Azure Stack HCI Virtual Machine - Azure Arc\" }\r\n ,\"microsoft.all/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine\" }\r\n ,\"microsoft.analysisservices/servers\": { \"SingularDisplayName\": \"Analysis Services server\" }\r\n ,\"microsoft.anybuild/clusters\": { \"SingularDisplayName\": \"AnyBuild cluster\" }\r\n ,\"microsoft.apicenter/deletedservices\": { \"SingularDisplayName\": \"Microsoft.ApiCenter deleted service\" }\r\n ,\"microsoft.apicenter/services\": { \"SingularDisplayName\": \"API Center\" }\r\n ,\"microsoft.apicenter/services/workspaces\": { \"SingularDisplayName\": \"Workspace\" }\r\n ,\"microsoft.apimanagement/gateways\": { \"SingularDisplayName\": \"API Management gateway\" }\r\n ,\"microsoft.apimanagement/gateways/configconnections\": { \"SingularDisplayName\": \"Microsoft.ApiManagement gateways config connection\" }\r\n ,\"microsoft.apimanagement/service\": { \"SingularDisplayName\": \"API Management service\" }\r\n ,\"microsoft.apimanagement/service/workspaces\": { \"SingularDisplayName\": \"Workspace\" }\r\n ,\"microsoft.apisecurity/defendersettings\": { \"SingularDisplayName\": \"Microsoft.ApiSecurity defender setting\" }\r\n ,\"microsoft.app/builders\": { \"SingularDisplayName\": \"Microsoft.App builder\" }\r\n ,\"microsoft.app/builders/builds\": { \"SingularDisplayName\": \"Microsoft.App builders build\" }\r\n ,\"microsoft.app/connectedenvironments\": { \"SingularDisplayName\": \"Container Apps Connected Environment\" }\r\n ,\"microsoft.app/containerapps\": { \"SingularDisplayName\": \"Container App\" }\r\n ,\"microsoft.app/jobs\": { \"SingularDisplayName\": \"Container App Job\" }\r\n ,\"microsoft.app/logicapps\": { \"SingularDisplayName\": \"Logic app\" }\r\n ,\"microsoft.app/logicapps/workflows\": { \"SingularDisplayName\": \"Logic app workflow\" }\r\n ,\"microsoft.app/managedenvironments\": { \"SingularDisplayName\": \"Container Apps Environment\" }\r\n ,\"microsoft.app/sessionpools\": { \"SingularDisplayName\": \"Container App Session Pool\" }\r\n ,\"microsoft.app/spaces\": { \"SingularDisplayName\": \"App Space\" }\r\n ,\"microsoft.appassessment/migrateprojects\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate project\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessment\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments/assessedapplications\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessments assessed application\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments/assessedmachines\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessments assessed machine\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments/machinestoassess\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessments machines to asses\" }\r\n ,\"microsoft.appassessment/migrateprojects/sites\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects site\" }\r\n ,\"microsoft.appassessment/migrateprojects/sites/applianceconfigurations\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects sites appliance configuration\" }\r\n ,\"microsoft.appcomplianceautomation/reports\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation report\" }\r\n ,\"microsoft.appcomplianceautomation/reports/evidences\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports evidence\" }\r\n ,\"microsoft.appcomplianceautomation/reports/scopingconfigurations\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports scoping configuration\" }\r\n ,\"microsoft.appcomplianceautomation/reports/snapshots\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports snapshot\" }\r\n ,\"microsoft.appcomplianceautomation/reports/webhooks\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports webhook\" }\r\n ,\"microsoft.appconfiguration/configurationstores\": { \"SingularDisplayName\": \"App Configuration\" }\r\n ,\"microsoft.appplatform/spring\": { \"SingularDisplayName\": \"Azure Spring Apps\" }\r\n ,\"microsoft.appsecurity/policies\": { \"SingularDisplayName\": \"App Protect Policy\" }\r\n ,\"microsoft.arc/all\": { \"SingularDisplayName\": \"Azure Arc enabled resource\" }\r\n ,\"microsoft.arc/allfairfax\": { \"SingularDisplayName\": \"Azure Arc enabled resource\" }\r\n ,\"microsoft.arc/kubernetesresources\": { \"SingularDisplayName\": \"Azure Arc Kubernetes cluster\" }\r\n ,\"microsoft.arc/kubernetesresourcesfairfax\": { \"SingularDisplayName\": \"Azure Arc Kubernetes cluster\" }\r\n ,\"microsoft.arcnetworking/arcnwloadbalancers\": { \"SingularDisplayName\": \"Microsoft.ArcNetworking arc nw load balancer\" }\r\n ,\"microsoft.attestation/attestationproviders\": { \"SingularDisplayName\": \"Attestation provider\" }\r\n ,\"microsoft.authorization/accessreviewhistorydefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization access review history definition\" }\r\n ,\"microsoft.authorization/accessreviewscheduledefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule definition\" }\r\n ,\"microsoft.authorization/accessreviewscheduledefinitions/instances\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule definitions instance\" }\r\n ,\"microsoft.authorization/accessreviewscheduledefinitions/instances/decisions\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule definitions instances decision\" }\r\n ,\"microsoft.authorization/accessreviewschedulesettings\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule setting\" }\r\n ,\"microsoft.authorization/datapolicymanifests\": { \"SingularDisplayName\": \"Microsoft.Authorization data policy manifest\" }\r\n ,\"microsoft.authorization/denyassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization deny assignment\" }\r\n ,\"microsoft.authorization/locks\": { \"SingularDisplayName\": \"Microsoft.Authorization lock\" }\r\n ,\"microsoft.authorization/policyassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization policy assignment\" }\r\n ,\"microsoft.authorization/policydefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy definition\" }\r\n ,\"microsoft.authorization/policydefinitions/versions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy definitions version\" }\r\n ,\"microsoft.authorization/policyexemptions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy exemption\" }\r\n ,\"microsoft.authorization/policysetdefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy set definition\" }\r\n ,\"microsoft.authorization/policysetdefinitions/versions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy set definitions version\" }\r\n ,\"microsoft.authorization/privatelinkassociations\": { \"SingularDisplayName\": \"Microsoft.Authorization private link association\" }\r\n ,\"microsoft.authorization/provideroperations\": { \"SingularDisplayName\": \"Microsoft.Authorization provider operation\" }\r\n ,\"microsoft.authorization/resourcemanagementprivatelinks\": { \"SingularDisplayName\": \"Resource management private link\" }\r\n ,\"microsoft.authorization/roleassignmentapprovals\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment approval\" }\r\n ,\"microsoft.authorization/roleassignmentapprovals/stages\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment approvals stage\" }\r\n ,\"microsoft.authorization/roleassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment\" }\r\n ,\"microsoft.authorization/roleassignmentscheduleinstances\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment schedule instance\" }\r\n ,\"microsoft.authorization/roleassignmentschedulerequests\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment schedule request\" }\r\n ,\"microsoft.authorization/roleassignmentschedules\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment schedule\" }\r\n ,\"microsoft.authorization/roledefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization role definition\" }\r\n ,\"microsoft.authorization/roleeligibilityscheduleinstances\": { \"SingularDisplayName\": \"Microsoft.Authorization role eligibility schedule instance\" }\r\n ,\"microsoft.authorization/roleeligibilityschedulerequests\": { \"SingularDisplayName\": \"Microsoft.Authorization role eligibility schedule request\" }\r\n ,\"microsoft.authorization/roleeligibilityschedules\": { \"SingularDisplayName\": \"Microsoft.Authorization role eligibility schedule\" }\r\n ,\"microsoft.authorization/rolemanagementalertconfigurations\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert configuration\" }\r\n ,\"microsoft.authorization/rolemanagementalertdefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert definition\" }\r\n ,\"microsoft.authorization/rolemanagementalertoperations\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert operation\" }\r\n ,\"microsoft.authorization/rolemanagementalerts\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert\" }\r\n ,\"microsoft.authorization/rolemanagementalerts/alertincidents\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alerts alert incident\" }\r\n ,\"microsoft.authorization/rolemanagementpolicies\": { \"SingularDisplayName\": \"Microsoft.Authorization role management policy\" }\r\n ,\"microsoft.authorization/rolemanagementpolicyassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization role management policy assignment\" }\r\n ,\"microsoft.automanage/bestpractices\": { \"SingularDisplayName\": \"Microsoft.Automanage best practice\" }\r\n ,\"microsoft.automanage/bestpractices/versions\": { \"SingularDisplayName\": \"Microsoft.Automanage best practices version\" }\r\n ,\"microsoft.automanage/configurationprofileassignments\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profile assignment\" }\r\n ,\"microsoft.automanage/configurationprofileassignments/reports\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profile assignments report\" }\r\n ,\"microsoft.automanage/configurationprofiles\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profile\" }\r\n ,\"microsoft.automanage/configurationprofiles/versions\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profiles version\" }\r\n ,\"microsoft.automanage/serviceprincipals\": { \"SingularDisplayName\": \"ServicePrincipals\" }\r\n ,\"microsoft.automation/automationaccounts\": { \"SingularDisplayName\": \"Automation account\" }\r\n ,\"microsoft.automation/automationaccounts/hybridrunbookworkergroups\": { \"SingularDisplayName\": \"Automation hybrid worker group\" }\r\n ,\"microsoft.automation/automationaccounts/runbooks\": { \"SingularDisplayName\": \"Automation runbook\" }\r\n ,\"microsoft.autonomousdevelopmentplatform/accounts\": { \"SingularDisplayName\": \"Microsoft.AutonomousDevelopmentPlatform account\" }\r\n ,\"microsoft.autonomousdevelopmentplatform/accounts/datapools\": { \"SingularDisplayName\": \"Microsoft.AutonomousDevelopmentPlatform accounts data pool\" }\r\n ,\"microsoft.autonomousdevelopmentplatform/workspaces\": { \"SingularDisplayName\": \"Microsoft.AutonomousDevelopmentPlatform workspace\" }\r\n ,\"microsoft.avs/privateclouds\": { \"SingularDisplayName\": \"Azure VMware Solution private cloud\" }\r\n ,\"microsoft.awsconnector/accessanalyzeranalyzers\": { \"SingularDisplayName\": \"Access Analyzer Analyzer\" }\r\n ,\"microsoft.awsconnector/acmcertificatesummaries\": { \"SingularDisplayName\": \"ACM Certificate Summary\" }\r\n ,\"microsoft.awsconnector/apigatewayrestapis\": { \"SingularDisplayName\": \"Api Gateway Rest Api\" }\r\n ,\"microsoft.awsconnector/apigatewaystages\": { \"SingularDisplayName\": \"Api Gateway Stage\" }\r\n ,\"microsoft.awsconnector/applicationautoscalingscalabletargets\": { \"SingularDisplayName\": \"Application Auto Scaling Scalable Target\" }\r\n ,\"microsoft.awsconnector/appsyncgraphqlapis\": { \"SingularDisplayName\": \"App Sync Graphql Api\" }\r\n ,\"microsoft.awsconnector/autoscalingautoscalinggroups\": { \"SingularDisplayName\": \"Auto Scaling Auto Scaling Group\" }\r\n ,\"microsoft.awsconnector/cloudformationstacks\": { \"SingularDisplayName\": \"Cloud Formation Stack\" }\r\n ,\"microsoft.awsconnector/cloudformationstacksets\": { \"SingularDisplayName\": \"Cloud Formation Stack Set\" }\r\n ,\"microsoft.awsconnector/cloudfrontdistributions\": { \"SingularDisplayName\": \"Cloud Front Distribution\" }\r\n ,\"microsoft.awsconnector/cloudtrailtrails\": { \"SingularDisplayName\": \"Cloud Trail Trail\" }\r\n ,\"microsoft.awsconnector/cloudwatchalarms\": { \"SingularDisplayName\": \"Cloud Watch Alarm\" }\r\n ,\"microsoft.awsconnector/codebuildprojects\": { \"SingularDisplayName\": \"Code Build Project\" }\r\n ,\"microsoft.awsconnector/codebuildsourcecredentialsinfos\": { \"SingularDisplayName\": \"Code Build Source Credentials Info\" }\r\n ,\"microsoft.awsconnector/configserviceconfigurationrecorders\": { \"SingularDisplayName\": \"Config Service Configuration Recorder\" }\r\n ,\"microsoft.awsconnector/configserviceconfigurationrecorderstatuses\": { \"SingularDisplayName\": \"Config Service Configuration Recorder Status\" }\r\n ,\"microsoft.awsconnector/configservicedeliverychannels\": { \"SingularDisplayName\": \"Config Service Delivery Channel\" }\r\n ,\"microsoft.awsconnector/databasemigrationservicereplicationinstances\": { \"SingularDisplayName\": \"Database Migration Service Replication Instance\" }\r\n ,\"microsoft.awsconnector/daxclusters\": { \"SingularDisplayName\": \"DAX Cluster\" }\r\n ,\"microsoft.awsconnector/dynamodbcontinuousbackupsdescriptions\": { \"SingularDisplayName\": \"Dynamo DB Continuous Backups Description\" }\r\n ,\"microsoft.awsconnector/dynamodbtables\": { \"SingularDisplayName\": \"Dynamo DB Table\" }\r\n ,\"microsoft.awsconnector/ec2accountattributes\": { \"SingularDisplayName\": \"EC2 Account Attribute\" }\r\n ,\"microsoft.awsconnector/ec2addresses\": { \"SingularDisplayName\": \"EC2 Address\" }\r\n ,\"microsoft.awsconnector/ec2flowlogs\": { \"SingularDisplayName\": \"EC2 Flow Log\" }\r\n ,\"microsoft.awsconnector/ec2images\": { \"SingularDisplayName\": \"EC2 Image\" }\r\n ,\"microsoft.awsconnector/ec2instances\": { \"SingularDisplayName\": \"Microsoft.AwsConnector ec2 instance\" }\r\n ,\"microsoft.awsconnector/ec2instancestatuses\": { \"SingularDisplayName\": \"EC2 Instance Status\" }\r\n ,\"microsoft.awsconnector/ec2ipams\": { \"SingularDisplayName\": \"EC2 Ipam\" }\r\n ,\"microsoft.awsconnector/ec2keypairs\": { \"SingularDisplayName\": \"EC2 Key Pair\" }\r\n ,\"microsoft.awsconnector/ec2networkacls\": { \"SingularDisplayName\": \"EC2 Network Acl\" }\r\n ,\"microsoft.awsconnector/ec2networkinterfaces\": { \"SingularDisplayName\": \"EC2 Network Interface\" }\r\n ,\"microsoft.awsconnector/ec2routetables\": { \"SingularDisplayName\": \"EC2 Route Table\" }\r\n ,\"microsoft.awsconnector/ec2securitygroups\": { \"SingularDisplayName\": \"EC2 Security Group\" }\r\n ,\"microsoft.awsconnector/ec2snapshots\": { \"SingularDisplayName\": \"EC2 Snapshot\" }\r\n ,\"microsoft.awsconnector/ec2subnets\": { \"SingularDisplayName\": \"EC2 Subnet\" }\r\n ,\"microsoft.awsconnector/ec2volumes\": { \"SingularDisplayName\": \"EC2 Volume\" }\r\n ,\"microsoft.awsconnector/ec2vpcendpoints\": { \"SingularDisplayName\": \"EC2 VPCEndpoint\" }\r\n ,\"microsoft.awsconnector/ec2vpcpeeringconnections\": { \"SingularDisplayName\": \"EC2 VPCPeering Connection\" }\r\n ,\"microsoft.awsconnector/ec2vpcs\": { \"SingularDisplayName\": \"EC2 VPC\" }\r\n ,\"microsoft.awsconnector/ecrimagedetails\": { \"SingularDisplayName\": \"ECR Image Detail\" }\r\n ,\"microsoft.awsconnector/ecrrepositories\": { \"SingularDisplayName\": \"ECR Repository\" }\r\n ,\"microsoft.awsconnector/ecsclusters\": { \"SingularDisplayName\": \"ECS Cluster\" }\r\n ,\"microsoft.awsconnector/ecsservices\": { \"SingularDisplayName\": \"ECS Service\" }\r\n ,\"microsoft.awsconnector/ecstaskdefinitions\": { \"SingularDisplayName\": \"ECS Task Definition\" }\r\n ,\"microsoft.awsconnector/efsfilesystems\": { \"SingularDisplayName\": \"EFS File System\" }\r\n ,\"microsoft.awsconnector/efsmounttargets\": { \"SingularDisplayName\": \"EFS Mount Target\" }\r\n ,\"microsoft.awsconnector/eksnodegroups\": { \"SingularDisplayName\": \"EKS Nodegroup\" }\r\n ,\"microsoft.awsconnector/elasticbeanstalkapplications\": { \"SingularDisplayName\": \"Elastic Beanstalk Application\" }\r\n ,\"microsoft.awsconnector/elasticbeanstalkconfigurationtemplates\": { \"SingularDisplayName\": \"Elastic Beanstalk Configuration Template\" }\r\n ,\"microsoft.awsconnector/elasticbeanstalkenvironments\": { \"SingularDisplayName\": \"Elastic Beanstalk Environment\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2listeners\": { \"SingularDisplayName\": \"Elastic Load Balancing V2 Listener\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2loadbalancers\": { \"SingularDisplayName\": \"Elastic Load Balancing V2 Load Balancer\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2targetgroups\": { \"SingularDisplayName\": \"Elastic Load Balancing V2 Target Group\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2targethealthdescriptions\": { \"SingularDisplayName\": \"Elastic Load Balancing v2 Target Health Description\" }\r\n ,\"microsoft.awsconnector/elasticsearchdomains\": { \"SingularDisplayName\": \"Elasticsearch Domain\" }\r\n ,\"microsoft.awsconnector/emrclusters\": { \"SingularDisplayName\": \"EMR Cluster\" }\r\n ,\"microsoft.awsconnector/guarddutydetectors\": { \"SingularDisplayName\": \"Guard Duty Detector\" }\r\n ,\"microsoft.awsconnector/iamaccesskeylastuseds\": { \"SingularDisplayName\": \"IAM Access Key Last Used\" }\r\n ,\"microsoft.awsconnector/iamaccesskeymetadata\": { \"SingularDisplayName\": \"IAM Access Key Metadata\" }\r\n ,\"microsoft.awsconnector/iamgroups\": { \"SingularDisplayName\": \"IAM Group\" }\r\n ,\"microsoft.awsconnector/iaminstanceprofiles\": { \"SingularDisplayName\": \"IAM Instance Profile\" }\r\n ,\"microsoft.awsconnector/iammanagedpolicies\": { \"SingularDisplayName\": \"IAM Managed Policy\" }\r\n ,\"microsoft.awsconnector/iammfadevices\": { \"SingularDisplayName\": \"IAM MFADevice\" }\r\n ,\"microsoft.awsconnector/iampasswordpolicies\": { \"SingularDisplayName\": \"IAM Password Policy\" }\r\n ,\"microsoft.awsconnector/iampolicyversions\": { \"SingularDisplayName\": \"IAM Policy Version\" }\r\n ,\"microsoft.awsconnector/iamroles\": { \"SingularDisplayName\": \"IAM Role\" }\r\n ,\"microsoft.awsconnector/iamservercertificates\": { \"SingularDisplayName\": \"IAM Server Certificate\" }\r\n ,\"microsoft.awsconnector/iamuserpolicies\": { \"SingularDisplayName\": \"IAM User Policy\" }\r\n ,\"microsoft.awsconnector/iamvirtualmfadevices\": { \"SingularDisplayName\": \"IAM Virtual MFADevice\" }\r\n ,\"microsoft.awsconnector/kmsaliases\": { \"SingularDisplayName\": \"KMS Alias\" }\r\n ,\"microsoft.awsconnector/kmskeys\": { \"SingularDisplayName\": \"KMS Key\" }\r\n ,\"microsoft.awsconnector/lambdafunctioncodelocations\": { \"SingularDisplayName\": \"Lambda Function Code Location\" }\r\n ,\"microsoft.awsconnector/lambdafunctionconfigurations\": { \"SingularDisplayName\": \"Microsoft.AwsConnector lambda function configuration\" }\r\n ,\"microsoft.awsconnector/lambdafunctions\": { \"SingularDisplayName\": \"Lambda Function\" }\r\n ,\"microsoft.awsconnector/licensemanagerlicenses\": { \"SingularDisplayName\": \"License Manager License\" }\r\n ,\"microsoft.awsconnector/lightsailbuckets\": { \"SingularDisplayName\": \"Lightsail Bucket\" }\r\n ,\"microsoft.awsconnector/lightsailinstances\": { \"SingularDisplayName\": \"Lightsail Instance\" }\r\n ,\"microsoft.awsconnector/logsloggroups\": { \"SingularDisplayName\": \"Logs Log Group\" }\r\n ,\"microsoft.awsconnector/logslogstreams\": { \"SingularDisplayName\": \"Logs Log Stream\" }\r\n ,\"microsoft.awsconnector/logsmetricfilters\": { \"SingularDisplayName\": \"Logs Metric Filter\" }\r\n ,\"microsoft.awsconnector/logssubscriptionfilters\": { \"SingularDisplayName\": \"Logs Subscription Filter\" }\r\n ,\"microsoft.awsconnector/macie2jobsummaries\": { \"SingularDisplayName\": \"Macie2 Job Summary\" }\r\n ,\"microsoft.awsconnector/macieallowlists\": { \"SingularDisplayName\": \"Macie Allow List\" }\r\n ,\"microsoft.awsconnector/networkfirewallfirewallpolicies\": { \"SingularDisplayName\": \"Network Firewall Firewall Policy\" }\r\n ,\"microsoft.awsconnector/networkfirewallfirewalls\": { \"SingularDisplayName\": \"Network Firewall Firewall\" }\r\n ,\"microsoft.awsconnector/networkfirewallrulegroups\": { \"SingularDisplayName\": \"Network Firewall Rule Group\" }\r\n ,\"microsoft.awsconnector/opensearchdomainstatuses\": { \"SingularDisplayName\": \"Open Search Domain Status\" }\r\n ,\"microsoft.awsconnector/opensearchservicedomains\": { \"SingularDisplayName\": \"Open Search Service Domain\" }\r\n ,\"microsoft.awsconnector/organizationsaccounts\": { \"SingularDisplayName\": \"Organizations Account\" }\r\n ,\"microsoft.awsconnector/organizationsorganizations\": { \"SingularDisplayName\": \"Organizations Organization\" }\r\n ,\"microsoft.awsconnector/rdsdbclusters\": { \"SingularDisplayName\": \"RDS DBCluster\" }\r\n ,\"microsoft.awsconnector/rdsdbinstances\": { \"SingularDisplayName\": \"RDS DBInstance\" }\r\n ,\"microsoft.awsconnector/rdsdbsnapshotattributesresults\": { \"SingularDisplayName\": \"RDS DBSnapshot Attributes Result\" }\r\n ,\"microsoft.awsconnector/rdsdbsnapshots\": { \"SingularDisplayName\": \"RDS DBSnapshot\" }\r\n ,\"microsoft.awsconnector/rdseventsubscriptions\": { \"SingularDisplayName\": \"RDS Event Subscription\" }\r\n ,\"microsoft.awsconnector/rdsexporttasks\": { \"SingularDisplayName\": \"RDS Export Task\" }\r\n ,\"microsoft.awsconnector/redshiftclusterparametergroups\": { \"SingularDisplayName\": \"Redshift Cluster Parameter Group\" }\r\n ,\"microsoft.awsconnector/redshiftclusters\": { \"SingularDisplayName\": \"Redshift Cluster\" }\r\n ,\"microsoft.awsconnector/route53domainsdomainsummaries\": { \"SingularDisplayName\": \"Route 53 Domains Domain Summary\" }\r\n ,\"microsoft.awsconnector/route53hostedzones\": { \"SingularDisplayName\": \"Route53 Hosted Zone\" }\r\n ,\"microsoft.awsconnector/route53resourcerecordsets\": { \"SingularDisplayName\": \"Route 53 Resource Record Set\" }\r\n ,\"microsoft.awsconnector/s3accesscontrolpolicies\": { \"SingularDisplayName\": \"S3 Access Control Policy\" }\r\n ,\"microsoft.awsconnector/s3accesspoints\": { \"SingularDisplayName\": \"S3 Access Point\" }\r\n ,\"microsoft.awsconnector/s3bucketpolicies\": { \"SingularDisplayName\": \"S3 Bucket Policy\" }\r\n ,\"microsoft.awsconnector/s3buckets\": { \"SingularDisplayName\": \"S3 Bucket\" }\r\n ,\"microsoft.awsconnector/s3controlmultiregionaccesspointpolicydocuments\": { \"SingularDisplayName\": \"S3 Control Multi Region Access Point Policy Document\" }\r\n ,\"microsoft.awsconnector/sagemakerapps\": { \"SingularDisplayName\": \"Sage Maker App\" }\r\n ,\"microsoft.awsconnector/sagemakerdevices\": { \"SingularDisplayName\": \"Sage Maker Device\" }\r\n ,\"microsoft.awsconnector/sagemakerimages\": { \"SingularDisplayName\": \"Sage Maker Image\" }\r\n ,\"microsoft.awsconnector/sagemakernotebookinstancesummaries\": { \"SingularDisplayName\": \"Sage Maker Notebook Instance Summary\" }\r\n ,\"microsoft.awsconnector/secretsmanagerresourcepolicies\": { \"SingularDisplayName\": \"Secrets Manager Resource Policy\" }\r\n ,\"microsoft.awsconnector/secretsmanagersecrets\": { \"SingularDisplayName\": \"Secrets Manager Secret\" }\r\n ,\"microsoft.awsconnector/snssubscriptions\": { \"SingularDisplayName\": \"SNS Subscription\" }\r\n ,\"microsoft.awsconnector/snstopics\": { \"SingularDisplayName\": \"SNS Topic\" }\r\n ,\"microsoft.awsconnector/sqsqueues\": { \"SingularDisplayName\": \"SQS Queue\" }\r\n ,\"microsoft.awsconnector/ssminstanceinformations\": { \"SingularDisplayName\": \"SSM Instance Information\" }\r\n ,\"microsoft.awsconnector/ssmparameters\": { \"SingularDisplayName\": \"SSM Parameter\" }\r\n ,\"microsoft.awsconnector/ssmresourcecompliancesummaryitems\": { \"SingularDisplayName\": \"SSM Resource Compliance Summary Item\" }\r\n ,\"microsoft.awsconnector/wafv2ipsets\": { \"SingularDisplayName\": \"WAFv2 IPSet\" }\r\n ,\"microsoft.awsconnector/wafv2loggingconfigurations\": { \"SingularDisplayName\": \"WAFv2 Logging Configuration\" }\r\n ,\"microsoft.awsconnector/wafv2webaclassociations\": { \"SingularDisplayName\": \"WAFv2 Web ACLAssociation\" }\r\n ,\"microsoft.awsconnector/wafwebaclsummaries\": { \"SingularDisplayName\": \"WAF Web ACLSummary\" }\r\n ,\"microsoft.azureactivedirectory/b2cdirectories\": { \"SingularDisplayName\": \"B2C tenant\" }\r\n ,\"microsoft.azureactivedirectory/ciamdirectories\": { \"SingularDisplayName\": \"External Configuration Tenant\" }\r\n ,\"microsoft.azureactivedirectory/guestusages\": { \"SingularDisplayName\": \"Guest Usage\" }\r\n ,\"microsoft.azurearcdata/datacontrollers\": { \"SingularDisplayName\": \"Azure Arc data controller\" }\r\n ,\"microsoft.azurearcdata/postgresinstances\": { \"SingularDisplayName\": \"PostgreSQL server ? Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlmanagedinstances\": { \"SingularDisplayName\": \"SQL managed instance - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlserveresulicenses\": { \"SingularDisplayName\": \"SQL Server ESU license\" }\r\n ,\"microsoft.azurearcdata/sqlserverinstances\": { \"SingularDisplayName\": \"SQL Server - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlserverinstances/databases\": { \"SingularDisplayName\": \"SQL Server database - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlserverlicenses\": { \"SingularDisplayName\": \"SQL Server License\" }\r\n ,\"microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems\": { \"SingularDisplayName\": \"Microsoft.AzureBusinessContinuity deleted unified protected item\" }\r\n ,\"microsoft.azurebusinesscontinuity/unifiedprotecteditems\": { \"SingularDisplayName\": \"Microsoft.AzureBusinessContinuity unified protected item\" }\r\n ,\"microsoft.azurecis/aadapplications\": { \"SingularDisplayName\": \"Microsoft.AzureCis AAD application\" }\r\n ,\"microsoft.azurecis/autopilotenvironments\": { \"SingularDisplayName\": \"Microsoft.AzureCis autopilot environment\" }\r\n ,\"microsoft.azurecis/dsmsallowlists\": { \"SingularDisplayName\": \"Microsoft.AzureCis ds msallowlist\" }\r\n ,\"microsoft.azurecis/dsmsrootfolders\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsms root folder\" }\r\n ,\"microsoft.azurecis/dstsapplications\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsts application\" }\r\n ,\"microsoft.azurecis/dstsserviceaccounts\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsts service account\" }\r\n ,\"microsoft.azurecis/dstsserviceclientidentities\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsts service client identity\" }\r\n ,\"microsoft.azurecis/genericgenevaactions\": { \"SingularDisplayName\": \"Microsoft.AzureCis generic geneva action\" }\r\n ,\"microsoft.azurecis/plannedquotas\": { \"SingularDisplayName\": \"Microsoft.AzureCis planned quota\" }\r\n ,\"microsoft.azurecis/publishconfigvalues\": { \"SingularDisplayName\": \"Microsoft.AzureCis publish config value\" }\r\n ,\"microsoft.azurecis/pushagentv2accounts\": { \"SingularDisplayName\": \"Microsoft.AzureCis push agent v2 account\" }\r\n ,\"microsoft.azuredatatransfer/connections\": { \"SingularDisplayName\": \"Connection\" }\r\n ,\"microsoft.azuredatatransfer/connections/flows\": { \"SingularDisplayName\": \"Flow\" }\r\n ,\"microsoft.azuredatatransfer/pipelines\": { \"SingularDisplayName\": \"Pipeline\" }\r\n ,\"microsoft.azurefleet/fleets\": { \"SingularDisplayName\": \"Compute Fleet\" }\r\n ,\"microsoft.azurefleet/fleetscomputehub\": { \"SingularDisplayName\": \"Compute Fleet\" }\r\n ,\"microsoft.azureimagetestingforlinux/jobs\": { \"SingularDisplayName\": \"Microsoft.AzureImageTestingForLinux job\" }\r\n ,\"microsoft.azureimagetestingforlinux/jobtemplates\": { \"SingularDisplayName\": \"Microsoft.AzureImageTestingForLinux job template\" }\r\n ,\"microsoft.azurelargeinstance/azurelargeinstances\": { \"SingularDisplayName\": \"Azure Large Instance\" }\r\n ,\"microsoft.azurelargeinstance/azurelargestorageinstances\": { \"SingularDisplayName\": \"Microsoft.AzureLargeInstance Azure large storage instance\" }\r\n ,\"microsoft.azurepercept/accounts\": { \"SingularDisplayName\": \"Microsoft.AzurePercept account\" }\r\n ,\"microsoft.azurepercept/accounts/devices\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts device\" }\r\n ,\"microsoft.azurepercept/accounts/devices/sensors\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts devices sensor\" }\r\n ,\"microsoft.azurepercept/accounts/sensors\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts sensor\" }\r\n ,\"microsoft.azurepercept/accounts/solutioninstances\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts solutioninstance\" }\r\n ,\"microsoft.azurepercept/accounts/solutions\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts solution\" }\r\n ,\"microsoft.azurepercept/accounts/targets\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts target\" }\r\n ,\"microsoft.azureplaywrightservice/accounts\": { \"SingularDisplayName\": \"Playwright Testing\" }\r\n ,\"microsoft.azurescan/scanningaccounts\": { \"SingularDisplayName\": \"ESRP Scan\" }\r\n ,\"microsoft.azuresphere/catalogs\": { \"SingularDisplayName\": \"Azure Sphere Catalog\" }\r\n ,\"microsoft.azurespherev2/catalogs\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalog\" }\r\n ,\"microsoft.azurespherev2/catalogs/artifacts\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs artifact\" }\r\n ,\"microsoft.azurespherev2/catalogs/certificates\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs certificate\" }\r\n ,\"microsoft.azurespherev2/catalogs/deviceregistrations\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs device registration\" }\r\n ,\"microsoft.azurespherev2/catalogs/provisioningpackages\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs provisioning package\" }\r\n ,\"microsoft.azurespherev2/catalogs/syndicationchannels\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs syndication channel\" }\r\n ,\"microsoft.azurespherev2/catalogs/syndicationchannels/deployments\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs syndication channels deployment\" }\r\n ,\"microsoft.azurespherev2/catalogs/updatepackages\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs update package\" }\r\n ,\"microsoft.azurestack/cloudmanifestfiles\": { \"SingularDisplayName\": \"Microsoft.AzureStack cloud manifest file\" }\r\n ,\"microsoft.azurestack/linkedsubscriptions\": { \"SingularDisplayName\": \"Microsoft.AzureStack linked subscription\" }\r\n ,\"microsoft.azurestack/registrations\": { \"SingularDisplayName\": \"Microsoft.AzureStack registration\" }\r\n ,\"microsoft.azurestack/registrations/customersubscriptions\": { \"SingularDisplayName\": \"Microsoft.AzureStack registrations customer subscription\" }\r\n ,\"microsoft.azurestack/registrations/products\": { \"SingularDisplayName\": \"Microsoft.AzureStack registrations product\" }\r\n ,\"microsoft.azurestackhci/clusters\": { \"SingularDisplayName\": \"Azure Stack HCI\" }\r\n ,\"microsoft.azurestackhci/edgedevices\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge device\" }\r\n ,\"microsoft.azurestackhci/edgedevices/jobs\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge devices job\" }\r\n ,\"microsoft.azurestackhci/edgenodepools\": { \"SingularDisplayName\": \"Azure Stack\" }\r\n ,\"microsoft.azurestackhci/galleryimages\": { \"SingularDisplayName\": \"Azure Stack HCI Gallery image\" }\r\n ,\"microsoft.azurestackhci/logicalnetworks\": { \"SingularDisplayName\": \"Azure Stack HCI Logical network\" }\r\n ,\"microsoft.azurestackhci/marketplacegalleryimages\": { \"SingularDisplayName\": \"Azure Stack HCI Marketplace Gallery image\" }\r\n ,\"microsoft.azurestackhci/networkinterfaces\": { \"SingularDisplayName\": \"Azure Stack HCI VM Network Interface\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI network security group\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups/securityrules\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI network security groups security rule\" }\r\n ,\"microsoft.azurestackhci/storagecontainers\": { \"SingularDisplayName\": \"Azure Stack HCI Storage path\" }\r\n ,\"microsoft.azurestackhci/virtualharddisks\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual hard disk\" }\r\n ,\"microsoft.azurestackhci/virtualmachineinstances\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual machine instance\" }\r\n ,\"microsoft.azurestackhci/virtualmachineinstances/guestagents\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual machine instances guest agent\" }\r\n ,\"microsoft.azurestackhci/virtualmachineinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual machine instances hybrid identity metadata\" }\r\n ,\"microsoft.azurestackhci/virtualmachines\": { \"SingularDisplayName\": \"Azure Stack HCI virtual machine - Azure Arc\" }\r\n ,\"microsoft.azurestackhci/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual network\" }\r\n ,\"microsoft.backupsolutions/vmwareapplications\": { \"SingularDisplayName\": \"Microsoft.BackupSolutions vmware application\" }\r\n ,\"microsoft.bakeryhybrid/pies\": { \"SingularDisplayName\": \"Microsoft.BakeryHybrid py\" }\r\n ,\"microsoft.bakeryhybrid/pies/nestedresourcetype\": { \"SingularDisplayName\": \"Microsoft.BakeryHybrid pies nested resource type\" }\r\n ,\"microsoft.baremetal/baremetalconnections\": { \"SingularDisplayName\": \"Microsoft.BareMetal bare metal connection\" }\r\n ,\"microsoft.baremetal/crayservers\": { \"SingularDisplayName\": \"Cray Server\" }\r\n ,\"microsoft.baremetal/monitoringservers\": { \"SingularDisplayName\": \"Monitoring Server\" }\r\n ,\"microsoft.baremetalinfrastructure/baremetalinstances\": { \"SingularDisplayName\": \"BareMetal Instance\" }\r\n ,\"microsoft.baremetalinfrastructure/baremetalstorageinstances\": { \"SingularDisplayName\": \"Microsoft.BareMetalInfrastructure bare metal storage instance\" }\r\n ,\"microsoft.batch/batchaccounts\": { \"SingularDisplayName\": \"Batch account\" }\r\n ,\"microsoft.billing/billingaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing billing account\" }\r\n ,\"microsoft.billing/billingaccounts/agreements\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts agreement\" }\r\n ,\"microsoft.billing/billingaccounts/associatedtenants\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts associated tenant\" }\r\n ,\"microsoft.billing/billingaccounts/availablebalance\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts available balance\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profile\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/availablebalance\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles available balance\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customer\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customers billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customers billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customers transfer\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/instructions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles instruction\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoices\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice section\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections product\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections transfer\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/paymentmethodlinks\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles payment method link\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/policies\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles policy\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/transactions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles transaction\" }\r\n ,\"microsoft.billing/billingaccounts/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingsubscriptionaliases\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing subscription aliase\" }\r\n ,\"microsoft.billing/billingaccounts/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/billingsubscriptions/invoices\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing subscriptions invoice\" }\r\n ,\"microsoft.billing/billingaccounts/customers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customer\" }\r\n ,\"microsoft.billing/billingaccounts/customers/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customers billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/customers/policies\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customers policy\" }\r\n ,\"microsoft.billing/billingaccounts/customers/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customers product\" }\r\n ,\"microsoft.billing/billingaccounts/departments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts department\" }\r\n ,\"microsoft.billing/billingaccounts/departments/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts departments billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/departments/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts departments billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/departments/enrollmentaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts departments enrollment account\" }\r\n ,\"microsoft.billing/billingaccounts/enrollmentaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts enrollment account\" }\r\n ,\"microsoft.billing/billingaccounts/enrollmentaccounts/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts enrollment accounts billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/enrollmentaccounts/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts enrollment accounts billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/incentiveschedules\": { \"SingularDisplayName\": \"Incentive Schedule\" }\r\n ,\"microsoft.billing/billingaccounts/incentiveschedules/milestones\": { \"SingularDisplayName\": \"Milestone\" }\r\n ,\"microsoft.billing/billingaccounts/invoices\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice section\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice sections billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice sections product\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice sections transfer\" }\r\n ,\"microsoft.billing/billingaccounts/lineofcredit\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts line of credit\" }\r\n ,\"microsoft.billing/billingaccounts/paymentmethods\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts payment method\" }\r\n ,\"microsoft.billing/billingaccounts/policies\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts policy\" }\r\n ,\"microsoft.billing/billingaccounts/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts product\" }\r\n ,\"microsoft.billing/billingaccounts/reservationorders\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts reservation order\" }\r\n ,\"microsoft.billing/billingaccounts/reservationorders/reservations\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts reservation orders reservation\" }\r\n ,\"microsoft.billing/billingaccounts/savingsplanorders\": { \"SingularDisplayName\": \"Savings plan order\" }\r\n ,\"microsoft.billing/billingaccounts/savingsplanorders/savingsplans\": { \"SingularDisplayName\": \"Savings plan\" }\r\n ,\"microsoft.billing/billingperiods\": { \"SingularDisplayName\": \"Microsoft.Billing billing period\" }\r\n ,\"microsoft.billing/billingproperty\": { \"SingularDisplayName\": \"Microsoft.Billing billing property\" }\r\n ,\"microsoft.billing/billingrequests\": { \"SingularDisplayName\": \"Microsoft.Billing billing request\" }\r\n ,\"microsoft.billing/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing role assignment\" }\r\n ,\"microsoft.billing/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing role definition\" }\r\n ,\"microsoft.billing/enrollmentaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing enrollment account\" }\r\n ,\"microsoft.billing/paymentmethods\": { \"SingularDisplayName\": \"Microsoft.Billing payment method\" }\r\n ,\"microsoft.billing/policies\": { \"SingularDisplayName\": \"Microsoft.Billing policy\" }\r\n ,\"microsoft.billing/promotions\": { \"SingularDisplayName\": \"Microsoft.Billing promotion\" }\r\n ,\"microsoft.billing/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing transfer\" }\r\n ,\"microsoft.billingbenefits/incentiveschedules\": { \"SingularDisplayName\": \"Incentive Schedule\" }\r\n ,\"microsoft.billingbenefits/incentiveschedules/milestones\": { \"SingularDisplayName\": \"Milestone\" }\r\n ,\"microsoft.billingbenefits/maccs\": { \"SingularDisplayName\": \"Microsoft Azure Consumption Commitment\" }\r\n ,\"microsoft.billingbenefits/reservationorderaliases\": { \"SingularDisplayName\": \"Microsoft.BillingBenefits reservation order aliase\" }\r\n ,\"microsoft.billingbenefits/savingsplanorderaliases\": { \"SingularDisplayName\": \"Microsoft.BillingBenefits savings plan order aliase\" }\r\n ,\"microsoft.billingbenefits/savingsplanorders\": { \"SingularDisplayName\": \"Savings plan order\" }\r\n ,\"microsoft.billingbenefits/savingsplanorders/savingsplans\": { \"SingularDisplayName\": \"Savings plan\" }\r\n ,\"microsoft.bing/accounts\": { \"SingularDisplayName\": \"Bing Resource\" }\r\n ,\"microsoft.blockchain/blockchainmembers\": { \"SingularDisplayName\": \"Microsoft.Blockchain blockchain member\" }\r\n ,\"microsoft.blockchain/blockchainmembers/transactionnodes\": { \"SingularDisplayName\": \"Microsoft.Blockchain blockchain members transaction node\" }\r\n ,\"microsoft.blockchaintokens/tokenservices\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token service\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/blockchainnetworks\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services blockchain network\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/groups\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services group\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/groups/accounts\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services groups account\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/tokentemplates\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services token template\" }\r\n ,\"microsoft.bluefin/instances\": { \"SingularDisplayName\": \"Microsoft.Bluefin instance\" }\r\n ,\"microsoft.bluefin/instances/datasets\": { \"SingularDisplayName\": \"Microsoft.Bluefin instances dataset\" }\r\n ,\"microsoft.bluefin/instances/pipelines\": { \"SingularDisplayName\": \"Microsoft.Bluefin instances pipeline\" }\r\n ,\"microsoft.blueprint/blueprintassignments\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprint assignment\" }\r\n ,\"microsoft.blueprint/blueprints\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprint\" }\r\n ,\"microsoft.blueprint/blueprints/artifacts\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprints artifact\" }\r\n ,\"microsoft.blueprint/blueprints/versions\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprints version\" }\r\n ,\"microsoft.botservice/botservices\": { \"SingularDisplayName\": \"Bot Service\" }\r\n ,\"microsoft.cache/redis\": { \"SingularDisplayName\": \"Redis cache\" }\r\n ,\"microsoft.cache/redisenterprise\": { \"SingularDisplayName\": \"Redis Enterprise cluster\" }\r\n ,\"microsoft.cache/redisenterprise/databases\": { \"SingularDisplayName\": \"Redis Enterprise database\" }\r\n ,\"microsoft.capacity/reservationorders\": { \"SingularDisplayName\": \"Reservation order\" }\r\n ,\"microsoft.capacity/reservationorders/reservations\": { \"SingularDisplayName\": \"Reservation\" }\r\n ,\"microsoft.cascade/sites\": { \"SingularDisplayName\": \"Microsoft.Cascade site\" }\r\n ,\"microsoft.cdn/cdnwebapplicationfirewallpolicies\": { \"SingularDisplayName\": \"Content Delivery Network WAF policy\" }\r\n ,\"microsoft.cdn/profiles\": { \"SingularDisplayName\": \"Front Door and CDN profile\" }\r\n ,\"microsoft.cdn/profiles/afdendpoints\": { \"SingularDisplayName\": \"Endpoint\" }\r\n ,\"microsoft.cdn/profiles/afdendpoints/routes\": { \"SingularDisplayName\": \"Route\" }\r\n ,\"microsoft.cdn/profiles/customdomains\": { \"SingularDisplayName\": \"Custom domain\" }\r\n ,\"microsoft.cdn/profiles/endpoints\": { \"SingularDisplayName\": \"CDN endpoint\" }\r\n ,\"microsoft.cdn/profiles/endpoints/customdomains\": { \"SingularDisplayName\": \"CDN custom domain\" }\r\n ,\"microsoft.cdn/profiles/endpoints/origins\": { \"SingularDisplayName\": \"CDN origin\" }\r\n ,\"microsoft.cdn/profiles/origingroups\": { \"SingularDisplayName\": \"Origin group\" }\r\n ,\"microsoft.cdn/profiles/origingroups/origins\": { \"SingularDisplayName\": \"Origin\" }\r\n ,\"microsoft.cdn/profiles/rulesets\": { \"SingularDisplayName\": \"Rule set\" }\r\n ,\"microsoft.cdn/profiles/rulesets/rules\": { \"SingularDisplayName\": \"Rule\" }\r\n ,\"microsoft.cdn/profiles/secrets\": { \"SingularDisplayName\": \"Secret\" }\r\n ,\"microsoft.cdn/profiles/securitypolicies\": { \"SingularDisplayName\": \"Security policy\" }\r\n ,\"microsoft.certificateregistration/certificateorders\": { \"SingularDisplayName\": \"App Service certificate\" }\r\n ,\"microsoft.certify/testsuites\": { \"SingularDisplayName\": \"Microsoft.Certify test suite\" }\r\n ,\"microsoft.certify/validationjobs\": { \"SingularDisplayName\": \"Microsoft.Certify validation job\" }\r\n ,\"microsoft.changeanalysis/profile\": { \"SingularDisplayName\": \"Microsoft.ChangeAnalysis profile\" }\r\n ,\"microsoft.chaos/experiments\": { \"SingularDisplayName\": \"Chaos Experiment\" }\r\n ,\"microsoft.chaos/privateaccesses\": { \"SingularDisplayName\": \"Agent Private Access\" }\r\n ,\"microsoft.chaos/targets\": { \"SingularDisplayName\": \"Microsoft.Chaos target\" }\r\n ,\"microsoft.chaos/targets/capabilities\": { \"SingularDisplayName\": \"Microsoft.Chaos targets capability\" }\r\n ,\"microsoft.classiccompute/domainnames\": { \"SingularDisplayName\": \"Cloud service (classic)\" }\r\n ,\"microsoft.classiccompute/domainnames/slots/roles\": { \"SingularDisplayName\": \"Cloud service role (classic)\" }\r\n ,\"microsoft.classiccompute/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine (classic)\" }\r\n ,\"microsoft.classicnetwork/networksecuritygroups\": { \"SingularDisplayName\": \"Network security group (classic)\" }\r\n ,\"microsoft.classicnetwork/reservedips\": { \"SingularDisplayName\": \"Reserved IP address (classic)\" }\r\n ,\"microsoft.classicnetwork/virtualnetworks\": { \"SingularDisplayName\": \"Virtual network (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts\": { \"SingularDisplayName\": \"Storage account (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts/disks\": { \"SingularDisplayName\": \"Disk (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts/osimages\": { \"SingularDisplayName\": \"OS image (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts/vmimages\": { \"SingularDisplayName\": \"VM image (classic)\" }\r\n ,\"microsoft.cleanroom/cleanrooms\": { \"SingularDisplayName\": \"Microsoft.CleanRoom cleanroom\" }\r\n ,\"microsoft.cleanroom/microservices\": { \"SingularDisplayName\": \"Microsoft.CleanRoom microservice\" }\r\n ,\"microsoft.cloud/hubs\": { \"SingularDisplayName\": \"FinOps hub\" }\r\n ,\"microsoft.clouddeviceplatform/delegatedidentities\": { \"SingularDisplayName\": \"Microsoft.CloudDevicePlatform delegated identity\" }\r\n ,\"microsoft.cloudhealth/healthmodels\": { \"SingularDisplayName\": \"Health Model\" }\r\n ,\"microsoft.cloudtest/accounts\": { \"SingularDisplayName\": \"CloudTest Account\" }\r\n ,\"microsoft.cloudtest/buildcaches\": { \"SingularDisplayName\": \"1ES Build Cache\" }\r\n ,\"microsoft.cloudtest/hostedpools\": { \"SingularDisplayName\": \"1ES Hosted Pool\" }\r\n ,\"microsoft.cloudtest/images\": { \"SingularDisplayName\": \"1ES Image\" }\r\n ,\"microsoft.cloudtest/pools\": { \"SingularDisplayName\": \"CloudTest Pool\" }\r\n ,\"microsoft.clusterstor/nodes\": { \"SingularDisplayName\": \"ClusterStor\" }\r\n ,\"microsoft.codesigning/codesigningaccounts\": { \"SingularDisplayName\": \"Trusted Signing Account\" }\r\n ,\"microsoft.codespaces/plans\": { \"SingularDisplayName\": \"Microsoft.Codespaces plan\" }\r\n ,\"microsoft.cognitiveservices/accounts\": { \"SingularDisplayName\": \"Azure AI services\" }\r\n ,\"microsoft.cognitiveservices/commitmentplans\": { \"SingularDisplayName\": \"Microsoft.CognitiveServices commitment plan\" }\r\n ,\"microsoft.cognitiveservices/commitmentplans/accountassociations\": { \"SingularDisplayName\": \"Microsoft.CognitiveServices commitment plans account association\" }\r\n ,\"microsoft.communication/communicationservices\": { \"SingularDisplayName\": \"Communication Service\" }\r\n ,\"microsoft.communication/emailservices\": { \"SingularDisplayName\": \"Email Communication Service\" }\r\n ,\"microsoft.communication/emailservices/domains\": { \"SingularDisplayName\": \"Email Communication Services Domain\" }\r\n ,\"microsoft.community/communitytrainings\": { \"SingularDisplayName\": \"Community Training\" }\r\n ,\"microsoft.compositesolutions/compositesolutiondefinitions\": { \"SingularDisplayName\": \"Microsoft.CompositeSolutions composite solution definition\" }\r\n ,\"microsoft.compositesolutions/compositesolutions\": { \"SingularDisplayName\": \"Microsoft.CompositeSolutions composite solution\" }\r\n ,\"microsoft.compute/availabilitysets\": { \"SingularDisplayName\": \"Availability set\" }\r\n ,\"microsoft.compute/capacityreservationgroups\": { \"SingularDisplayName\": \"Capacity Reservation Group\" }\r\n ,\"microsoft.compute/capacityreservationgroups/capacityreservations\": { \"SingularDisplayName\": \"Capacity reservation\" }\r\n ,\"microsoft.compute/capacityreservationgroupscomputehub\": { \"SingularDisplayName\": \"Capacity Reservation Group\" }\r\n ,\"microsoft.compute/cloudservices\": { \"SingularDisplayName\": \"Cloud service (extended support)\" }\r\n ,\"microsoft.compute/computefleetinstances\": { \"SingularDisplayName\": \"Instance\" }\r\n ,\"microsoft.compute/diskaccesses\": { \"SingularDisplayName\": \"Disk Access\" }\r\n ,\"microsoft.compute/diskencryptionsets\": { \"SingularDisplayName\": \"Disk Encryption Set\" }\r\n ,\"microsoft.compute/disks\": { \"SingularDisplayName\": \"Disk\" }\r\n ,\"microsoft.compute/galleries\": { \"SingularDisplayName\": \"Azure compute gallery\" }\r\n ,\"microsoft.compute/galleries/applications\": { \"SingularDisplayName\": \"VM application definition\" }\r\n ,\"microsoft.compute/galleries/applications/versions\": { \"SingularDisplayName\": \"VM application version\" }\r\n ,\"microsoft.compute/galleries/images\": { \"SingularDisplayName\": \"VM image definition\" }\r\n ,\"microsoft.compute/galleries/images/versions\": { \"SingularDisplayName\": \"VM image version\" }\r\n ,\"microsoft.compute/galleries/imagescomputehub\": { \"SingularDisplayName\": \"VM image definition\" }\r\n ,\"microsoft.compute/hostgroups\": { \"SingularDisplayName\": \"Host group\" }\r\n ,\"microsoft.compute/hostgroups/hosts\": { \"SingularDisplayName\": \"Host\" }\r\n ,\"microsoft.compute/hostgroupscomputehub\": { \"SingularDisplayName\": \"Host group\" }\r\n ,\"microsoft.compute/images\": { \"SingularDisplayName\": \"Image\" }\r\n ,\"microsoft.compute/imagescomputehub\": { \"SingularDisplayName\": \"Image\" }\r\n ,\"microsoft.compute/locations/communitygalleries/images\": { \"SingularDisplayName\": \"Community image\" }\r\n ,\"microsoft.compute/locations/communitygalleries/imagescomputehub\": { \"SingularDisplayName\": \"Community image\" }\r\n ,\"microsoft.compute/proximityplacementgroups\": { \"SingularDisplayName\": \"Proximity placement group\" }\r\n ,\"microsoft.compute/proximityplacementgroupscomputehub\": { \"SingularDisplayName\": \"Proximity placement group\" }\r\n ,\"microsoft.compute/restorepointcollections\": { \"SingularDisplayName\": \"Restore Point Collection\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#2": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_2(id: string) {\r\n dynamic({\r\n \"microsoft.compute/restorepointcollections/restorepoints\": { \"SingularDisplayName\": \"Restore Point\" }\r\n ,\"microsoft.compute/snapshots\": { \"SingularDisplayName\": \"Snapshot\" }\r\n ,\"microsoft.compute/sshpublickeys\": { \"SingularDisplayName\": \"SSH key\" }\r\n ,\"microsoft.compute/standbypoolinstance\": { \"SingularDisplayName\": \"Standby pool\" }\r\n ,\"microsoft.compute/virtualmachinecomputehub\": { \"SingularDisplayName\": \"Virtual machine\" }\r\n ,\"microsoft.compute/virtualmachineflexinstances\": { \"SingularDisplayName\": \"Instance\" }\r\n ,\"microsoft.compute/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine\" }\r\n ,\"microsoft.compute/virtualmachines/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.compute/virtualmachinescalesets\": { \"SingularDisplayName\": \"Virtual machine scale set\" }\r\n ,\"microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.compute/virtualmachinescalesets/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine scale set instance\" }\r\n ,\"microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses\": { \"SingularDisplayName\": \"Public IP address\" }\r\n ,\"microsoft.computehub/advisorcost\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisoroperationalexcellence\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisorperformance\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisorreliability\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisorsecurity\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/all\": { \"SingularDisplayName\": \"All resources\" }\r\n ,\"microsoft.computehub/backup\": { \"SingularDisplayName\": \"Backup job\" }\r\n ,\"microsoft.computehub/computehubmain\": { \"SingularDisplayName\": \"Compute infrastructure\" }\r\n ,\"microsoft.computehub/healthevents\": { \"SingularDisplayName\": \"Health events\" }\r\n ,\"microsoft.computehub/linuxostype\": { \"SingularDisplayName\": \"Linux OS\" }\r\n ,\"microsoft.computehub/microsoftdefenderfreetrialsubscription\": { \"SingularDisplayName\": \"Microsoft defender\" }\r\n ,\"microsoft.computehub/microsoftdefenderstandardsubscription\": { \"SingularDisplayName\": \"Microsoft defender\" }\r\n ,\"microsoft.computehub/outages\": { \"SingularDisplayName\": \"Outages\" }\r\n ,\"microsoft.computehub/powerstatedeallocated\": { \"SingularDisplayName\": \"Power states\" }\r\n ,\"microsoft.computehub/powerstaterunning\": { \"SingularDisplayName\": \"Power states\" }\r\n ,\"microsoft.computehub/powerstatestopped\": { \"SingularDisplayName\": \"Power states\" }\r\n ,\"microsoft.computehub/provisioningstatefailedresources\": { \"SingularDisplayName\": \"Provisioning states\" }\r\n ,\"microsoft.computehub/provisioningstatesucceededresources\": { \"SingularDisplayName\": \"Provisioning states\" }\r\n ,\"microsoft.computehub/windowsostype\": { \"SingularDisplayName\": \"Windows OS\" }\r\n ,\"microsoft.computeschedule/autoactions\": { \"SingularDisplayName\": \"Microsoft.ComputeSchedule auto action\" }\r\n ,\"microsoft.computeschedule/autoactions/occurrences\": { \"SingularDisplayName\": \"Microsoft.ComputeSchedule auto actions occurrence\" }\r\n ,\"microsoft.confidentialledger/ledgers\": { \"SingularDisplayName\": \"Confidential Ledger\" }\r\n ,\"microsoft.confidentialledger/managedccfs\": { \"SingularDisplayName\": \"Managed CCF App\" }\r\n ,\"microsoft.confluent/agreements\": { \"SingularDisplayName\": \"Microsoft.Confluent agreement\" }\r\n ,\"microsoft.confluent/organizations\": { \"SingularDisplayName\": \"Confluent organization\" }\r\n ,\"microsoft.connectedcache/cachenodes\": { \"SingularDisplayName\": \"Connected Cache for ISP (early preview)\" }\r\n ,\"microsoft.connectedcache/enterprisecustomers\": { \"SingularDisplayName\": \"Connected Cache for Enterprise & Education (early preview)\" }\r\n ,\"microsoft.connectedcache/enterprisemcccustomers\": { \"SingularDisplayName\": \"Connected Cache for Enterprise & Education\" }\r\n ,\"microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes\": { \"SingularDisplayName\": \"MCC CacheNode for Enterprise\" }\r\n ,\"microsoft.connectedcache/ispcustomers\": { \"SingularDisplayName\": \"Connected Cache for ISP\" }\r\n ,\"microsoft.connectedcredentials/credentials\": { \"SingularDisplayName\": \"Microsoft.ConnectedCredentials credential\" }\r\n ,\"microsoft.connectedvehicle/platformaccounts\": { \"SingularDisplayName\": \"Microsoft.ConnectedVehicle platform account\" }\r\n ,\"microsoft.connectedvmwarevsphere/clusters\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere cluster\" }\r\n ,\"microsoft.connectedvmwarevsphere/datastores\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere datastore\" }\r\n ,\"microsoft.connectedvmwarevsphere/hosts\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere host\" }\r\n ,\"microsoft.connectedvmwarevsphere/resourcepools\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere resource pool\" }\r\n ,\"microsoft.connectedvmwarevsphere/vcenters\": { \"SingularDisplayName\": \"VMware vCenter\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachineinstances\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine instance\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachineinstances/guestagents\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine instances guest agent\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachineinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine instances hybrid identity metadata\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachines\": { \"SingularDisplayName\": \"VMware + AVS virtual machine\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachines/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachinetemplates\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine template\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual network\" }\r\n ,\"microsoft.consumption/budgets\": { \"SingularDisplayName\": \"Microsoft.Consumption budget\" }\r\n ,\"microsoft.consumption/credits\": { \"SingularDisplayName\": \"Microsoft.Consumption credit\" }\r\n ,\"microsoft.consumption/pricesheets\": { \"SingularDisplayName\": \"Microsoft.Consumption pricesheet\" }\r\n ,\"microsoft.containerinstance/containergroupprofiles\": { \"SingularDisplayName\": \"Microsoft.ContainerInstance container group profile\" }\r\n ,\"microsoft.containerinstance/containergroupprofiles/revisions\": { \"SingularDisplayName\": \"Microsoft.ContainerInstance container group profiles revision\" }\r\n ,\"microsoft.containerinstance/containergroups\": { \"SingularDisplayName\": \"Container instances\" }\r\n ,\"microsoft.containerinstance/ngroups\": { \"SingularDisplayName\": \"Microsoft.ContainerInstance ngroup\" }\r\n ,\"microsoft.containerregistry/registries\": { \"SingularDisplayName\": \"Container registry\" }\r\n ,\"microsoft.containerregistry/registries/replications\": { \"SingularDisplayName\": \"Container registry replication\" }\r\n ,\"microsoft.containerregistry/registries/scopemaps\": { \"SingularDisplayName\": \"Container registry scope map\" }\r\n ,\"microsoft.containerregistry/registries/tokens\": { \"SingularDisplayName\": \"Container registry token\" }\r\n ,\"microsoft.containerregistry/registries/webhooks\": { \"SingularDisplayName\": \"Container registry webhook\" }\r\n ,\"microsoft.containerservice/fleets\": { \"SingularDisplayName\": \"Kubernetes fleet manager\" }\r\n ,\"microsoft.containerservice/managedclusters\": { \"SingularDisplayName\": \"Kubernetes service\" }\r\n ,\"microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions\": { \"SingularDisplayName\": \"Kubernetes service extension\" }\r\n ,\"microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations\": { \"SingularDisplayName\": \"GitOps configuration\" }\r\n ,\"microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces\": { \"SingularDisplayName\": \"Kubernetes namespace\" }\r\n ,\"microsoft.containerservice/managedclustersnapshots\": { \"SingularDisplayName\": \"Microsoft.ContainerService managedclustersnapshot\" }\r\n ,\"microsoft.containerservice/snapshots\": { \"SingularDisplayName\": \"Microsoft.ContainerService snapshot\" }\r\n ,\"microsoft.containerstorage/pools\": { \"SingularDisplayName\": \"Container storage\" }\r\n ,\"microsoft.contoso/clusters\": { \"SingularDisplayName\": \"Microsoft.Contoso cluster\" }\r\n ,\"microsoft.contoso/employees\": { \"SingularDisplayName\": \"Microsoft.Contoso employee\" }\r\n ,\"microsoft.contoso/employees/desks\": { \"SingularDisplayName\": \"Microsoft.Contoso employees desk\" }\r\n ,\"microsoft.contoso/employees/nestedresourcetype\": { \"SingularDisplayName\": \"Microsoft.Contoso employees nested resource type\" }\r\n ,\"microsoft.contoso/employees/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Contoso employees private endpoint connection\" }\r\n ,\"microsoft.contoso/employees/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Contoso employees private link resource\" }\r\n ,\"microsoft.contoso/extensionresourcetype\": { \"SingularDisplayName\": \"Microsoft.Contoso extension resource type\" }\r\n ,\"microsoft.costmanagement/alerts\": { \"SingularDisplayName\": \"Microsoft.CostManagement alert\" }\r\n ,\"microsoft.costmanagement/budgets\": { \"SingularDisplayName\": \"Microsoft.CostManagement budget\" }\r\n ,\"microsoft.costmanagement/cloudconnectors\": { \"SingularDisplayName\": \"Microsoft.CostManagement cloud connector\" }\r\n ,\"microsoft.costmanagement/connectors\": { \"SingularDisplayName\": \"Microsoft.CostManagement connector\" }\r\n ,\"microsoft.costmanagement/costallocationrules\": { \"SingularDisplayName\": \"Microsoft.CostManagement cost allocation rule\" }\r\n ,\"microsoft.costmanagement/costdetailsoperationresults\": { \"SingularDisplayName\": \"Microsoft.CostManagement cost details operation result\" }\r\n ,\"microsoft.costmanagement/exports\": { \"SingularDisplayName\": \"Microsoft.CostManagement export\" }\r\n ,\"microsoft.costmanagement/externalbillingaccounts\": { \"SingularDisplayName\": \"Microsoft.CostManagement external billing account\" }\r\n ,\"microsoft.costmanagement/externalsubscriptions\": { \"SingularDisplayName\": \"Microsoft.CostManagement external subscription\" }\r\n ,\"microsoft.costmanagement/markuprules\": { \"SingularDisplayName\": \"Microsoft.CostManagement markup rule\" }\r\n ,\"microsoft.costmanagement/operationstatus\": { \"SingularDisplayName\": \"Microsoft.CostManagement operation statu\" }\r\n ,\"microsoft.costmanagement/reportconfigs\": { \"SingularDisplayName\": \"Microsoft.CostManagement reportconfig\" }\r\n ,\"microsoft.costmanagement/reports\": { \"SingularDisplayName\": \"Microsoft.CostManagement report\" }\r\n ,\"microsoft.costmanagement/scheduledactions\": { \"SingularDisplayName\": \"Microsoft.CostManagement scheduled action\" }\r\n ,\"microsoft.costmanagement/settings\": { \"SingularDisplayName\": \"Microsoft.CostManagement setting\" }\r\n ,\"microsoft.costmanagement/views\": { \"SingularDisplayName\": \"Microsoft.CostManagement view\" }\r\n ,\"microsoft.customerlockbox/requests\": { \"SingularDisplayName\": \"Microsoft.CustomerLockbox request\" }\r\n ,\"microsoft.customerlockbox/tenantoptedin\": { \"SingularDisplayName\": \"Microsoft.CustomerLockbox tenant opted in\" }\r\n ,\"microsoft.customproviders/associations\": { \"SingularDisplayName\": \"Microsoft.CustomProviders association\" }\r\n ,\"microsoft.customproviders/resourceproviders\": { \"SingularDisplayName\": \"Microsoft.CustomProviders resource provider\" }\r\n ,\"microsoft.dashboard/grafana\": { \"SingularDisplayName\": \"Azure Managed Grafana\" }\r\n ,\"microsoft.dataaccelerator/indexclusters\": { \"SingularDisplayName\": \"Microsoft.DataAccelerator index cluster\" }\r\n ,\"microsoft.databasefleetmanager/fleets\": { \"SingularDisplayName\": \"Database fleet manager\" }\r\n ,\"microsoft.databasefleetmanager/fleets/fleetspaces\": { \"SingularDisplayName\": \"Fleetspaces\" }\r\n ,\"microsoft.databasefleetmanager/fleets/fleetspaces/databases\": { \"SingularDisplayName\": \"Fleet Managed Database\" }\r\n ,\"microsoft.databasefleetmanager/fleets/tiers\": { \"SingularDisplayName\": \"tier\" }\r\n ,\"microsoft.databasewatcher/watchers\": { \"SingularDisplayName\": \"Database watcher\" }\r\n ,\"microsoft.databox/jobs\": { \"SingularDisplayName\": \"Azure Data Box\" }\r\n ,\"microsoft.databoxedge/databoxedgedevices\": { \"SingularDisplayName\": \"Azure Stack Edge / Data Box Gateway\" }\r\n ,\"microsoft.databricks/accessconnectors\": { \"SingularDisplayName\": \"Access Connector for Azure Databricks\" }\r\n ,\"microsoft.databricks/workspaces\": { \"SingularDisplayName\": \"Azure Databricks Service\" }\r\n ,\"microsoft.datacatalog/catalogs\": { \"SingularDisplayName\": \"Data Catalog\" }\r\n ,\"microsoft.datacollaboration/workspaces\": { \"SingularDisplayName\": \"Project CI\" }\r\n ,\"microsoft.datadog/agreements\": { \"SingularDisplayName\": \"Microsoft.Datadog agreement\" }\r\n ,\"microsoft.datadog/monitors\": { \"SingularDisplayName\": \"Datadog\" }\r\n ,\"microsoft.datadog/subscriptionstatuses\": { \"SingularDisplayName\": \"Microsoft.Datadog subscription statuse\" }\r\n ,\"microsoft.datafactory/datafactories\": { \"SingularDisplayName\": \"Data factory\" }\r\n ,\"microsoft.datafactory/factories\": { \"SingularDisplayName\": \"Data factory (V2)\" }\r\n ,\"microsoft.datafactory/factories/pipelines\": { \"SingularDisplayName\": \"Data Factory pipeline\" }\r\n ,\"microsoft.datafactory/factories/triggers\": { \"SingularDisplayName\": \"Data Factory trigger\" }\r\n ,\"microsoft.datalakeanalytics/accounts\": { \"SingularDisplayName\": \"Data Lake Analytics account\" }\r\n ,\"microsoft.datalakestore/accounts\": { \"SingularDisplayName\": \"Data Lake Storage Gen1\" }\r\n ,\"microsoft.datamigration/databasemigrations\": { \"SingularDisplayName\": \"Microsoft.DataMigration database migration\" }\r\n ,\"microsoft.datamigration/migrationservices\": { \"SingularDisplayName\": \"Microsoft.DataMigration migration service\" }\r\n ,\"microsoft.datamigration/services\": { \"SingularDisplayName\": \"Azure Database Migration Service (classic)\" }\r\n ,\"microsoft.datamigration/services/projects\": { \"SingularDisplayName\": \"Azure Database Migration Project\" }\r\n ,\"microsoft.datamigration/sqlmigrationservices\": { \"SingularDisplayName\": \"Azure Database Migration Service\" }\r\n ,\"microsoft.dataprotection/backupvaults\": { \"SingularDisplayName\": \"Backup vault\" }\r\n ,\"microsoft.dataprotection/resourceguards\": { \"SingularDisplayName\": \"Resource Guard\" }\r\n ,\"microsoft.datareplication/replicationfabrics\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabric\" }\r\n ,\"microsoft.datareplication/replicationfabrics/fabricagents\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabrics fabric agent\" }\r\n ,\"microsoft.datareplication/replicationfabrics/fabricagents/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabrics fabric agents operation\" }\r\n ,\"microsoft.datareplication/replicationfabrics/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabrics operation\" }\r\n ,\"microsoft.datareplication/replicationvaults\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vault\" }\r\n ,\"microsoft.datareplication/replicationvaults/alertsettings\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults alert setting\" }\r\n ,\"microsoft.datareplication/replicationvaults/events\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults event\" }\r\n ,\"microsoft.datareplication/replicationvaults/jobs\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults job\" }\r\n ,\"microsoft.datareplication/replicationvaults/jobs/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults jobs operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/protecteditems\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults protected item\" }\r\n ,\"microsoft.datareplication/replicationvaults/protecteditems/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults protected items operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/protecteditems/recoverypoints\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults protected items recovery point\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationextensions\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication extension\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationextensions/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication extensions operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationpolicies\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication policy\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationpolicies/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication policies operation\" }\r\n ,\"microsoft.datashare/accounts\": { \"SingularDisplayName\": \"Data Share\" }\r\n ,\"microsoft.dbformariadb/servers\": { \"SingularDisplayName\": \"Azure Database for MariaDB server\" }\r\n ,\"microsoft.dbformysql/flexibleservers\": { \"SingularDisplayName\": \"Azure Database for MySQL flexible server\" }\r\n ,\"microsoft.dbformysql/servers\": { \"SingularDisplayName\": \"MySQL server\" }\r\n ,\"microsoft.dbforpostgresql/flexibleservers\": { \"SingularDisplayName\": \"Azure Database for PostgreSQL - Flexible Server\" }\r\n ,\"microsoft.dbforpostgresql/servergroupsv2\": { \"SingularDisplayName\": \"Azure Cosmos DB for PostgreSQL Cluster\" }\r\n ,\"microsoft.dbforpostgresql/servers\": { \"SingularDisplayName\": \"PostgreSQL server\" }\r\n ,\"microsoft.delegatednetwork/controller\": { \"SingularDisplayName\": \"Microsoft.DelegatedNetwork controller\" }\r\n ,\"microsoft.delegatednetwork/delegatedsubnets\": { \"SingularDisplayName\": \"Microsoft.DelegatedNetwork delegated subnet\" }\r\n ,\"microsoft.delegatednetwork/orchestrators\": { \"SingularDisplayName\": \"Microsoft.DelegatedNetwork orchestrator\" }\r\n ,\"microsoft.dependencymap/maps\": { \"SingularDisplayName\": \"Microsoft.DependencyMap map\" }\r\n ,\"microsoft.dependencymap/maps/discoverysources\": { \"SingularDisplayName\": \"Microsoft.DependencyMap maps discovery source\" }\r\n ,\"microsoft.deploymentmanager/artifactsources\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager artifact source\" }\r\n ,\"microsoft.deploymentmanager/rollouts\": { \"SingularDisplayName\": \"Rollout\" }\r\n ,\"microsoft.deploymentmanager/servicetopologies\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager service topology\" }\r\n ,\"microsoft.deploymentmanager/servicetopologies/services\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager service topologies service\" }\r\n ,\"microsoft.deploymentmanager/servicetopologies/services/serviceunits\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager service topologies services service unit\" }\r\n ,\"microsoft.deploymentmanager/steps\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager step\" }\r\n ,\"microsoft.desktopvirtualization/appattachpackages\": { \"SingularDisplayName\": \"App attach package\" }\r\n ,\"microsoft.desktopvirtualization/applicationgroups\": { \"SingularDisplayName\": \"Application group\" }\r\n ,\"microsoft.desktopvirtualization/hostpools\": { \"SingularDisplayName\": \"Host pool\" }\r\n ,\"microsoft.desktopvirtualization/scalingplans\": { \"SingularDisplayName\": \"Scaling plan\" }\r\n ,\"microsoft.desktopvirtualization/workspaces\": { \"SingularDisplayName\": \"Workspace\" }\r\n ,\"microsoft.devai/instances\": { \"SingularDisplayName\": \"Microsoft.DevAI instance\" }\r\n ,\"microsoft.devai/instances/experiments\": { \"SingularDisplayName\": \"Microsoft.DevAI instances experiment\" }\r\n ,\"microsoft.devai/instances/sandboxes\": { \"SingularDisplayName\": \"Microsoft.DevAI instances sandbox\" }\r\n ,\"microsoft.devai/instances/sandboxes/experiments\": { \"SingularDisplayName\": \"Microsoft.DevAI instances sandboxes experiment\" }\r\n ,\"microsoft.devcenter/devcenters\": { \"SingularDisplayName\": \"Dev center\" }\r\n ,\"microsoft.devcenter/devcenters/devboxdefinitions\": { \"SingularDisplayName\": \"Dev Box definition\" }\r\n ,\"microsoft.devcenter/networkconnections\": { \"SingularDisplayName\": \"Network connection\" }\r\n ,\"microsoft.devcenter/plans\": { \"SingularDisplayName\": \"Dev center plan\" }\r\n ,\"microsoft.devcenter/projects\": { \"SingularDisplayName\": \"Project\" }\r\n ,\"microsoft.devcenter/projects/pools\": { \"SingularDisplayName\": \"Pool\" }\r\n ,\"microsoft.developmentwindows365/developmentcloudpcdelegatedmsis\": { \"SingularDisplayName\": \"Microsoft.DevelopmentWindows365 development cloud pc delegated msi\" }\r\n ,\"microsoft.devhub/iacprofiles\": { \"SingularDisplayName\": \"Infrastructure as Code Automation\" }\r\n ,\"microsoft.devhub/workflows\": { \"SingularDisplayName\": \"Microsoft.DevHub workflow\" }\r\n ,\"microsoft.deviceonboarding/onboardingservices\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding onboarding service\" }\r\n ,\"microsoft.deviceonboarding/onboardingservices/policies\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding onboarding services policy\" }\r\n ,\"microsoft.deviceregistry/assetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/assets\": { \"SingularDisplayName\": \"IoT Asset\" }\r\n ,\"microsoft.deviceregistry/billingcontainers\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry billing container\" }\r\n ,\"microsoft.deviceregistry/devices\": { \"SingularDisplayName\": \"IoT Device\" }\r\n ,\"microsoft.deviceregistry/discoveredassetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry discovered asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/discoveredassets\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry discovered asset\" }\r\n ,\"microsoft.deviceregistry/schemaregistries\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry schema registry\" }\r\n ,\"microsoft.deviceregistry/schemaregistries/schemas\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry schema registries schema\" }\r\n ,\"microsoft.deviceregistry/schemaregistries/schemas/schemaversions\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry schema registries schemas schema version\" }\r\n ,\"microsoft.devices/iothubs\": { \"SingularDisplayName\": \"IoT hub\" }\r\n ,\"microsoft.devices/provisioningservices\": { \"SingularDisplayName\": \"Azure IoT Hub Device Provisioning Service (DPS)\" }\r\n ,\"microsoft.deviceupdate/accounts\": { \"SingularDisplayName\": \"Device Update for IoT Hub\" }\r\n ,\"microsoft.deviceupdate/updateaccounts\": { \"SingularDisplayName\": \"Device Update Account\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/activedeployments\": { \"SingularDisplayName\": \"Device Update Active Deployment\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/agents\": { \"SingularDisplayName\": \"Device Update Agent\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/deployments\": { \"SingularDisplayName\": \"Device Update Deployment\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/deviceclasses\": { \"SingularDisplayName\": \"Device Update Device Class\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/updates\": { \"SingularDisplayName\": \"Device Update\" }\r\n ,\"microsoft.devops/pipelines\": { \"SingularDisplayName\": \"Microsoft.DevOps pipeline\" }\r\n ,\"microsoft.devopsinfrastructure/pools\": { \"SingularDisplayName\": \"Managed DevOps Pool\" }\r\n ,\"microsoft.devspaces/controllers\": { \"SingularDisplayName\": \"Microsoft.DevSpaces controller\" }\r\n ,\"microsoft.devtestlab/labs\": { \"SingularDisplayName\": \"DevTest lab\" }\r\n ,\"microsoft.devtestlab/labs/virtualmachines\": { \"SingularDisplayName\": \"DevTest Lab virtual machine\" }\r\n ,\"microsoft.devtestlab/schedules\": { \"SingularDisplayName\": \"Microsoft.DevTestLab schedule\" }\r\n ,\"microsoft.devtunnels/tunnelplans\": { \"SingularDisplayName\": \"Dev Tunnels Domain\" }\r\n ,\"microsoft.diagnostics/apollo\": { \"SingularDisplayName\": \"Microsoft.Diagnostics apollo\" }\r\n ,\"microsoft.digitaltwins/digitaltwinsinstances\": { \"SingularDisplayName\": \"Azure Digital Twins\" }\r\n ,\"microsoft.documentdb/cassandraclusters\": { \"SingularDisplayName\": \"Azure Managed Instance for Apache Cassandra\" }\r\n ,\"microsoft.documentdb/databaseaccounts\": { \"SingularDisplayName\": \"Cosmos DB account\" }\r\n ,\"microsoft.documentdb/mongoclusters\": { \"SingularDisplayName\": \"Azure Cosmos DB for MongoDB (vCore)\" }\r\n ,\"microsoft.documentdb/throughputpools\": { \"SingularDisplayName\": \"Microsoft.DocumentDB throughput pool\" }\r\n ,\"microsoft.documentdb/throughputpools/throughputpoolaccounts\": { \"SingularDisplayName\": \"Microsoft.DocumentDB throughput pools throughput pool account\" }\r\n ,\"microsoft.domainregistration/domains\": { \"SingularDisplayName\": \"App Service Domain\" }\r\n ,\"microsoft.domainregistration/topleveldomains\": { \"SingularDisplayName\": \"Microsoft.DomainRegistration top level domain\" }\r\n ,\"microsoft.durabletask/namespaces\": { \"SingularDisplayName\": \"Durable Task Scheduler\" }\r\n ,\"microsoft.durabletask/namespaces/taskhubs\": { \"SingularDisplayName\": \"Task Hub\" }\r\n ,\"microsoft.dynamics365fraudprotection/instances\": { \"SingularDisplayName\": \"Microsoft.Dynamics365FraudProtection instance\" }\r\n ,\"microsoft.easm/workspaces\": { \"SingularDisplayName\": \"Microsoft Defender EASM\" }\r\n ,\"microsoft.edge/configurations\": { \"SingularDisplayName\": \"Site configuration\" }\r\n ,\"microsoft.edge/configurations/arcgatewayconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations arc gateway configuration\" }\r\n ,\"microsoft.edge/configurations/connectivityconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations connectivity configuration\" }\r\n ,\"microsoft.edge/configurations/dynamicconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations dynamic configuration\" }\r\n ,\"microsoft.edge/configurations/dynamicconfigurations/versions\": { \"SingularDisplayName\": \"Microsoft.Edge configurations dynamic configurations version\" }\r\n ,\"microsoft.edge/configurations/networkconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations network configuration\" }\r\n ,\"microsoft.edge/configurations/securityconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations security configuration\" }\r\n ,\"microsoft.edge/configurations/timeserverconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations time server configuration\" }\r\n ,\"microsoft.edge/connectivitystatuses\": { \"SingularDisplayName\": \"Microsoft.Edge connectivity statuse\" }\r\n ,\"microsoft.edge/siteawareresourcetypes\": { \"SingularDisplayName\": \"Microsoft.Edge site aware resource type\" }\r\n ,\"microsoft.edge/sites\": { \"SingularDisplayName\": \"Site manager - Azure Arc\" }\r\n ,\"microsoft.edge/updates\": { \"SingularDisplayName\": \"Microsoft.Edge update\" }\r\n ,\"microsoft.edgemarketplace/offers\": { \"SingularDisplayName\": \"Microsoft.EdgeMarketplace offer\" }\r\n ,\"microsoft.edgemarketplace/publishers\": { \"SingularDisplayName\": \"Microsoft.EdgeMarketplace publisher\" }\r\n ,\"microsoft.edgeorder/addresses\": { \"SingularDisplayName\": \"Azure Edge Hardware Center Address\" }\r\n ,\"microsoft.edgeorder/bootstrapconfigurations\": { \"SingularDisplayName\": \"Site Bootstrap Key\" }\r\n ,\"microsoft.edgeorder/orderitems\": { \"SingularDisplayName\": \"Azure Edge Hardware Center\" }\r\n ,\"microsoft.edgeorder/virtual_orderitems\": { \"SingularDisplayName\": \"Device\" }\r\n ,\"microsoft.edgezones/extendedzones\": { \"SingularDisplayName\": \"Microsoft.EdgeZones extended zone\" }\r\n ,\"microsoft.education/grants\": { \"SingularDisplayName\": \"Microsoft.Education grant\" }\r\n ,\"microsoft.education/labs\": { \"SingularDisplayName\": \"Microsoft.Education lab\" }\r\n ,\"microsoft.education/labs/joinrequests\": { \"SingularDisplayName\": \"Microsoft.Education labs join request\" }\r\n ,\"microsoft.education/labs/students\": { \"SingularDisplayName\": \"Microsoft.Education labs student\" }\r\n ,\"microsoft.education/studentlabs\": { \"SingularDisplayName\": \"Microsoft.Education student lab\" }\r\n ,\"microsoft.elastic/monitors\": { \"SingularDisplayName\": \"Elastic\" }\r\n ,\"microsoft.elasticsan/elasticsans\": { \"SingularDisplayName\": \"Elastic SAN\" }\r\n ,\"microsoft.energydataplatform/energyservices\": { \"SingularDisplayName\": \"Microsoft.EnergyDataPlatform energy service\" }\r\n ,\"microsoft.enterpriseknowledgegraph/services\": { \"SingularDisplayName\": \"Microsoft.EnterpriseKnowledgeGraph service\" }\r\n ,\"microsoft.enterprisesupport/enterprisesupports\": { \"SingularDisplayName\": \"Microsoft.EnterpriseSupport enterprise support\" }\r\n ,\"microsoft.eventgrid/domains\": { \"SingularDisplayName\": \"Event Grid Domain\" }\r\n ,\"microsoft.eventgrid/domains/topics\": { \"SingularDisplayName\": \"Event Grid Domain Topic\" }\r\n ,\"microsoft.eventgrid/eventsubscriptions\": { \"SingularDisplayName\": \"Microsoft.EventGrid event subscription\" }\r\n ,\"microsoft.eventgrid/extensiontopics\": { \"SingularDisplayName\": \"Event Grid extension topic\" }\r\n ,\"microsoft.eventgrid/namespaces\": { \"SingularDisplayName\": \"Event Grid Namespace\" }\r\n ,\"microsoft.eventgrid/namespaces/topics\": { \"SingularDisplayName\": \"Event Grid Namespace Topic\" }\r\n ,\"microsoft.eventgrid/namespaces/topics/eventsubscriptions\": { \"SingularDisplayName\": \"Event Subscription\" }\r\n ,\"microsoft.eventgrid/namespaces/topicspaces\": { \"SingularDisplayName\": \"Event Grid Topic Space\" }\r\n ,\"microsoft.eventgrid/partnerconfigurations\": { \"SingularDisplayName\": \"Event Grid Partner Configuration\" }\r\n ,\"microsoft.eventgrid/partnerdestinations\": { \"SingularDisplayName\": \"Event Grid Partner Destination\" }\r\n ,\"microsoft.eventgrid/partnernamespaces\": { \"SingularDisplayName\": \"Event Grid Partner Namespace\" }\r\n ,\"microsoft.eventgrid/partnernamespaces/channels\": { \"SingularDisplayName\": \"Event Grid Channel\" }\r\n ,\"microsoft.eventgrid/partnerregistrations\": { \"SingularDisplayName\": \"Event Grid Partner Registration\" }\r\n ,\"microsoft.eventgrid/partnertopics\": { \"SingularDisplayName\": \"Event Grid Partner Topic\" }\r\n ,\"microsoft.eventgrid/systemtopics\": { \"SingularDisplayName\": \"Event Grid System Topic\" }\r\n ,\"microsoft.eventgrid/systemtopics/eventsubscriptions\": { \"SingularDisplayName\": \"Event Grid Subscriptions\" }\r\n ,\"microsoft.eventgrid/topics\": { \"SingularDisplayName\": \"Event Grid Topic\" }\r\n ,\"microsoft.eventgrid/topictypes\": { \"SingularDisplayName\": \"Microsoft.EventGrid topic type\" }\r\n ,\"microsoft.eventgrid/verifiedpartners\": { \"SingularDisplayName\": \"Microsoft.EventGrid verified partner\" }\r\n ,\"microsoft.eventhub/clusters\": { \"SingularDisplayName\": \"Event Hubs Cluster\" }\r\n ,\"microsoft.eventhub/namespaces\": { \"SingularDisplayName\": \"Event Hubs namespace\" }\r\n ,\"microsoft.eventhub/namespaces/disasterrecoveryconfigs\": { \"SingularDisplayName\": \"Event Hubs Geo-DR Alias\" }\r\n ,\"microsoft.eventhub/namespaces/eventhubs\": { \"SingularDisplayName\": \"Event Hubs Instance\" }\r\n ,\"microsoft.eventhub/namespaces/providers/diagnosticsettings\": { \"SingularDisplayName\": \"Diagnostic settings\" }\r\n ,\"microsoft.eventhub/namespaces/schemagroups\": { \"SingularDisplayName\": \"Schema Group\" }\r\n ,\"microsoft.experimentation/experimentworkspaces\": { \"SingularDisplayName\": \"Experiment Workspace\" }\r\n ,\"microsoft.extendedlocation/customlocations\": { \"SingularDisplayName\": \"Custom location\" }\r\n ,\"microsoft.fabric/capacities\": { \"SingularDisplayName\": \"Fabric Capacity\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric/operationresults\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric operation result\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric private endpoint connection\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric private link resource\" }\r\n ,\"microsoft.fairfieldgardens/deviceprovisioningstates\": { \"SingularDisplayName\": \"Microsoft.FairfieldGardens device provisioning state\" }\r\n ,\"microsoft.fairfieldgardens/provisioningresources\": { \"SingularDisplayName\": \"Fairfield Gardens\" }\r\n ,\"microsoft.fairfieldgardens/provisioningresources/provisioningpolicies\": { \"SingularDisplayName\": \"Provisioning policy\" }\r\n ,\"microsoft.falcon/namespaces\": { \"SingularDisplayName\": \"Microsoft.Falcon namespace\" }\r\n ,\"microsoft.features/featureprovidernamespaces/featureconfigurations\": { \"SingularDisplayName\": \"Preview features\" }\r\n ,\"microsoft.fidalgo/devcenters\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenter\" }\r\n ,\"microsoft.fidalgo/devcenters/attachednetworks\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters attachednetwork\" }\r\n ,\"microsoft.fidalgo/devcenters/catalogs\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters catalog\" }\r\n ,\"microsoft.fidalgo/devcenters/catalogs/items\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters catalogs item\" }\r\n ,\"microsoft.fidalgo/devcenters/devboxdefinitions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters devboxdefinition\" }\r\n ,\"microsoft.fidalgo/devcenters/environmenttypes\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters environment type\" }\r\n ,\"microsoft.fidalgo/devcenters/galleries\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters gallery\" }\r\n ,\"microsoft.fidalgo/devcenters/galleries/images\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters galleries image\" }\r\n ,\"microsoft.fidalgo/devcenters/galleries/images/versions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters galleries images version\" }\r\n ,\"microsoft.fidalgo/devcenters/mappings\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters mapping\" }\r\n ,\"microsoft.fidalgo/machinedefinitions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo machinedefinition\" }\r\n ,\"microsoft.fidalgo/networksettings\": { \"SingularDisplayName\": \"Microsoft.Fidalgo networksetting\" }\r\n ,\"microsoft.fidalgo/networksettings/healthchecks\": { \"SingularDisplayName\": \"Microsoft.Fidalgo networksettings healthcheck\" }\r\n ,\"microsoft.fidalgo/projects\": { \"SingularDisplayName\": \"Microsoft.Fidalgo project\" }\r\n ,\"microsoft.fidalgo/projects/attachednetworks\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects attachednetwork\" }\r\n ,\"microsoft.fidalgo/projects/devboxdefinitions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects devboxdefinition\" }\r\n ,\"microsoft.fidalgo/projects/environments\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects environment\" }\r\n ,\"microsoft.fidalgo/projects/pools\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects pool\" }\r\n ,\"microsoft.fileshares/fileshares\": { \"SingularDisplayName\": \"File share\" }\r\n ,\"microsoft.fluidrelay/fluidrelayservers\": { \"SingularDisplayName\": \"Fluid Relay\" }\r\n ,\"microsoft.footprintmonitoring/profiles\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profile\" }\r\n ,\"microsoft.footprintmonitoring/profiles/experiments\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profiles experiment\" }\r\n ,\"microsoft.footprintmonitoring/profiles/measurementendpoints\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profiles measurement endpoint\" }\r\n ,\"microsoft.footprintmonitoring/profiles/measurementendpoints/conditions\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profiles measurement endpoints condition\" }\r\n ,\"microsoft.gallery/myareas/galleryitems\": { \"SingularDisplayName\": \"Template\" }\r\n ,\"microsoft.genomics/accounts\": { \"SingularDisplayName\": \"Genomics account\" }\r\n ,\"microsoft.graph/azureadapplication\": { \"SingularDisplayName\": \"Microsoft.Graph Azure ad application\" }\r\n ,\"microsoft.graph/azureadapplicationprototype\": { \"SingularDisplayName\": \"Microsoft.Graph Azure ad application prototype\" }\r\n ,\"microsoft.graphservices/accounts\": { \"SingularDisplayName\": \"Metered API Account\" }\r\n ,\"microsoft.guestconfiguration/guestconfigurationassignments\": { \"SingularDisplayName\": \"Microsoft.GuestConfiguration guest configuration assignment\" }\r\n ,\"microsoft.guestconfiguration/guestconfigurationassignments/reports\": { \"SingularDisplayName\": \"Microsoft.GuestConfiguration guest configuration assignments report\" }\r\n ,\"microsoft.hanaonazure/hanainstances\": { \"SingularDisplayName\": \"SAP HANA on Azure\" }\r\n ,\"microsoft.hanaonazure/sapmonitors\": { \"SingularDisplayName\": \"Azure Monitor for SAP Solutions (classic)\" }\r\n ,\"microsoft.hardware/orders\": { \"SingularDisplayName\": \"Microsoft.Hardware order\" }\r\n ,\"microsoft.hardwaresecuritymodules/cloudhsmclusters\": { \"SingularDisplayName\": \"Azure Cloud HSM\" }\r\n ,\"microsoft.hdinsight/clusterpools\": { \"SingularDisplayName\": \"Azure HDInsight on AKS cluster pool\" }\r\n ,\"microsoft.hdinsight/clusterpools/clusters\": { \"SingularDisplayName\": \"Azure HDInsight on AKS cluster\" }\r\n ,\"microsoft.hdinsight/clusters\": { \"SingularDisplayName\": \"HDInsight cluster\" }\r\n ,\"microsoft.healthbot/healthbots\": { \"SingularDisplayName\": \"Healthcare agent service\" }\r\n ,\"microsoft.healthcareapis/services\": { \"SingularDisplayName\": \"Azure API for FHIR\" }\r\n ,\"microsoft.healthcareapis/workspaces\": { \"SingularDisplayName\": \"Health Data Services workspace\" }\r\n ,\"microsoft.healthcareapis/workspaces/dicomservices\": { \"SingularDisplayName\": \"DICOM service\" }\r\n ,\"microsoft.healthcareapis/workspaces/fhirservices\": { \"SingularDisplayName\": \"FHIR service\" }\r\n ,\"microsoft.healthcareapis/workspaces/iotconnectors\": { \"SingularDisplayName\": \"MedTech service\" }\r\n ,\"microsoft.healthdataaiservices/deidservices\": { \"SingularDisplayName\": \"De-identification Service\" }\r\n ,\"microsoft.healthmodel/healthmodels\": { \"SingularDisplayName\": \"Health Model\" }\r\n ,\"microsoft.help/diagnostics\": { \"SingularDisplayName\": \"Microsoft.Help diagnostic\" }\r\n ,\"microsoft.help/selfhelp\": { \"SingularDisplayName\": \"Microsoft.Help self help\" }\r\n ,\"microsoft.help/simplifiedsolutions\": { \"SingularDisplayName\": \"Microsoft.Help simplified solution\" }\r\n ,\"microsoft.help/solutions\": { \"SingularDisplayName\": \"Microsoft.Help solution\" }\r\n ,\"microsoft.help/troubleshooters\": { \"SingularDisplayName\": \"Microsoft.Help troubleshooter\" }\r\n ,\"microsoft.hpcworkbench/instances\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instance\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chamber\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/accessprofiles\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers access profile\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/filerequests\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers file request\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/files\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers file\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/storages\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers storage\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/workloads\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers workload\" }\r\n ,\"microsoft.hpcworkbench/instances/consortiums\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances consortium\" }\r\n ,\"microsoft.hybridcloud/cloudconnections\": { \"SingularDisplayName\": \"Microsoft.HybridCloud cloud connection\" }\r\n ,\"microsoft.hybridcloud/cloudconnectors\": { \"SingularDisplayName\": \"Microsoft.HybridCloud cloud connector\" }\r\n ,\"microsoft.hybridcompute/arcserverwithwac\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/gateways\": { \"SingularDisplayName\": \"Arc gateway\" }\r\n ,\"microsoft.hybridcompute/licenses\": { \"SingularDisplayName\": \"Extended Security Updates - Windows Server 2012/R2\" }\r\n ,\"microsoft.hybridcompute/machines\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machines/microsoft.awsconnector/ec2instances\": { \"SingularDisplayName\": \"Microsoft.AwsConnector ec2 instance\" }\r\n ,\"microsoft.hybridcompute/machines/microsoft.connectedvmwarevsphere/virtualmachineinstances\": { \"SingularDisplayName\": \"VMware + AVS virtual machine\" }\r\n ,\"microsoft.hybridcompute/machines/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.hybridcompute/machinesesu\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machinespaygo\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machinessoftwareassurance\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machinessovereign\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/privatelinkscopes\": { \"SingularDisplayName\": \"Azure Arc Private Link Scope\" }\r\n ,\"microsoft.hybridcompute/settings\": { \"SingularDisplayName\": \"Microsoft.HybridCompute setting\" }\r\n ,\"microsoft.hybridconnectivity/endpoints\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity endpoint\" }\r\n ,\"microsoft.hybridconnectivity/endpoints/serviceconfigurations\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity endpoints service configuration\" }\r\n ,\"microsoft.hybridconnectivity/publiccloudconnectors\": { \"SingularDisplayName\": \"Multicloud connector\" }\r\n ,\"microsoft.hybridconnectivity/solutionconfigurations\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity solution configuration\" }\r\n ,\"microsoft.hybridconnectivity/solutionconfigurations/inventory\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity solution configurations inventory\" }\r\n ,\"microsoft.hybridconnectivity/solutiontypes\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity solution type\" }\r\n ,\"microsoft.hybridcontainerservice/kubernetesversions\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService kubernetes version\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instance\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances/agentpools\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instances agent pool\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instances hybrid identity metadata\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances/upgradeprofiles\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instances upgrade profile\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusters\": { \"SingularDisplayName\": \"Kubernetes hybrid - Azure Arc\" }\r\n ,\"microsoft.hybridcontainerservice/skus\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService SKU\" }\r\n ,\"microsoft.hybridcontainerservice/storagespaces\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService storage space\" }\r\n ,\"microsoft.hybridcontainerservice/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService virtual network\" }\r\n ,\"microsoft.hybriddata/datamanagers\": { \"SingularDisplayName\": \"Microsoft.HybridData data manager\" }\r\n ,\"microsoft.hybriddata/datamanagers/dataservices\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data service\" }\r\n ,\"microsoft.hybriddata/datamanagers/dataservices/jobdefinitions\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data services job definition\" }\r\n ,\"microsoft.hybriddata/datamanagers/dataservices/jobdefinitions/jobs\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data services job definitions job\" }\r\n ,\"microsoft.hybriddata/datamanagers/datastores\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data store\" }\r\n ,\"microsoft.hybriddata/datamanagers/datastoretypes\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data store type\" }\r\n ,\"microsoft.hybriddata/datamanagers/publickeys\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers public key\" }\r\n ,\"microsoft.hybridnetwork/configurationgroupvalues\": { \"SingularDisplayName\": \"Configuration Group Value\" }\r\n ,\"microsoft.hybridnetwork/devices\": { \"SingularDisplayName\": \"Azure Network Function Manager ? Device\" }\r\n ,\"microsoft.hybridnetwork/networkfunctions\": { \"SingularDisplayName\": \"Azure Network Function Manager ? Network Function\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publisher\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/artifactstores\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers artifact store\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/configurationgroupschemas\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers configuration group schema\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkfunctiondefinitiongroups\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network function definition group\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network function definition groups network function definition version\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkservicedesigngroups\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network service design group\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkservicedesigngroups/networkservicedesignversions\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network service design groups network service design version\" }\r\n ,\"microsoft.hybridnetwork/publishers\": { \"SingularDisplayName\": \"Publisher\" }\r\n ,\"microsoft.hybridnetwork/publishers/artifactstores\": { \"SingularDisplayName\": \"Publisher Artifact Store\" }\r\n ,\"microsoft.hybridnetwork/publishers/artifactstores/artifactmanifests\": { \"SingularDisplayName\": \"Publisher Artifact Manifest\" }\r\n ,\"microsoft.hybridnetwork/publishers/configurationgroupschemas\": { \"SingularDisplayName\": \"Configuration Group Schema\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups\": { \"SingularDisplayName\": \"Network Function Definition\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions\": { \"SingularDisplayName\": \"Network Function Definition Version\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkservicedesigngroups\": { \"SingularDisplayName\": \"Network Service Design\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkservicedesigngroups/networkservicedesignversions\": { \"SingularDisplayName\": \"Network Service Design Version\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management container\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/rolloutsequences\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers rollout sequence\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/rollouttiers\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers rollout tier\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers update specification\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers update specifications rollout\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts/statuses\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers update specifications rollouts statuse\" }\r\n ,\"microsoft.hybridnetwork/sitenetworkservices\": { \"SingularDisplayName\": \"Site Network Service\" }\r\n ,\"microsoft.hybridnetwork/sites\": { \"SingularDisplayName\": \"Site\" }\r\n ,\"microsoft.hybridnetwork/vendors\": { \"SingularDisplayName\": \"Azure Network Function Manager ? vendor\" }\r\n ,\"microsoft.hybridonboarding/extensionmanagers\": { \"SingularDisplayName\": \"Microsoft.HybridOnboarding extension manager\" }\r\n ,\"microsoft.impact/connectors\": { \"SingularDisplayName\": \"Impact Reporting Connector\" }\r\n ,\"microsoft.impact/impactcategories\": { \"SingularDisplayName\": \"Microsoft.Impact impact category\" }\r\n ,\"microsoft.impact/topologyimpacts\": { \"SingularDisplayName\": \"Microsoft.Impact topology impact\" }\r\n ,\"microsoft.impact/workloadimpacts\": { \"SingularDisplayName\": \"Microsoft.Impact workload impact\" }\r\n ,\"microsoft.impact/workloadimpacts/insights\": { \"SingularDisplayName\": \"Microsoft.Impact workload impacts insight\" }\r\n ,\"microsoft.importexport/jobs\": { \"SingularDisplayName\": \"Microsoft.ImportExport job\" }\r\n ,\"microsoft.insights/actiongroups\": { \"SingularDisplayName\": \"Action group\" }\r\n ,\"microsoft.insights/activitylogalerts\": { \"SingularDisplayName\": \"Activity log alert rule\" }\r\n ,\"microsoft.insights/alertrules\": { \"SingularDisplayName\": \"Microsoft.Insights alertrule\" }\r\n ,\"microsoft.insights/alertrules/incidents\": { \"SingularDisplayName\": \"Microsoft.insights alertrules incident\" }\r\n ,\"microsoft.insights/autoscalesettings\": { \"SingularDisplayName\": \"Microsoft.Insights autoscalesetting\" }\r\n ,\"microsoft.insights/components\": { \"SingularDisplayName\": \"Application Insights app\" }\r\n ,\"microsoft.insights/datacollectionendpoints\": { \"SingularDisplayName\": \"Data collection endpoint\" }\r\n ,\"microsoft.insights/datacollectionruleassociations\": { \"SingularDisplayName\": \"Microsoft.Insights data collection rule association\" }\r\n ,\"microsoft.insights/datacollectionrules\": { \"SingularDisplayName\": \"Data collection rule\" }\r\n ,\"microsoft.insights/diagnosticsettings\": { \"SingularDisplayName\": \"Diagnostic settings\" }\r\n ,\"microsoft.insights/diagnosticsettingscategories\": { \"SingularDisplayName\": \"Microsoft.Insights diagnostic settings category\" }\r\n ,\"microsoft.insights/guestdiagnosticsettings\": { \"SingularDisplayName\": \"Microsoft.insights guest diagnostic setting\" }\r\n ,\"microsoft.insights/guestdiagnosticsettingsassociation\": { \"SingularDisplayName\": \"Microsoft.insights guest diagnostic settings association\" }\r\n ,\"microsoft.insights/logprofiles\": { \"SingularDisplayName\": \"Microsoft.Insights logprofile\" }\r\n ,\"microsoft.insights/metricalerts\": { \"SingularDisplayName\": \"Metric alert rule\" }\r\n ,\"microsoft.insights/notificationstatus\": { \"SingularDisplayName\": \"Microsoft.Insights notification statu\" }\r\n ,\"microsoft.insights/privatelinkscopeoperationstatuses\": { \"SingularDisplayName\": \"Microsoft.insights private link scope operation statuse\" }\r\n ,\"microsoft.insights/privatelinkscopes\": { \"SingularDisplayName\": \"Azure Monitor Private Link Scope\" }\r\n ,\"microsoft.insights/scheduledqueryrules\": { \"SingularDisplayName\": \"Log search alert rule\" }\r\n ,\"microsoft.insights/tenantactiongroups\": { \"SingularDisplayName\": \"Microsoft.Insights tenant action group\" }\r\n ,\"microsoft.insights/tenantactiongroups/notificationstatus\": { \"SingularDisplayName\": \"Microsoft.Insights tenant action groups notification statu\" }\r\n ,\"microsoft.insights/vminsightsonboardingstatuses\": { \"SingularDisplayName\": \"Microsoft.Insights VM insights onboarding statuse\" }\r\n ,\"microsoft.insights/webtests\": { \"SingularDisplayName\": \"Application Insights availability test\" }\r\n ,\"microsoft.insights/workbooks\": { \"SingularDisplayName\": \"Azure Workbook\" }\r\n ,\"microsoft.insights/workbooktemplates\": { \"SingularDisplayName\": \"Azure Workbook Template\" }\r\n ,\"microsoft.integrationspaces/spaces\": { \"SingularDisplayName\": \"Integration Environment\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twin\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/assets\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins asset\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/executionplans\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins execution plan\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/testplans\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins test plan\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/tests\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins test\" }\r\n ,\"microsoft.inventory/subscriptioninternalproperties\": { \"SingularDisplayName\": \"Microsoft.Inventory subscription internal property\" }\r\n ,\"microsoft.iotcentral/iotapps\": { \"SingularDisplayName\": \"IoT Central Application\" }\r\n ,\"microsoft.iotfirmwaredefense/workspaces\": { \"SingularDisplayName\": \"Microsoft.IoTFirmwareDefense workspace\" }\r\n ,\"microsoft.iotfirmwaredefense/workspaces/firmwares\": { \"SingularDisplayName\": \"Microsoft.IoTFirmwareDefense workspaces firmware\" }\r\n ,\"microsoft.iotfirmwaredefense/workspaces/firmwares/summaries\": { \"SingularDisplayName\": \"Microsoft.IoTFirmwareDefense workspaces firmwares summary\" }\r\n ,\"microsoft.iotoperations/instances\": { \"SingularDisplayName\": \"Azure IoT Operations\" }\r\n ,\"microsoft.iotoperations/instances/brokers\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances broker\" }\r\n ,\"microsoft.iotoperations/instances/brokers/authentications\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances brokers authentication\" }\r\n ,\"microsoft.iotoperations/instances/brokers/authorizations\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances brokers authorization\" }\r\n ,\"microsoft.iotoperations/instances/brokers/listeners\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances brokers listener\" }\r\n ,\"microsoft.iotoperations/instances/dataflowendpoints\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances dataflow endpoint\" }\r\n ,\"microsoft.iotoperations/instances/dataflowprofiles\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances dataflow profile\" }\r\n ,\"microsoft.iotoperations/instances/dataflowprofiles/dataflows\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances dataflow profiles dataflow\" }\r\n ,\"microsoft.iotoperationsdataprocessor/instances\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsDataProcessor instance\" }\r\n ,\"microsoft.iotoperationsdataprocessor/instances/datasets\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsDataProcessor instances dataset\" }\r\n ,\"microsoft.iotoperationsdataprocessor/instances/pipelines\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsDataProcessor instances pipeline\" }\r\n ,\"microsoft.iotoperationsmq/mq\": { \"SingularDisplayName\": \"IoT Operations Ops MQ\" }\r\n ,\"microsoft.iotoperationsorchestrator/instances\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsOrchestrator instance\" }\r\n ,\"microsoft.iotoperationsorchestrator/solutions\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsOrchestrator solution\" }\r\n ,\"microsoft.iotoperationsorchestrator/targets\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsOrchestrator target\" }\r\n ,\"microsoft.iotsecurity/alerttypes\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity alert type\" }\r\n ,\"microsoft.iotsecurity/defendersettings\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity defender setting\" }\r\n ,\"microsoft.iotsecurity/onpremisesensors\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity on premise sensor\" }\r\n ,\"microsoft.iotsecurity/recommendationtypes\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity recommendation type\" }\r\n ,\"microsoft.iotsecurity/sensors\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity sensor\" }\r\n ,\"microsoft.iotsecurity/sites\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity site\" }\r\n ,\"microsoft.keyvault/managedhsms\": { \"SingularDisplayName\": \"Azure Key Vault Managed HSM\" }\r\n ,\"microsoft.keyvault/vaults\": { \"SingularDisplayName\": \"Key vault\" }\r\n ,\"microsoft.kubernetes/connectedclusters\": { \"SingularDisplayName\": \"kubernetes 1 - Azure Arc\" }\r\n ,\"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/extensions\": { \"SingularDisplayName\": \"Kubernetes - Azure Arc extension\" }\r\n ,\"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations\": { \"SingularDisplayName\": \"GitOps configuration\" }\r\n ,\"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces\": { \"SingularDisplayName\": \"Kubernetes - Azure Arc namespace\" }\r\n ,\"microsoft.kubernetesconfiguration/extensions\": { \"SingularDisplayName\": \"Kubernetes service extension\" }\r\n ,\"microsoft.kubernetesconfiguration/extensiontypes\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration extension type\" }\r\n ,\"microsoft.kubernetesconfiguration/extensiontypes/versions\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration extension types version\" }\r\n ,\"microsoft.kubernetesconfiguration/fluxconfigurations\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration flux configuration\" }\r\n ,\"microsoft.kubernetesconfiguration/fluxconfigurations/operations\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration flux configurations operation\" }\r\n ,\"microsoft.kubernetesconfiguration/privatelinkscopes\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration private link scope\" }\r\n ,\"microsoft.kubernetesconfiguration/privatelinkscopes/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration private link scopes private endpoint connection\" }\r\n ,\"microsoft.kubernetesconfiguration/privatelinkscopes/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration private link scopes private link resource\" }\r\n ,\"microsoft.kubernetesconfiguration/sourcecontrolconfigurations\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration source control configuration\" }\r\n ,\"microsoft.kubernetesruntime/bgppeers\": { \"SingularDisplayName\": \"Microsoft.KubernetesRuntime bgp peer\" }\r\n ,\"microsoft.kubernetesruntime/loadbalancers\": { \"SingularDisplayName\": \"Arc Load Balancer\" }\r\n ,\"microsoft.kubernetesruntime/services\": { \"SingularDisplayName\": \"Microsoft.KubernetesRuntime service\" }\r\n ,\"microsoft.kubernetesruntime/storageclasses\": { \"SingularDisplayName\": \"Microsoft.KubernetesRuntime storage class\" }\r\n ,\"microsoft.kusto/clusters\": { \"SingularDisplayName\": \"Azure Data Explorer Cluster\" }\r\n ,\"microsoft.kusto/clusters/databases\": { \"SingularDisplayName\": \"Azure Data Explorer Database\" }\r\n ,\"microsoft.labservices/labaccounts\": { \"SingularDisplayName\": \"Lab account\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#3": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_3(id: string) {\r\n dynamic({\r\n \"microsoft.labservices/labaccounts/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.labservices/labplans\": { \"SingularDisplayName\": \"Lab plan\" }\r\n ,\"microsoft.labservices/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.loadtestservice/loadtestmappings\": { \"SingularDisplayName\": \"Microsoft.LoadTestService load test mapping\" }\r\n ,\"microsoft.loadtestservice/loadtestprofilemappings\": { \"SingularDisplayName\": \"Microsoft.LoadTestService load test profile mapping\" }\r\n ,\"microsoft.loadtestservice/loadtests\": { \"SingularDisplayName\": \"Azure Load Testing\" }\r\n ,\"microsoft.logic/businessprocesses\": { \"SingularDisplayName\": \"Business Process\" }\r\n ,\"microsoft.logic/integrationaccounts\": { \"SingularDisplayName\": \"Logic app integration account\" }\r\n ,\"microsoft.logic/integrationserviceenvironments\": { \"SingularDisplayName\": \"Integration Service Environment\" }\r\n ,\"microsoft.logic/integrationserviceenvironments/managedapis\": { \"SingularDisplayName\": \"Managed Connector\" }\r\n ,\"microsoft.logic/workflows\": { \"SingularDisplayName\": \"Logic app\" }\r\n ,\"microsoft.logz/monitors\": { \"SingularDisplayName\": \"Logz.io\" }\r\n ,\"microsoft.logz/monitors/accounts\": { \"SingularDisplayName\": \"Logz sub account\" }\r\n ,\"microsoft.m365/m365resources\": { \"SingularDisplayName\": \"Microsoft.M365 m365 resource\" }\r\n ,\"microsoft.m365consumptionservices/services\": { \"SingularDisplayName\": \"Microsoft.M365ConsumptionServices service\" }\r\n ,\"microsoft.machinelearning/commitmentplans\": { \"SingularDisplayName\": \"Microsoft.MachineLearning commitment plan\" }\r\n ,\"microsoft.machinelearning/commitmentplans/commitmentassociations\": { \"SingularDisplayName\": \"Microsoft.MachineLearning commitment plans commitment association\" }\r\n ,\"microsoft.machinelearning/webservices\": { \"SingularDisplayName\": \"Microsoft.MachineLearning web service\" }\r\n ,\"microsoft.machinelearning/workspaces\": { \"SingularDisplayName\": \"Microsoft.MachineLearning workspace\" }\r\n ,\"microsoft.machinelearningexperimentation/accounts\": { \"SingularDisplayName\": \"Microsoft.MachineLearningExperimentation account\" }\r\n ,\"microsoft.machinelearningexperimentation/accounts/workspaces\": { \"SingularDisplayName\": \"Microsoft.MachineLearningExperimentation accounts workspace\" }\r\n ,\"microsoft.machinelearningexperimentation/accounts/workspaces/projects\": { \"SingularDisplayName\": \"Microsoft.MachineLearningExperimentation accounts workspaces project\" }\r\n ,\"microsoft.machinelearningservices/aistudio\": { \"SingularDisplayName\": \"Azure AI Studio\" }\r\n ,\"microsoft.machinelearningservices/registries\": { \"SingularDisplayName\": \"Azure Machine Learning registry\" }\r\n ,\"microsoft.machinelearningservices/workspaces\": { \"SingularDisplayName\": \"Azure Machine Learning workspace\" }\r\n ,\"microsoft.machinelearningservices/workspaces/onlineendpoints\": { \"SingularDisplayName\": \"Machine learning online endpoint\" }\r\n ,\"microsoft.machinelearningservices/workspaces/onlineendpoints/deployments\": { \"SingularDisplayName\": \"Machine learning online deployment\" }\r\n ,\"microsoft.maintenance/configurationassignments\": { \"SingularDisplayName\": \"Microsoft.Maintenance configuration assignment\" }\r\n ,\"microsoft.maintenance/maintenanceconfigurations\": { \"SingularDisplayName\": \"Maintenance Configuration\" }\r\n ,\"microsoft.maintenance/publicmaintenanceconfigurations\": { \"SingularDisplayName\": \"Microsoft.Maintenance public maintenance configuration\" }\r\n ,\"microsoft.managedidentity/identities\": { \"SingularDisplayName\": \"Microsoft.ManagedIdentity identity\" }\r\n ,\"microsoft.managedidentity/userassignedidentities\": { \"SingularDisplayName\": \"Managed Identity\" }\r\n ,\"microsoft.managednetwork/managednetworks\": { \"SingularDisplayName\": \"Microsoft.ManagedNetwork managed network\" }\r\n ,\"microsoft.managednetwork/managednetworks/managednetworkgroups\": { \"SingularDisplayName\": \"Microsoft.ManagedNetwork managed networks managed network group\" }\r\n ,\"microsoft.managednetwork/managednetworks/managednetworkpeeringpolicies\": { \"SingularDisplayName\": \"Microsoft.ManagedNetwork managed networks managed network peering policy\" }\r\n ,\"microsoft.managednetworkfabric/accesscontrollists\": { \"SingularDisplayName\": \"Access Control List (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/internetgatewayrules\": { \"SingularDisplayName\": \"Internet Gateway Rule (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/internetgateways\": { \"SingularDisplayName\": \"Internet Gateway (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/ipcommunities\": { \"SingularDisplayName\": \"IP Community (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/ipextendedcommunities\": { \"SingularDisplayName\": \"IP Extended Community (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/ipprefixes\": { \"SingularDisplayName\": \"IP Prefix (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l2isolationdomains\": { \"SingularDisplayName\": \"Layer 2 Isolation Domain (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l3isolationdomains\": { \"SingularDisplayName\": \"Layer 3 Isolation Domain (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l3isolationdomains/externalnetworks\": { \"SingularDisplayName\": \"External Network (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l3isolationdomains/internalnetworks\": { \"SingularDisplayName\": \"Internal Network (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/neighborgroups\": { \"SingularDisplayName\": \"Neighbor Group (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkdevices\": { \"SingularDisplayName\": \"Network Device (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkdevices/networkinterfaces\": { \"SingularDisplayName\": \"Network Interface (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabriccontrollers\": { \"SingularDisplayName\": \"Network Fabric Controller (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabrics\": { \"SingularDisplayName\": \"Network Fabric (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects\": { \"SingularDisplayName\": \"Network to Network Interconnect (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabricskus\": { \"SingularDisplayName\": \"Network Fabric SKU (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkpacketbrokers\": { \"SingularDisplayName\": \"Network Packet Broker (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkracks\": { \"SingularDisplayName\": \"Network Rack (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networktaprules\": { \"SingularDisplayName\": \"Network Tap Rule (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networktaps\": { \"SingularDisplayName\": \"Network Tap (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/routepolicies\": { \"SingularDisplayName\": \"Route Policy (Operator Nexus)\" }\r\n ,\"microsoft.managedservices/marketplaceregistrationdefinitions\": { \"SingularDisplayName\": \"Microsoft.ManagedServices marketplace registration definition\" }\r\n ,\"microsoft.managedservices/registrationassignments\": { \"SingularDisplayName\": \"Microsoft.ManagedServices registration assignment\" }\r\n ,\"microsoft.managedservices/registrationdefinitions\": { \"SingularDisplayName\": \"Azure Lighthouse\" }\r\n ,\"microsoft.management/managementgroups\": { \"SingularDisplayName\": \"Microsoft.Management management group\" }\r\n ,\"microsoft.management/managementgroups/microsoft.resources/deploymentstacks\": { \"SingularDisplayName\": \"Deployment stack\" }\r\n ,\"microsoft.management/managementgroups/providers/privatelinkassociations\": { \"SingularDisplayName\": \"Application Gateway\" }\r\n ,\"microsoft.management/managementgroups/providers/templatespecs\": { \"SingularDisplayName\": \"Template spec\" }\r\n ,\"microsoft.management/managementgroups/settings\": { \"SingularDisplayName\": \"Microsoft.Management management groups setting\" }\r\n ,\"microsoft.management/managementgroups/subscriptions\": { \"SingularDisplayName\": \"Microsoft.Management management groups subscription\" }\r\n ,\"microsoft.managementpartner/partners\": { \"SingularDisplayName\": \"Microsoft.ManagementPartner partner\" }\r\n ,\"microsoft.manufacturingplatform/manufacturingdataservices\": { \"SingularDisplayName\": \"Manufacturing Data Solutions\" }\r\n ,\"microsoft.maps/accounts\": { \"SingularDisplayName\": \"Azure Maps Account\" }\r\n ,\"microsoft.maps/accounts/creators\": { \"SingularDisplayName\": \"Azure Maps Creator Resource\" }\r\n ,\"microsoft.marketplace/privatestores\": { \"SingularDisplayName\": \"Microsoft.Marketplace private store\" }\r\n ,\"microsoft.marketplace/privatestores/adminrequestapprovals\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores admin request approval\" }\r\n ,\"microsoft.marketplace/privatestores/collections\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores collection\" }\r\n ,\"microsoft.marketplace/privatestores/collections/offers\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores collections offer\" }\r\n ,\"microsoft.marketplace/privatestores/offers\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores offer\" }\r\n ,\"microsoft.marketplace/privatestores/requestapprovals\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores request approval\" }\r\n ,\"microsoft.media/mediaservices\": { \"SingularDisplayName\": \"Media service\" }\r\n ,\"microsoft.media/mediaservices/liveevents\": { \"SingularDisplayName\": \"Live event\" }\r\n ,\"microsoft.media/mediaservices/streamingendpoints\": { \"SingularDisplayName\": \"Streaming Endpoint\" }\r\n ,\"microsoft.mesh/worlds\": { \"SingularDisplayName\": \"Microsoft.Mesh world\" }\r\n ,\"microsoft.mesh/worlds/events\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds event\" }\r\n ,\"microsoft.mesh/worlds/events/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds events access policy\" }\r\n ,\"microsoft.mesh/worlds/spaces\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds space\" }\r\n ,\"microsoft.mesh/worlds/spaces/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds spaces access policy\" }\r\n ,\"microsoft.mesh/worlds/templates\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds template\" }\r\n ,\"microsoft.mesh/worlds/templates/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds templates access policy\" }\r\n ,\"microsoft.messagingcatalog/catalogs\": { \"SingularDisplayName\": \"Microsoft.MessagingCatalog catalog\" }\r\n ,\"microsoft.messagingconnectors/connectors\": { \"SingularDisplayName\": \"Microsoft.MessagingConnectors connector\" }\r\n ,\"microsoft.metaverse/metaverses\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverse\" }\r\n ,\"microsoft.metaverse/metaverses/events\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses event\" }\r\n ,\"microsoft.metaverse/metaverses/events/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses events access policy\" }\r\n ,\"microsoft.metaverse/metaverses/spaces\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses space\" }\r\n ,\"microsoft.metaverse/metaverses/spaces/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses spaces access policy\" }\r\n ,\"microsoft.metaverse/metaverses/templates\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses template\" }\r\n ,\"microsoft.metaverse/metaverses/templates/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses templates access policy\" }\r\n ,\"microsoft.migrate/assessmentprojects\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment project\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments/assessedwebapps\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessments assessed web app\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments/clusters\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessments cluster\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments/summaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessments summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/assessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/avsassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects avs assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business case\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/avssummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases avs summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedavsmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated avs machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedsqlentities\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated sql entity\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedwebapps\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated web app\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/iaassummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases iaas summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/overviewsummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases overview summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/paassummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases paas summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects group\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/assessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/assessments/assessedmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups assessments assessed machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/avsassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups avs assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/avsassessments/avsassessedmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups avs assessments avs assessed machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/assessedsqldatabases\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments assessed sql database\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/assessedsqlinstances\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments assessed sql instance\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/assessedsqlmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments assessed sql machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/recommendedassessedentities\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments recommended assessed entity\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/summaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments/assessedwebapps\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessments assessed web app\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments/summaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessments summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments/webappserviceplans\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessments web app service plan\" }\r\n ,\"microsoft.migrate/assessmentprojects/hypervcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects hypervcollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/importcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects importcollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/machines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects private endpoint connection\" }\r\n ,\"microsoft.migrate/assessmentprojects/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects private link resource\" }\r\n ,\"microsoft.migrate/assessmentprojects/projectsummary\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects project summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/servercollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects servercollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/sqlassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects sql assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/sqlcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects sqlcollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/vmwarecollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects vmwarecollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/webappassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects web app assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/webappcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects web app collector\" }\r\n ,\"microsoft.migrate/migrateprojects\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate project\" }\r\n ,\"microsoft.migrate/migrateprojects/databaseinstances\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects database instance\" }\r\n ,\"microsoft.migrate/migrateprojects/databases\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects database\" }\r\n ,\"microsoft.migrate/migrateprojects/machines\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects machine\" }\r\n ,\"microsoft.migrate/migrateprojects/migrateevents\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects migrate event\" }\r\n ,\"microsoft.migrate/migrateprojects/solutions\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects solution\" }\r\n ,\"microsoft.migrate/modernizeprojects\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize project\" }\r\n ,\"microsoft.migrate/modernizeprojects/deployedresources\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects deployed resource\" }\r\n ,\"microsoft.migrate/modernizeprojects/jobs\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects job\" }\r\n ,\"microsoft.migrate/modernizeprojects/jobs/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects jobs operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/migrateagents\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects migrate agent\" }\r\n ,\"microsoft.migrate/modernizeprojects/migrateagents/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects migrate agents operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloaddeployments\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload deployment\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloaddeployments/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload deployments operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloadinstances\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload instance\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloadinstances/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload instances operation\" }\r\n ,\"microsoft.migrate/movecollections\": { \"SingularDisplayName\": \"Microsoft.Migrate move collection\" }\r\n ,\"microsoft.migrate/movecollections/moveresources\": { \"SingularDisplayName\": \"Microsoft.Migrate move collections move resource\" }\r\n ,\"microsoft.migrate/projects\": { \"SingularDisplayName\": \"Migration project\" }\r\n ,\"microsoft.mission/catalogs\": { \"SingularDisplayName\": \"Catalog\" }\r\n ,\"microsoft.mission/communities\": { \"SingularDisplayName\": \"Community\" }\r\n ,\"microsoft.mission/communities/communityendpoints\": { \"SingularDisplayName\": \"Community endpoint\" }\r\n ,\"microsoft.mission/communities/transithubs\": { \"SingularDisplayName\": \"Transit hub\" }\r\n ,\"microsoft.mission/enclaveconnections\": { \"SingularDisplayName\": \"Enclave connection\" }\r\n ,\"microsoft.mission/externalconnections\": { \"SingularDisplayName\": \"Microsoft.Mission external connection\" }\r\n ,\"microsoft.mission/internalconnections\": { \"SingularDisplayName\": \"Microsoft.Mission internal connection\" }\r\n ,\"microsoft.mission/virtualenclaves\": { \"SingularDisplayName\": \"Enclave\" }\r\n ,\"microsoft.mission/virtualenclaves/enclaveendpoints\": { \"SingularDisplayName\": \"Enclave endpoint\" }\r\n ,\"microsoft.mission/virtualenclaves/endpoints\": { \"SingularDisplayName\": \"Endpoint\" }\r\n ,\"microsoft.mission/virtualenclaves/workloads\": { \"SingularDisplayName\": \"Workload\" }\r\n ,\"microsoft.mixedreality/objectanchorsaccounts\": { \"SingularDisplayName\": \"Object Anchors Account\" }\r\n ,\"microsoft.mixedreality/objectunderstandingaccounts\": { \"SingularDisplayName\": \"Object Understanding Account\" }\r\n ,\"microsoft.mixedreality/remoterenderingaccounts\": { \"SingularDisplayName\": \"Remote Rendering Account\" }\r\n ,\"microsoft.mixedreality/spatialanchorsaccounts\": { \"SingularDisplayName\": \"Spatial Anchors Account\" }\r\n ,\"microsoft.mixedreality/spatialmapsaccounts\": { \"SingularDisplayName\": \"Microsoft.MixedReality spatial maps account\" }\r\n ,\"microsoft.mobilenetwork/amfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork amf deployment\" }\r\n ,\"microsoft.mobilenetwork/clusterservices\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork cluster service\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks\": { \"SingularDisplayName\": \"Mobile Network\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/datanetworks\": { \"SingularDisplayName\": \"Data Network\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/services\": { \"SingularDisplayName\": \"Service\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/simpolicies\": { \"SingularDisplayName\": \"SIM Policy\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/sites\": { \"SingularDisplayName\": \"Mobile Network Site\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/slices\": { \"SingularDisplayName\": \"Slice\" }\r\n ,\"microsoft.mobilenetwork/nrfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork nrf deployment\" }\r\n ,\"microsoft.mobilenetwork/nssfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork nssf deployment\" }\r\n ,\"microsoft.mobilenetwork/observabilityservices\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork observability service\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplanes\": { \"SingularDisplayName\": \"Packet Core Control Plane\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes\": { \"SingularDisplayName\": \"Packet Core Data Plane\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks\": { \"SingularDisplayName\": \"Attached Data Network\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplaneversions\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork packet core control plane version\" }\r\n ,\"microsoft.mobilenetwork/radioaccessnetworks\": { \"SingularDisplayName\": \"Radio Access Network Insights\" }\r\n ,\"microsoft.mobilenetwork/sdmdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork sdm deployment\" }\r\n ,\"microsoft.mobilenetwork/simgroups\": { \"SingularDisplayName\": \"SIM Group\" }\r\n ,\"microsoft.mobilenetwork/simgroups/sims\": { \"SingularDisplayName\": \"SIM\" }\r\n ,\"microsoft.mobilenetwork/sims\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork sim\" }\r\n ,\"microsoft.mobilenetwork/smfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork smf deployment\" }\r\n ,\"microsoft.mobilenetwork/upfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork upf deployment\" }\r\n ,\"microsoft.mobilenetwork/virtualizedmmedeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork virtualized mme deployment\" }\r\n ,\"microsoft.mobilenetwork/vnfagentdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork vnf agent deployment\" }\r\n ,\"microsoft.mobilepacketcore/amfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore amf deployment\" }\r\n ,\"microsoft.mobilepacketcore/clusterservices\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore cluster service\" }\r\n ,\"microsoft.mobilepacketcore/networkfunctions\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore network function\" }\r\n ,\"microsoft.mobilepacketcore/nrfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore nrf deployment\" }\r\n ,\"microsoft.mobilepacketcore/nssfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore nssf deployment\" }\r\n ,\"microsoft.mobilepacketcore/observabilityservices\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore observability service\" }\r\n ,\"microsoft.mobilepacketcore/smfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore smf deployment\" }\r\n ,\"microsoft.mobilepacketcore/upfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore upf deployment\" }\r\n ,\"microsoft.modsimworkbench/workbenches\": { \"SingularDisplayName\": \"Modeling and Simulation Workbench\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers\": { \"SingularDisplayName\": \"Chamber\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/connectors\": { \"SingularDisplayName\": \"Chamber Connector\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/filerequests\": { \"SingularDisplayName\": \"Chamber Data Pipeline File Request\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/files\": { \"SingularDisplayName\": \"Chamber Data Pipeline File\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/licenses\": { \"SingularDisplayName\": \"Chamber License\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/storages\": { \"SingularDisplayName\": \"Chamber Storage\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/workloads\": { \"SingularDisplayName\": \"Chamber VM\" }\r\n ,\"microsoft.modsimworkbench/workbenches/sharedstorages\": { \"SingularDisplayName\": \"Shared Storage\" }\r\n ,\"microsoft.monitor/accounts\": { \"SingularDisplayName\": \"Azure Monitor workspace\" }\r\n ,\"microsoft.monitor/investigations\": { \"SingularDisplayName\": \"Microsoft.Monitor investigation\" }\r\n ,\"microsoft.monitor/pipelinegroups\": { \"SingularDisplayName\": \"Azure Monitor pipeline\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsite\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites/errorsummaries\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites error summary\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites/mysqlservers\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites my sqlserver\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites/summaries\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites summary\" }\r\n ,\"microsoft.netapp/netappaccounts\": { \"SingularDisplayName\": \"NetApp account\" }\r\n ,\"microsoft.netapp/netappaccounts/backupvaults\": { \"SingularDisplayName\": \"Backup vault\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools\": { \"SingularDisplayName\": \"Capacity pool\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools/volumes\": { \"SingularDisplayName\": \"Volume\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools/volumes/snapshots\": { \"SingularDisplayName\": \"Snapshot\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools/volumes/volumequotarules\": { \"SingularDisplayName\": \"User and group quota\" }\r\n ,\"microsoft.netapp/netappaccounts/snapshotpolicies\": { \"SingularDisplayName\": \"Snapshot policy\" }\r\n ,\"microsoft.netapp/netappaccounts/volumegroups\": { \"SingularDisplayName\": \"VolumeGroup\" }\r\n ,\"microsoft.network/applicationgatewayavailablessloptions\": { \"SingularDisplayName\": \"Microsoft.Network application gateway available ssl option\" }\r\n ,\"microsoft.network/applicationgatewayavailablessloptions/predefinedpolicies\": { \"SingularDisplayName\": \"Microsoft.Network application gateway available ssl options predefined policy\" }\r\n ,\"microsoft.network/applicationgateways\": { \"SingularDisplayName\": \"Application gateway\" }\r\n ,\"microsoft.network/applicationgatewaywebapplicationfirewallpolicies\": { \"SingularDisplayName\": \"Application Gateway WAF policy\" }\r\n ,\"microsoft.network/applicationsecuritygroups\": { \"SingularDisplayName\": \"Application security group\" }\r\n ,\"microsoft.network/azurefirewalls\": { \"SingularDisplayName\": \"Firewall\" }\r\n ,\"microsoft.network/azurewebcategories\": { \"SingularDisplayName\": \"Microsoft.Network Azure web category\" }\r\n ,\"microsoft.network/bastionhosts\": { \"SingularDisplayName\": \"Bastion\" }\r\n ,\"microsoft.network/cloudserviceslots\": { \"SingularDisplayName\": \"Microsoft.Network cloud service slot\" }\r\n ,\"microsoft.network/connections\": { \"SingularDisplayName\": \"Connection\" }\r\n ,\"microsoft.network/customipprefixes\": { \"SingularDisplayName\": \"Custom IP Prefix\" }\r\n ,\"microsoft.network/ddoscustompolicies\": { \"SingularDisplayName\": \"Microsoft.Network DDoS custom policy\" }\r\n ,\"microsoft.network/ddosprotectionplans\": { \"SingularDisplayName\": \"DDoS protection plan\" }\r\n ,\"microsoft.network/dnsforwardingrulesets\": { \"SingularDisplayName\": \"DNS forwarding ruleset\" }\r\n ,\"microsoft.network/dnsresolverdomainlists\": { \"SingularDisplayName\": \"DNS Domain List\" }\r\n ,\"microsoft.network/dnsresolverpolicies\": { \"SingularDisplayName\": \"DNS Security Policy\" }\r\n ,\"microsoft.network/dnsresolvers\": { \"SingularDisplayName\": \"DNS private resolver\" }\r\n ,\"microsoft.network/dnszones\": { \"SingularDisplayName\": \"DNS zone\" }\r\n ,\"microsoft.network/dscpconfigurations\": { \"SingularDisplayName\": \"Microsoft.Network DSCP configuration\" }\r\n ,\"microsoft.network/expressroutecircuits\": { \"SingularDisplayName\": \"ExpressRoute circuit\" }\r\n ,\"microsoft.network/expressroutecrossconnections\": { \"SingularDisplayName\": \"Microsoft.Network express route cross connection\" }\r\n ,\"microsoft.network/expressroutecrossconnections/peerings\": { \"SingularDisplayName\": \"Microsoft.Network express route cross connections peering\" }\r\n ,\"microsoft.network/expressroutegateways\": { \"SingularDisplayName\": \"ExpressRoute Gateway\" }\r\n ,\"microsoft.network/expressroutegateways/expressrouteconnections\": { \"SingularDisplayName\": \"Microsoft.Network express route gateways express route connection\" }\r\n ,\"microsoft.network/expressrouteports\": { \"SingularDisplayName\": \"ExpressRoute Direct\" }\r\n ,\"microsoft.network/expressrouteportslocations\": { \"SingularDisplayName\": \"Microsoft.Network express route ports location\" }\r\n ,\"microsoft.network/firewallpolicies\": { \"SingularDisplayName\": \"Firewall Policy\" }\r\n ,\"microsoft.network/frontdoors\": { \"SingularDisplayName\": \"Front Door and CDN profiles\" }\r\n ,\"microsoft.network/frontdoorwebapplicationfirewallpolicies\": { \"SingularDisplayName\": \"Front Door WAF policy\" }\r\n ,\"microsoft.network/ipallocations\": { \"SingularDisplayName\": \"Microsoft.Network IP allocation\" }\r\n ,\"microsoft.network/ipgroups\": { \"SingularDisplayName\": \"IP Group\" }\r\n ,\"microsoft.network/loadbalancers\": { \"SingularDisplayName\": \"Load balancer\" }\r\n ,\"microsoft.network/localnetworkgateways\": { \"SingularDisplayName\": \"Local network gateway\" }\r\n ,\"microsoft.network/natgateways\": { \"SingularDisplayName\": \"NAT gateway\" }\r\n ,\"microsoft.network/networkexperimentprofiles\": { \"SingularDisplayName\": \"Microsoft.Network network experiment profile\" }\r\n ,\"microsoft.network/networkexperimentprofiles/experiments\": { \"SingularDisplayName\": \"Microsoft.Network network experiment profiles experiment\" }\r\n ,\"microsoft.network/networkinterfaces\": { \"SingularDisplayName\": \"Network interface\" }\r\n ,\"microsoft.network/networkmanagerconnections\": { \"SingularDisplayName\": \"Microsoft.Network network manager connection\" }\r\n ,\"microsoft.network/networkmanagers\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/connectivityconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/ipampools\": { \"SingularDisplayName\": \"IP address pool\" }\r\n ,\"microsoft.network/networkmanagers/networkgroups\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/routingconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/securityadminconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/securityuserconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/verifierworkspaces\": { \"SingularDisplayName\": \"Verifier Workspace\" }\r\n ,\"microsoft.network/networkprofiles\": { \"SingularDisplayName\": \"Microsoft.Network network profile\" }\r\n ,\"microsoft.network/networksecuritygroups\": { \"SingularDisplayName\": \"Network security group\" }\r\n ,\"microsoft.network/networksecurityperimeters\": { \"SingularDisplayName\": \"Network Security Perimeter\" }\r\n ,\"microsoft.network/networksecurityperimeters/profiles\": { \"SingularDisplayName\": \"Network Security Perimeter\" }\r\n ,\"microsoft.network/networkverifiers\": { \"SingularDisplayName\": \"Virtual Network Verifier\" }\r\n ,\"microsoft.network/networkvirtualappliances\": { \"SingularDisplayName\": \"Microsoft.Network network virtual appliance\" }\r\n ,\"microsoft.network/networkwatchers\": { \"SingularDisplayName\": \"Network Watcher\" }\r\n ,\"microsoft.network/networkwatchers/flowlogs\": { \"SingularDisplayName\": \"Flow log\" }\r\n ,\"microsoft.network/p2svpngateways\": { \"SingularDisplayName\": \"Microsoft.Network P2S VPN gateway\" }\r\n ,\"microsoft.network/privatednszones\": { \"SingularDisplayName\": \"Private DNS zone\" }\r\n ,\"microsoft.network/privateendpoints\": { \"SingularDisplayName\": \"Private endpoint\" }\r\n ,\"microsoft.network/privatelinkservices\": { \"SingularDisplayName\": \"Private link service\" }\r\n ,\"microsoft.network/publicipaddresses\": { \"SingularDisplayName\": \"Public IP address\" }\r\n ,\"microsoft.network/publicipprefixes\": { \"SingularDisplayName\": \"Public IP Prefix\" }\r\n ,\"microsoft.network/routefilters\": { \"SingularDisplayName\": \"Route filter\" }\r\n ,\"microsoft.network/routetables\": { \"SingularDisplayName\": \"Route table\" }\r\n ,\"microsoft.network/securitypartnerproviders\": { \"SingularDisplayName\": \"Microsoft.Network security partner provider\" }\r\n ,\"microsoft.network/serviceendpointpolicies\": { \"SingularDisplayName\": \"Service endpoint policy\" }\r\n ,\"microsoft.network/trafficmanagergeographichierarchies\": { \"SingularDisplayName\": \"Microsoft.Network traffic manager geographic hierarchy\" }\r\n ,\"microsoft.network/trafficmanagerprofiles\": { \"SingularDisplayName\": \"Traffic Manager profile\" }\r\n ,\"microsoft.network/trafficmanagerusermetricskeys\": { \"SingularDisplayName\": \"Microsoft.Network traffic manager user metrics key\" }\r\n ,\"microsoft.network/virtualhubs\": { \"SingularDisplayName\": \"Microsoft.Network/virtualHub\" }\r\n ,\"microsoft.network/virtualnetworkgateways\": { \"SingularDisplayName\": \"Virtual network gateway\" }\r\n ,\"microsoft.network/virtualnetworks\": { \"SingularDisplayName\": \"Virtual network\" }\r\n ,\"microsoft.network/virtualnetworktaps\": { \"SingularDisplayName\": \"Virtual Network Terminal Access Point\" }\r\n ,\"microsoft.network/virtualrouters\": { \"SingularDisplayName\": \"Microsoft.Network virtual router\" }\r\n ,\"microsoft.network/virtualrouters/peerings\": { \"SingularDisplayName\": \"Microsoft.Network virtual routers peering\" }\r\n ,\"microsoft.network/virtualwans\": { \"SingularDisplayName\": \"Virtual WAN\" }\r\n ,\"microsoft.network/vpngateways\": { \"SingularDisplayName\": \"VPN Gateway\" }\r\n ,\"microsoft.network/vpngateways/vpnconnections\": { \"SingularDisplayName\": \"Microsoft.Network VPN gateways VPN connection\" }\r\n ,\"microsoft.network/vpngateways/vpnconnections/vpnlinkconnections\": { \"SingularDisplayName\": \"Microsoft.Network VPN gateways VPN connections VPN link connection\" }\r\n ,\"microsoft.network/vpnserverconfigurations\": { \"SingularDisplayName\": \"Microsoft.Network VPN server configuration\" }\r\n ,\"microsoft.network/vpnsites\": { \"SingularDisplayName\": \"Microsoft.Network VPN site\" }\r\n ,\"microsoft.network/vpnsites/vpnsitelinks\": { \"SingularDisplayName\": \"Microsoft.Network VPN sites VPN site link\" }\r\n ,\"microsoft.networkanalytics/dataconnectors\": { \"SingularDisplayName\": \"AIOps - Data Connector\" }\r\n ,\"microsoft.networkanalytics/datalakehouses\": { \"SingularDisplayName\": \"AIOps - Data LakeHouse\" }\r\n ,\"microsoft.networkanalytics/dataproducts\": { \"SingularDisplayName\": \"Azure Operator Insights ? Data Product\" }\r\n ,\"microsoft.networkanalytics/dataproducts/datatypes\": { \"SingularDisplayName\": \"Data Type\" }\r\n ,\"microsoft.networkanalytics/dataproductscatalogs\": { \"SingularDisplayName\": \"Microsoft.NetworkAnalytics data products catalog\" }\r\n ,\"microsoft.networkanalytics/metricsingestionendpoints\": { \"SingularDisplayName\": \"Microsoft.NetworkAnalytics metrics ingestion endpoint\" }\r\n ,\"microsoft.networkanalytics/networkanalyticsproducts\": { \"SingularDisplayName\": \"Microsoft.NetworkAnalytics network analytics product\" }\r\n ,\"microsoft.networkcloud/baremetalmachines\": { \"SingularDisplayName\": \"Bare Metal Machine (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/cloudservicesnetworks\": { \"SingularDisplayName\": \"Cloud Services Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clustermanagers\": { \"SingularDisplayName\": \"Cluster Manager (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters\": { \"SingularDisplayName\": \"Cluster (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters/baremetalmachinekeysets\": { \"SingularDisplayName\": \"Cluster Bare Metal Machine Key Set (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters/bmckeysets\": { \"SingularDisplayName\": \"Cluster Baseboard Management Controller Key Set (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters/metricsconfigurations\": { \"SingularDisplayName\": \"Cluster Metrics Configuration (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/edgeclustermachineskus\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster machine SKU\" }\r\n ,\"microsoft.networkcloud/edgeclusterruntimeversions\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster runtime version\" }\r\n ,\"microsoft.networkcloud/edgeclusters\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster\" }\r\n ,\"microsoft.networkcloud/edgeclusters/nodes\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge clusters node\" }\r\n ,\"microsoft.networkcloud/edgeclusterskus\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster SKU\" }\r\n ,\"microsoft.networkcloud/kubernetesclusters\": { \"SingularDisplayName\": \"Kubernetes Cluster (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/kubernetesclusters/agentpools\": { \"SingularDisplayName\": \"Agent Pool (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/l2networks\": { \"SingularDisplayName\": \"Layer 2 Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/l3networks\": { \"SingularDisplayName\": \"Layer 3 Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/racks\": { \"SingularDisplayName\": \"Compute Rack (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/rackskus\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud rack SKU\" }\r\n ,\"microsoft.networkcloud/registrationhubs\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud registration hub\" }\r\n ,\"microsoft.networkcloud/registrationhubs/images\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud registration hubs image\" }\r\n ,\"microsoft.networkcloud/registrationhubs/machines\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud registration hubs machine\" }\r\n ,\"microsoft.networkcloud/storageappliances\": { \"SingularDisplayName\": \"Storage Appliance (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/trunkednetworks\": { \"SingularDisplayName\": \"Trunked Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/virtualmachines\": { \"SingularDisplayName\": \"Virtual Machine (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/virtualmachines/consoles\": { \"SingularDisplayName\": \"Virtual Machine Console (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/volumes\": { \"SingularDisplayName\": \"Volume (Operator Nexus)\" }\r\n ,\"microsoft.networkfunction/azuretrafficcollectors\": { \"SingularDisplayName\": \"ExpressRoute traffic collector\" }\r\n ,\"microsoft.networkfunction/meshvpns\": { \"SingularDisplayName\": \"Mesh VPN\" }\r\n ,\"microsoft.nexusidentity/identitycontrollers\": { \"SingularDisplayName\": \"Microsoft.NexusIdentity identity controller\" }\r\n ,\"microsoft.nexusidentity/identitysets\": { \"SingularDisplayName\": \"Microsoft.NexusIdentity identity set\" }\r\n ,\"microsoft.notebooks/notebookproxies\": { \"SingularDisplayName\": \"Microsoft.Notebooks notebook proxy\" }\r\n ,\"microsoft.notificationhubs/namespaces\": { \"SingularDisplayName\": \"Notification Hub Namespace\" }\r\n ,\"microsoft.notificationhubs/namespaces/notificationhubs\": { \"SingularDisplayName\": \"Notification Hub\" }\r\n ,\"microsoft.objectstore/osnamespaces\": { \"SingularDisplayName\": \"Microsoft.ObjectStore os namespace\" }\r\n ,\"microsoft.offazure/hypervsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv site\" }\r\n ,\"microsoft.offazure/hypervsites/clusters\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites cluster\" }\r\n ,\"microsoft.offazure/hypervsites/hosts\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites host\" }\r\n ,\"microsoft.offazure/hypervsites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites job\" }\r\n ,\"microsoft.offazure/hypervsites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites machine\" }\r\n ,\"microsoft.offazure/hypervsites/machines/softwareinventories\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites machines software inventory\" }\r\n ,\"microsoft.offazure/hypervsites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites operations statu\" }\r\n ,\"microsoft.offazure/hypervsites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites run as account\" }\r\n ,\"microsoft.offazure/importsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure import site\" }\r\n ,\"microsoft.offazure/importsites/deletejobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites delete job\" }\r\n ,\"microsoft.offazure/importsites/exportjobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites export job\" }\r\n ,\"microsoft.offazure/importsites/importjobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites import job\" }\r\n ,\"microsoft.offazure/importsites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites job\" }\r\n ,\"microsoft.offazure/importsites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites machine\" }\r\n ,\"microsoft.offazure/mastersites\": { \"SingularDisplayName\": \"Microsoft.OffAzure master site\" }\r\n ,\"microsoft.offazure/mastersites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites operations statu\" }\r\n ,\"microsoft.offazure/mastersites/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites private endpoint connection\" }\r\n ,\"microsoft.offazure/mastersites/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites private link resource\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql site\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/discoverysitedatasources\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites discovery site data source\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites job\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites operations statu\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites run as account\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/sqlavailabilitygroups\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites sql availability group\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/sqldatabases\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites sql database\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/sqlservers\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites sql server\" }\r\n ,\"microsoft.offazure/mastersites/webappsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app site\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/discoverysitedatasources\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites discovery site data source\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/extendedmachines\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites extended machine\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/iiswebapplications\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites iis web application\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/iiswebservers\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites iis web server\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites runasaccount\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/tomcatwebapplications\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites tomcat web application\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/tomcatwebservers\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites tomcat web server\" }\r\n ,\"microsoft.offazure/serversites\": { \"SingularDisplayName\": \"Microsoft.OffAzure server site\" }\r\n ,\"microsoft.offazure/serversites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites job\" }\r\n ,\"microsoft.offazure/serversites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites machine\" }\r\n ,\"microsoft.offazure/serversites/machines/softwareinventories\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites machines software inventory\" }\r\n ,\"microsoft.offazure/serversites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites operations statu\" }\r\n ,\"microsoft.offazure/serversites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites run as account\" }\r\n ,\"microsoft.offazure/vmwaresites\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware site\" }\r\n ,\"microsoft.offazure/vmwaresites/hosts\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites host\" }\r\n ,\"microsoft.offazure/vmwaresites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites job\" }\r\n ,\"microsoft.offazure/vmwaresites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites machine\" }\r\n ,\"microsoft.offazure/vmwaresites/machines/softwareinventories\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites machines software inventory\" }\r\n ,\"microsoft.offazure/vmwaresites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites operations statu\" }\r\n ,\"microsoft.offazure/vmwaresites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites run as account\" }\r\n ,\"microsoft.offazure/vmwaresites/vcenters\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites vcenter\" }\r\n ,\"microsoft.offazurespringboot/springbootsites\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsite\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/errorsummaries\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites error summary\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/springbootapps\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites springbootapp\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/springbootservers\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites springbootserver\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/summaries\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites summary\" }\r\n ,\"microsoft.openenergyplatform/energyservices\": { \"SingularDisplayName\": \"Azure Data Manager for Energy\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspace\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/applicationregistrations\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces application registration\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/applications\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces application\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/eventgridfilters\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces event grid filter\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/shares\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces share\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/sharesubscriptions\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces share subscription\" }\r\n ,\"microsoft.operationalinsights/clusters\": { \"SingularDisplayName\": \"Log Analytics dedicated cluster\" }\r\n ,\"microsoft.operationalinsights/querypacks\": { \"SingularDisplayName\": \"Log Analytics query pack\" }\r\n ,\"microsoft.operationalinsights/workspaces\": { \"SingularDisplayName\": \"Log Analytics workspace\" }\r\n ,\"microsoft.operationsmanagement/managementassociations\": { \"SingularDisplayName\": \"Microsoft.OperationsManagement management association\" }\r\n ,\"microsoft.operationsmanagement/solutions\": { \"SingularDisplayName\": \"Solution\" }\r\n ,\"microsoft.operatorvoicemail/operatorvoicemailinstances\": { \"SingularDisplayName\": \"Microsoft.OperatorVoicemail operator voicemail instance\" }\r\n ,\"microsoft.oraclediscovery/oraclesites\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle site\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/errorsummaries\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites error summary\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/oracledatabases\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites oracle database\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/oracleservers\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites oracle server\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/summaries\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites summary\" }\r\n ,\"microsoft.orbital/cloudaccessrouters\": { \"SingularDisplayName\": \"Cloud Access Router\" }\r\n ,\"microsoft.orbital/contactprofiles\": { \"SingularDisplayName\": \"Contact Profile\" }\r\n ,\"microsoft.orbital/edgesites\": { \"SingularDisplayName\": \"Edge Site\" }\r\n ,\"microsoft.orbital/geocatalogs\": { \"SingularDisplayName\": \"GeoCatalog\" }\r\n ,\"microsoft.orbital/globalcommunicationssites\": { \"SingularDisplayName\": \"Microsoft.Orbital global communications site\" }\r\n ,\"microsoft.orbital/groundstations\": { \"SingularDisplayName\": \"Ground Station\" }\r\n ,\"microsoft.orbital/l2connections\": { \"SingularDisplayName\": \"L2 Connection\" }\r\n ,\"microsoft.orbital/sdwancontrollers\": { \"SingularDisplayName\": \"SDWAN Controller\" }\r\n ,\"microsoft.orbital/spacecrafts\": { \"SingularDisplayName\": \"Spacecraft\" }\r\n ,\"microsoft.orbital/spacecrafts/contacts\": { \"SingularDisplayName\": \"Contact\" }\r\n ,\"microsoft.orbital/terminals\": { \"SingularDisplayName\": \"Cloud Access Terminal\" }\r\n ,\"microsoft.partnermanagedconsumerrecurrence/recurrences\": { \"SingularDisplayName\": \"Microsoft.PartnerManagedConsumerRecurrence recurrence\" }\r\n ,\"microsoft.partnermanagedconsumerrecurrence/recurrences/operationresult\": { \"SingularDisplayName\": \"Microsoft.PartnerManagedConsumerRecurrence recurrences operation result\" }\r\n ,\"microsoft.peering/peerasns\": { \"SingularDisplayName\": \"Microsoft.Peering peer asn\" }\r\n ,\"microsoft.peering/peerings\": { \"SingularDisplayName\": \"Peering\" }\r\n ,\"microsoft.peering/peerings/registeredasns\": { \"SingularDisplayName\": \"Registered ASN\" }\r\n ,\"microsoft.peering/peerings/registeredprefixes\": { \"SingularDisplayName\": \"Registered prefix\" }\r\n ,\"microsoft.peering/peeringservices\": { \"SingularDisplayName\": \"Peering Service\" }\r\n ,\"microsoft.peering/peeringservices/prefixes\": { \"SingularDisplayName\": \"Peering Service Prefix\" }\r\n ,\"microsoft.pki/pkis\": { \"SingularDisplayName\": \"Microsoft.Pki PKI\" }\r\n ,\"microsoft.pki/pkis/certificateauthorities\": { \"SingularDisplayName\": \"Microsoft.Pki pkis certificate authority\" }\r\n ,\"microsoft.pki/pkis/enrollmentpolicies\": { \"SingularDisplayName\": \"Microsoft.Pki pkis enrollment policy\" }\r\n ,\"microsoft.policyinsights/attestations\": { \"SingularDisplayName\": \"Microsoft.PolicyInsights attestation\" }\r\n ,\"microsoft.policyinsights/policymetadata\": { \"SingularDisplayName\": \"Microsoft.PolicyInsights policy metadata\" }\r\n ,\"microsoft.policyinsights/remediations\": { \"SingularDisplayName\": \"Microsoft.PolicyInsights remediation\" }\r\n ,\"microsoft.portal/consoles\": { \"SingularDisplayName\": \"Microsoft.Portal console\" }\r\n ,\"microsoft.portal/dashboards\": { \"SingularDisplayName\": \"Shared dashboard\" }\r\n ,\"microsoft.portal/tenantconfigurations\": { \"SingularDisplayName\": \"Microsoft.Portal tenant configuration\" }\r\n ,\"microsoft.portal/usersettings\": { \"SingularDisplayName\": \"Microsoft.Portal user setting\" }\r\n ,\"microsoft.portal/virtual-privatedashboards\": { \"SingularDisplayName\": \"Private dashboard\" }\r\n ,\"microsoft.portalservices/copilotsettings\": { \"SingularDisplayName\": \"Microsoft.PortalServices copilot setting\" }\r\n ,\"microsoft.portalservices/dashboards\": { \"SingularDisplayName\": \"Shared dashboard\" }\r\n ,\"microsoft.portalservices/extensions\": { \"SingularDisplayName\": \"Portal Extension\" }\r\n ,\"microsoft.portalservices/extensions/deployments\": { \"SingularDisplayName\": \"Extension Deployment\" }\r\n ,\"microsoft.portalservices/extensions/slots\": { \"SingularDisplayName\": \"Extension Slot\" }\r\n ,\"microsoft.portalservices/extensions/versions\": { \"SingularDisplayName\": \"Extension Version\" }\r\n ,\"microsoft.powerbi/privatelinkservicesforpowerbi\": { \"SingularDisplayName\": \"Microsoft.PowerBI private link services for power bi\" }\r\n ,\"microsoft.powerbi/privatelinkservicesforpowerbi/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.PowerBI private link services for power bi private endpoint connection\" }\r\n ,\"microsoft.powerbi/privatelinkservicesforpowerbi/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.PowerBI private link services for power bi private link resource\" }\r\n ,\"microsoft.powerbi/workspacecollections\": { \"SingularDisplayName\": \"Microsoft.PowerBI workspace collection\" }\r\n ,\"microsoft.powerbidedicated/autoscalevcores\": { \"SingularDisplayName\": \"Microsoft.PowerBIDedicated auto scale vcore\" }\r\n ,\"microsoft.powerbidedicated/capacities\": { \"SingularDisplayName\": \"Power BI Embedded\" }\r\n ,\"microsoft.powerplatform/accounts\": { \"SingularDisplayName\": \"Microsoft.PowerPlatform account\" }\r\n ,\"microsoft.professionalservice/resources\": { \"SingularDisplayName\": \"Professional Service\" }\r\n ,\"microsoft.programmableconnectivity/gateways\": { \"SingularDisplayName\": \"APC Gateway\" }\r\n ,\"microsoft.programmableconnectivity/operatorapiconnections\": { \"SingularDisplayName\": \"APC Operator API Connection\" }\r\n ,\"microsoft.programmableconnectivity/operatorapiplans\": { \"SingularDisplayName\": \"APC Operator API Plan\" }\r\n ,\"microsoft.providerhub/providerregistrations\": { \"SingularDisplayName\": \"Resource Provider as a Service\" }\r\n ,\"microsoft.providerhub/providerregistrations/customrollouts\": { \"SingularDisplayName\": \"Rollout\" }\r\n ,\"microsoft.providerhub/providerregistrations/defaultrollouts\": { \"SingularDisplayName\": \"Rollout\" }\r\n ,\"microsoft.providerhub/providerregistrations/resourcetyperegistrations\": { \"SingularDisplayName\": \"Resource Type\" }\r\n ,\"microsoft.providerhub/providerregistrations/resourcetyperegistrations/resourcetyperegistrations\": { \"SingularDisplayName\": \"Resource Type\" }\r\n ,\"microsoft.providerhubdevtest/regionalstresstests\": { \"SingularDisplayName\": \"Microsoft.ProviderHubDevTest regional stresstest\" }\r\n ,\"microsoft.providerhubdevtest/stresstests\": { \"SingularDisplayName\": \"Microsoft.ProviderHubDevTest stresstest\" }\r\n ,\"microsoft.purview/accounts\": { \"SingularDisplayName\": \"Microsoft Purview account\" }\r\n ,\"microsoft.quantum/workspaces\": { \"SingularDisplayName\": \"Quantum Workspace\" }\r\n ,\"microsoft.quota/groupquotas\": { \"SingularDisplayName\": \"Microsoft.Quota group quota\" }\r\n ,\"microsoft.quota/groupquotas/groupquotarequests\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas group quota request\" }\r\n ,\"microsoft.quota/groupquotas/quotaallocationrequests\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas quota allocation request\" }\r\n ,\"microsoft.quota/groupquotas/quotaallocations\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas quota allocation\" }\r\n ,\"microsoft.quota/groupquotas/subscriptionrequests\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas subscription request\" }\r\n ,\"microsoft.quota/groupquotas/subscriptions\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas subscription\" }\r\n ,\"microsoft.quota/quotarequests\": { \"SingularDisplayName\": \"Microsoft.Quota quota request\" }\r\n ,\"microsoft.quota/quotas\": { \"SingularDisplayName\": \"Microsoft.Quota quota\" }\r\n ,\"microsoft.quota/usages\": { \"SingularDisplayName\": \"Microsoft.Quota usage\" }\r\n ,\"microsoft.recommendationsservice/accounts\": { \"SingularDisplayName\": \"Intelligent Recommendations Account\" }\r\n ,\"microsoft.recommendationsservice/accounts/modeling\": { \"SingularDisplayName\": \"Modeling\" }\r\n ,\"microsoft.recommendationsservice/accounts/serviceendpoints\": { \"SingularDisplayName\": \"Service Endpoint\" }\r\n ,\"microsoft.recoveryservices/replicationeligibilityresults\": { \"SingularDisplayName\": \"Microsoft.RecoveryServices replication eligibility result\" }\r\n ,\"microsoft.recoveryservices/vaults\": { \"SingularDisplayName\": \"Recovery Services vault\" }\r\n ,\"microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems\": { \"SingularDisplayName\": \"Backup Item\" }\r\n ,\"microsoft.redhatopenshift/openshiftclusters\": { \"SingularDisplayName\": \"Azure Red Hat OpenShift cluster\" }\r\n ,\"microsoft.relay/namespaces\": { \"SingularDisplayName\": \"Relay\" }\r\n ,\"microsoft.relay/namespaces/hybridconnections\": { \"SingularDisplayName\": \"Hybrid connection\" }\r\n ,\"microsoft.relay/namespaces/wcfrelays\": { \"SingularDisplayName\": \"WCF relay\" }\r\n ,\"microsoft.resilience/resiliencestates\": { \"SingularDisplayName\": \"Microsoft.Resilience resilience state\" }\r\n ,\"microsoft.resourceconnector/appliances\": { \"SingularDisplayName\": \"Resource bridge\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#4": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_4(id: string) {\r\n dynamic({\r\n \"microsoft.resourcegraph/queries\": { \"SingularDisplayName\": \"Resource Graph query\" }\r\n ,\"microsoft.resourcehealth/availabilitystatuses\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth availability statuse\" }\r\n ,\"microsoft.resourcehealth/childavailabilitystatuses\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth child availability statuse\" }\r\n ,\"microsoft.resourcehealth/emergingissues\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth emerging issue\" }\r\n ,\"microsoft.resourcehealth/events\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth event\" }\r\n ,\"microsoft.resourcehealth/events/impactedresources\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth events impacted resource\" }\r\n ,\"microsoft.resourcehealth/metadata\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth metadata\" }\r\n ,\"microsoft.resources/builtintemplatespecs\": { \"SingularDisplayName\": \"Built-in template spec\" }\r\n ,\"microsoft.resources/changes\": { \"SingularDisplayName\": \"Microsoft.Resources change\" }\r\n ,\"microsoft.resources/databoundaries\": { \"SingularDisplayName\": \"Microsoft.Resources data boundary\" }\r\n ,\"microsoft.resources/deletedresources\": { \"SingularDisplayName\": \"Recycle Bin\" }\r\n ,\"microsoft.resources/deployments\": { \"SingularDisplayName\": \"Microsoft.Resources deployment\" }\r\n ,\"microsoft.resources/deployments/operations\": { \"SingularDisplayName\": \"Microsoft.Resources deployments operation\" }\r\n ,\"microsoft.resources/deploymentscripts\": { \"SingularDisplayName\": \"Deployment Script\" }\r\n ,\"microsoft.resources/deploymentstacks\": { \"SingularDisplayName\": \"Deployment stack\" }\r\n ,\"microsoft.resources/mobobrokers\": { \"SingularDisplayName\": \"Microsoft.Resources mobo broker\" }\r\n ,\"microsoft.resources/resourcechange\": { \"SingularDisplayName\": \"Change Analysis\" }\r\n ,\"microsoft.resources/resourcechanges\": { \"SingularDisplayName\": \"Resource change\" }\r\n ,\"microsoft.resources/resourcegraphvisualizer\": { \"SingularDisplayName\": \"Resource Graph Visualizer\" }\r\n ,\"microsoft.resources/resourcegroups\": { \"SingularDisplayName\": \"Microsoft.Resources resource group\" }\r\n ,\"microsoft.resources/resources\": { \"SingularDisplayName\": \"Resource\" }\r\n ,\"microsoft.resources/snapshots\": { \"SingularDisplayName\": \"Microsoft.Resources snapshot\" }\r\n ,\"microsoft.resources/subscriptions\": { \"SingularDisplayName\": \"Subscription\" }\r\n ,\"microsoft.resources/subscriptions/resourcegroups\": { \"SingularDisplayName\": \"Resource group\" }\r\n ,\"microsoft.resources/tags\": { \"SingularDisplayName\": \"Microsoft.Resources tag\" }\r\n ,\"microsoft.resources/templatespecs\": { \"SingularDisplayName\": \"Template spec\" }\r\n ,\"microsoft.saas/applications\": { \"SingularDisplayName\": \"Software as a Service (classic)\" }\r\n ,\"microsoft.saas/resources\": { \"SingularDisplayName\": \"SaaS\" }\r\n ,\"microsoft.saas/saasresources\": { \"SingularDisplayName\": \"SaaS (classic)\" }\r\n ,\"microsoft.saashub/cloudservices/hidden\": { \"SingularDisplayName\": \"Microsoft SaaS\" }\r\n ,\"microsoft.salescopilot/conversationintelligencerecordingaccounts\": { \"SingularDisplayName\": \"Microsoft.SalesCopilot conversation intelligence recording account\" }\r\n ,\"microsoft.samplepartner/organizations\": { \"SingularDisplayName\": \"Sample Partner Resource\" }\r\n ,\"microsoft.scheduler/jobcollections\": { \"SingularDisplayName\": \"Scheduler job collection\" }\r\n ,\"microsoft.scheduler/jobcollections/jobs\": { \"SingularDisplayName\": \"Scheduler job\" }\r\n ,\"microsoft.scom/managedinstances\": { \"SingularDisplayName\": \"SCOM managed instance\" }\r\n ,\"microsoft.scvmm/availabilitysets\": { \"SingularDisplayName\": \"Microsoft.ScVmm availability set\" }\r\n ,\"microsoft.scvmm/clouds\": { \"SingularDisplayName\": \"Microsoft.ScVmm cloud\" }\r\n ,\"microsoft.scvmm/virtualmachineinstances\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine instance\" }\r\n ,\"microsoft.scvmm/virtualmachineinstances/guestagents\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine instances guest agent\" }\r\n ,\"microsoft.scvmm/virtualmachineinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine instances hybrid identity metadata\" }\r\n ,\"microsoft.scvmm/virtualmachines\": { \"SingularDisplayName\": \"SCVMM virtual machine - Azure Arc\" }\r\n ,\"microsoft.scvmm/virtualmachinetemplates\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine template\" }\r\n ,\"microsoft.scvmm/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual network\" }\r\n ,\"microsoft.scvmm/vmmservers\": { \"SingularDisplayName\": \"SCVMM management server\" }\r\n ,\"microsoft.search/searchservices\": { \"SingularDisplayName\": \"Search service\" }\r\n ,\"microsoft.secretmanagementsampleprovider/forecasts\": { \"SingularDisplayName\": \"Microsoft.SecretManagementSampleProvider forecast\" }\r\n ,\"microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses\": { \"SingularDisplayName\": \"Microsoft.SecretSyncController Azure key vault secret provider class\" }\r\n ,\"microsoft.secretsynccontroller/secretsyncs\": { \"SingularDisplayName\": \"Microsoft.SecretSyncController secret sync\" }\r\n ,\"microsoft.security/adaptivenetworkhardenings\": { \"SingularDisplayName\": \"Microsoft.Security adaptive network hardening\" }\r\n ,\"microsoft.security/advancedthreatprotectionsettings\": { \"SingularDisplayName\": \"Microsoft.Security advanced threat protection setting\" }\r\n ,\"microsoft.security/alertssuppressionrules\": { \"SingularDisplayName\": \"Microsoft.Security alerts suppression rule\" }\r\n ,\"microsoft.security/apicollections\": { \"SingularDisplayName\": \"Microsoft.Security API collection\" }\r\n ,\"microsoft.security/applications\": { \"SingularDisplayName\": \"Microsoft.Security application\" }\r\n ,\"microsoft.security/assessmentmetadata\": { \"SingularDisplayName\": \"Microsoft.Security assessment metadata\" }\r\n ,\"microsoft.security/assessments\": { \"SingularDisplayName\": \"Microsoft.Security assessment\" }\r\n ,\"microsoft.security/assessments/governanceassignments\": { \"SingularDisplayName\": \"Microsoft.Security assessments governance assignment\" }\r\n ,\"microsoft.security/assessments/subassessments\": { \"SingularDisplayName\": \"Microsoft.Security assessments sub assessment\" }\r\n ,\"microsoft.security/assignments\": { \"SingularDisplayName\": \"Microsoft.Security assignment\" }\r\n ,\"microsoft.security/automations\": { \"SingularDisplayName\": \"Microsoft.Security automation\" }\r\n ,\"microsoft.security/autoprovisioningsettings\": { \"SingularDisplayName\": \"Microsoft.Security auto provisioning setting\" }\r\n ,\"microsoft.security/complianceresults\": { \"SingularDisplayName\": \"Microsoft.Security compliance result\" }\r\n ,\"microsoft.security/compliances\": { \"SingularDisplayName\": \"Microsoft.Security compliance\" }\r\n ,\"microsoft.security/connectors\": { \"SingularDisplayName\": \"Microsoft.Security connector\" }\r\n ,\"microsoft.security/customassessmentautomations\": { \"SingularDisplayName\": \"Microsoft.Security custom assessment automation\" }\r\n ,\"microsoft.security/defenderforstoragesettings\": { \"SingularDisplayName\": \"Microsoft.Security defender for storage setting\" }\r\n ,\"microsoft.security/defenderforstoragesettings/malwarescans\": { \"SingularDisplayName\": \"Microsoft.Security defender for storage settings malware scan\" }\r\n ,\"microsoft.security/devicesecuritygroups\": { \"SingularDisplayName\": \"Microsoft.Security device security group\" }\r\n ,\"microsoft.security/governancerules\": { \"SingularDisplayName\": \"Microsoft.Security governance rule\" }\r\n ,\"microsoft.security/governancerules/operationresults\": { \"SingularDisplayName\": \"Microsoft.Security governance rules operation result\" }\r\n ,\"microsoft.security/healthreports\": { \"SingularDisplayName\": \"Microsoft.Security health report\" }\r\n ,\"microsoft.security/informationprotectionpolicies\": { \"SingularDisplayName\": \"Microsoft.Security information protection policy\" }\r\n ,\"microsoft.security/iotsecuritysolutions\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solution\" }\r\n ,\"microsoft.security/iotsecuritysolutions/analyticsmodels\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions analytics model\" }\r\n ,\"microsoft.security/iotsecuritysolutions/analyticsmodels/aggregatedalerts\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions analytics models aggregated alert\" }\r\n ,\"microsoft.security/iotsecuritysolutions/analyticsmodels/aggregatedrecommendations\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions analytics models aggregated recommendation\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotalerts\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT alert\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotalerttypes\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT alert type\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotrecommendations\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT recommendation\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotrecommendationtypes\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT recommendation type\" }\r\n ,\"microsoft.security/locations/alerts\": { \"SingularDisplayName\": \"Security Alert\" }\r\n ,\"microsoft.security/mdeonboardings\": { \"SingularDisplayName\": \"Microsoft.Security mde onboarding\" }\r\n ,\"microsoft.security/pricings\": { \"SingularDisplayName\": \"Defender for Cloud\" }\r\n ,\"microsoft.security/pricings/securityoperators\": { \"SingularDisplayName\": \"Microsoft.Security pricings security operator\" }\r\n ,\"microsoft.security/regulatorycompliancestandards\": { \"SingularDisplayName\": \"Microsoft.Security regulatory compliance standard\" }\r\n ,\"microsoft.security/regulatorycompliancestandards/regulatorycompliancecontrols\": { \"SingularDisplayName\": \"Microsoft.Security regulatory compliance standards regulatory compliance control\" }\r\n ,\"microsoft.security/regulatorycompliancestandards/regulatorycompliancecontrols/regulatorycomplianceassessments\": { \"SingularDisplayName\": \"Microsoft.Security regulatory compliance standards regulatory compliance controls regulatory compliance assessment\" }\r\n ,\"microsoft.security/securescores\": { \"SingularDisplayName\": \"Microsoft.Security secure score\" }\r\n ,\"microsoft.security/securityconnectors\": { \"SingularDisplayName\": \"Microsoft.Security security connector\" }\r\n ,\"microsoft.security/securityconnectors/devops\": { \"SingularDisplayName\": \"Microsoft.Security security connectors devop\" }\r\n ,\"microsoft.security/securitycontacts\": { \"SingularDisplayName\": \"Microsoft.Security security contact\" }\r\n ,\"microsoft.security/sensitivitysettings\": { \"SingularDisplayName\": \"Microsoft.Security sensitivity setting\" }\r\n ,\"microsoft.security/servervulnerabilityassessments\": { \"SingularDisplayName\": \"Microsoft.Security server vulnerability assessment\" }\r\n ,\"microsoft.security/servervulnerabilityassessmentssettings\": { \"SingularDisplayName\": \"Microsoft.Security server vulnerability assessments setting\" }\r\n ,\"microsoft.security/settings\": { \"SingularDisplayName\": \"Microsoft.Security setting\" }\r\n ,\"microsoft.security/standards\": { \"SingularDisplayName\": \"Microsoft.Security standard\" }\r\n ,\"microsoft.security/workspacesettings\": { \"SingularDisplayName\": \"Microsoft.Security workspace setting\" }\r\n ,\"microsoft.securitycopilot/capacities\": { \"SingularDisplayName\": \"Microsoft Security Copilot compute capacity\" }\r\n ,\"microsoft.securitydetonation/chambers\": { \"SingularDisplayName\": \"Security Detonation Chamber\" }\r\n ,\"microsoft.securityinsightsarg/sentinel\": { \"SingularDisplayName\": \"Microsoft Sentinel\" }\r\n ,\"microsoft.serialconsole/consoleservices\": { \"SingularDisplayName\": \"Microsoft.SerialConsole console service\" }\r\n ,\"microsoft.serialconsole/serialports\": { \"SingularDisplayName\": \"Microsoft.SerialConsole serial port\" }\r\n ,\"microsoft.servicebus/namespaces\": { \"SingularDisplayName\": \"Service Bus namespace\" }\r\n ,\"microsoft.servicebus/namespaces/disasterrecoveryconfigs\": { \"SingularDisplayName\": \"Service Bus Geo-DR Alias\" }\r\n ,\"microsoft.servicebus/namespaces/queues\": { \"SingularDisplayName\": \"Service Bus queue\" }\r\n ,\"microsoft.servicebus/namespaces/topics\": { \"SingularDisplayName\": \"Service Bus topic\" }\r\n ,\"microsoft.servicebus/namespaces/topics/subscriptions\": { \"SingularDisplayName\": \"Service Bus Subscription\" }\r\n ,\"microsoft.servicefabric/clusters\": { \"SingularDisplayName\": \"Service Fabric cluster\" }\r\n ,\"microsoft.servicefabric/managedclusters\": { \"SingularDisplayName\": \"Service Fabric managed cluster\" }\r\n ,\"microsoft.servicefabricmesh/applications\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh application\" }\r\n ,\"microsoft.servicefabricmesh/applications/services\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh applications service\" }\r\n ,\"microsoft.servicefabricmesh/applications/services/replicas\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh applications services replica\" }\r\n ,\"microsoft.servicefabricmesh/gateways\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh gateway\" }\r\n ,\"microsoft.servicefabricmesh/networks\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh network\" }\r\n ,\"microsoft.servicefabricmesh/secrets\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh secret\" }\r\n ,\"microsoft.servicefabricmesh/secrets/values\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh secrets value\" }\r\n ,\"microsoft.servicefabricmesh/volumes\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh volume\" }\r\n ,\"microsoft.servicelinker/dryruns\": { \"SingularDisplayName\": \"Microsoft.ServiceLinker dryrun\" }\r\n ,\"microsoft.servicelinker/linkers\": { \"SingularDisplayName\": \"Microsoft.ServiceLinker linker\" }\r\n ,\"microsoft.servicenetworking/trafficcontrollers\": { \"SingularDisplayName\": \"Application Gateway for Containers\" }\r\n ,\"microsoft.serviceshub/connectors\": { \"SingularDisplayName\": \"Services Hub Connector\" }\r\n ,\"microsoft.signalrservice/signalr\": { \"SingularDisplayName\": \"SignalR\" }\r\n ,\"microsoft.signalrservice/signalr/replicas\": { \"SingularDisplayName\": \"SignalR Replica\" }\r\n ,\"microsoft.signalrservice/webpubsub\": { \"SingularDisplayName\": \"Web PubSub Service\" }\r\n ,\"microsoft.signalrservice/webpubsub/replicas\": { \"SingularDisplayName\": \"Web PubSub Service Replica\" }\r\n ,\"microsoft.skytap/billingnodes\": { \"SingularDisplayName\": \"Microsoft.Skytap billing node\" }\r\n ,\"microsoft.skytap/interfaces\": { \"SingularDisplayName\": \"Microsoft.Skytap interface\" }\r\n ,\"microsoft.skytap/nodes\": { \"SingularDisplayName\": \"Microsoft.Skytap node\" }\r\n ,\"microsoft.softwareplan/hybridusebenefits\": { \"SingularDisplayName\": \"Microsoft.SoftwarePlan hybrid use benefit\" }\r\n ,\"microsoft.solutions/applicationdefinitions\": { \"SingularDisplayName\": \"Service catalog managed application definition\" }\r\n ,\"microsoft.solutions/applications\": { \"SingularDisplayName\": \"Managed application\" }\r\n ,\"microsoft.solutions/jitrequests\": { \"SingularDisplayName\": \"Microsoft.Solutions JIT request\" }\r\n ,\"microsoft.sovereign/landingzoneaccounts\": { \"SingularDisplayName\": \"Landing zone accounts\" }\r\n ,\"microsoft.sovereign/landingzoneaccounts/landingzoneconfigurations\": { \"SingularDisplayName\": \"Landing Zone Configuration\" }\r\n ,\"microsoft.sovereign/landingzoneaccounts/landingzoneregistrations\": { \"SingularDisplayName\": \"Landing Zone Registration\" }\r\n ,\"microsoft.sovereign/landingzoneconfigurations\": { \"SingularDisplayName\": \"Landing Zone Configuration\" }\r\n ,\"microsoft.sovereign/landingzoneregistrations\": { \"SingularDisplayName\": \"Landing Zone Registration\" }\r\n ,\"microsoft.sovereign/transparencylogs\": { \"SingularDisplayName\": \"Transparency log\" }\r\n ,\"microsoft.sql/azuresql\": { \"SingularDisplayName\": \"Azure SQL resource\" }\r\n ,\"microsoft.sql/instancepools\": { \"SingularDisplayName\": \"Instance pool\" }\r\n ,\"microsoft.sql/managedinstances\": { \"SingularDisplayName\": \"SQL managed instance\" }\r\n ,\"microsoft.sql/managedinstances/databases\": { \"SingularDisplayName\": \"Managed database\" }\r\n ,\"microsoft.sql/servers\": { \"SingularDisplayName\": \"SQL server\" }\r\n ,\"microsoft.sql/servers/databases\": { \"SingularDisplayName\": \"SQL database\" }\r\n ,\"microsoft.sql/servers/elasticpools\": { \"SingularDisplayName\": \"SQL elastic pool\" }\r\n ,\"microsoft.sql/servers/jobagents\": { \"SingularDisplayName\": \"Elastic Job agent\" }\r\n ,\"microsoft.sql/virtualclusters\": { \"SingularDisplayName\": \"Virtual cluster\" }\r\n ,\"microsoft.sqlvirtualmachine/sqlvirtualmachinegroups\": { \"SingularDisplayName\": \"Microsoft.SqlVirtualMachine sql virtual machine group\" }\r\n ,\"microsoft.sqlvirtualmachine/sqlvirtualmachinegroups/availabilitygrouplisteners\": { \"SingularDisplayName\": \"Microsoft.SqlVirtualMachine sql virtual machine groups availability group listener\" }\r\n ,\"microsoft.sqlvirtualmachine/sqlvirtualmachines\": { \"SingularDisplayName\": \"SQL virtual machine\" }\r\n ,\"microsoft.standbypool/standbycontainergrouppools\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby container group pool\" }\r\n ,\"microsoft.standbypool/standbycontainergrouppools/runtimeviews\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby container group pools runtime view\" }\r\n ,\"microsoft.standbypool/standbyvirtualmachinepools\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby virtual machine pool\" }\r\n ,\"microsoft.standbypool/standbyvirtualmachinepools/runtimeviews\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby virtual machine pools runtime view\" }\r\n ,\"microsoft.standbypool/standbyvirtualmachinepools/standbyvirtualmachines\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby virtual machine pools standby virtual machine\" }\r\n ,\"microsoft.storage/storageaccounts\": { \"SingularDisplayName\": \"Storage account\" }\r\n ,\"microsoft.storageactions/storagetasks\": { \"SingularDisplayName\": \"Storage task - Azure Storage Actions\" }\r\n ,\"microsoft.storagecache/amlfilesystems\": { \"SingularDisplayName\": \"Azure Managed Lustre\" }\r\n ,\"microsoft.storagecache/caches\": { \"SingularDisplayName\": \"HPC cache\" }\r\n ,\"microsoft.storageinsights/storagecollectionrules\": { \"SingularDisplayName\": \"Microsoft.StorageInsights storage collection rule\" }\r\n ,\"microsoft.storagemover/storagemovers\": { \"SingularDisplayName\": \"Storage mover\" }\r\n ,\"microsoft.storagepool/diskpools\": { \"SingularDisplayName\": \"Microsoft.StoragePool disk pool\" }\r\n ,\"microsoft.storagepool/diskpools/iscsitargets\": { \"SingularDisplayName\": \"Microsoft.StoragePool disk pools iscsi target\" }\r\n ,\"microsoft.storagesync/storagesyncservices\": { \"SingularDisplayName\": \"Storage Sync Service\" }\r\n ,\"microsoft.storagetasks/storagetasks\": { \"SingularDisplayName\": \"Microsoft.StorageTasks storage task\" }\r\n ,\"microsoft.storsimple/managers\": { \"SingularDisplayName\": \"StorSimple device manager\" }\r\n ,\"microsoft.storsimple/managers/accesscontrolrecords\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers access control record\" }\r\n ,\"microsoft.storsimple/managers/bandwidthsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers bandwidth setting\" }\r\n ,\"microsoft.storsimple/managers/certificates\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers certificate\" }\r\n ,\"microsoft.storsimple/managers/devices\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers device\" }\r\n ,\"microsoft.storsimple/managers/devices/alertsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices alert setting\" }\r\n ,\"microsoft.storsimple/managers/devices/backuppolicies\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices backup policy\" }\r\n ,\"microsoft.storsimple/managers/devices/backuppolicies/schedules\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices backup policies schedule\" }\r\n ,\"microsoft.storsimple/managers/devices/backupschedulegroups\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices backup schedule group\" }\r\n ,\"microsoft.storsimple/managers/devices/chapsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices chap setting\" }\r\n ,\"microsoft.storsimple/managers/devices/fileservers\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices fileserver\" }\r\n ,\"microsoft.storsimple/managers/devices/fileservers/shares\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices fileservers share\" }\r\n ,\"microsoft.storsimple/managers/devices/iscsiservers\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices iscsiserver\" }\r\n ,\"microsoft.storsimple/managers/devices/iscsiservers/disks\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices iscsiservers disk\" }\r\n ,\"microsoft.storsimple/managers/devices/jobs\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices job\" }\r\n ,\"microsoft.storsimple/managers/devices/networksettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices network setting\" }\r\n ,\"microsoft.storsimple/managers/devices/securitysettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices security setting\" }\r\n ,\"microsoft.storsimple/managers/devices/timesettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices time setting\" }\r\n ,\"microsoft.storsimple/managers/devices/updatesummary\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices update summary\" }\r\n ,\"microsoft.storsimple/managers/devices/volumecontainers\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices volume container\" }\r\n ,\"microsoft.storsimple/managers/devices/volumecontainers/volumes\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices volume containers volume\" }\r\n ,\"microsoft.storsimple/managers/encryptionsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers encryption setting\" }\r\n ,\"microsoft.storsimple/managers/extendedinformation\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers extended information\" }\r\n ,\"microsoft.storsimple/managers/storageaccountcredentials\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers storage account credential\" }\r\n ,\"microsoft.storsimple/managers/storagedomains\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers storage domain\" }\r\n ,\"microsoft.streamanalytics/clusters\": { \"SingularDisplayName\": \"Stream Analytics cluster\" }\r\n ,\"microsoft.streamanalytics/streamingjobs\": { \"SingularDisplayName\": \"Stream Analytics job\" }\r\n ,\"microsoft.subscription/aliases\": { \"SingularDisplayName\": \"Microsoft.Subscription aliase\" }\r\n ,\"microsoft.subscription/changetenantrequest\": { \"SingularDisplayName\": \"Microsoft.Subscription change tenant request\" }\r\n ,\"microsoft.subscription/policies\": { \"SingularDisplayName\": \"Microsoft.Subscription policy\" }\r\n ,\"microsoft.subscription/subscriptiondefinitions\": { \"SingularDisplayName\": \"Microsoft.Subscription subscription definition\" }\r\n ,\"microsoft.subscription/subscriptionoperations\": { \"SingularDisplayName\": \"Microsoft.Subscription subscription operation\" }\r\n ,\"microsoft.support/fileworkspaces\": { \"SingularDisplayName\": \"Microsoft.Support file workspace\" }\r\n ,\"microsoft.support/fileworkspaces/files\": { \"SingularDisplayName\": \"Microsoft.Support file workspaces file\" }\r\n ,\"microsoft.support/services\": { \"SingularDisplayName\": \"Microsoft.Support service\" }\r\n ,\"microsoft.support/services/problemclassifications\": { \"SingularDisplayName\": \"Microsoft.Support services problem classification\" }\r\n ,\"microsoft.support/supporttickets\": { \"SingularDisplayName\": \"Support Request\" }\r\n ,\"microsoft.sustainabilityservices/calculations\": { \"SingularDisplayName\": \"Microsoft.SustainabilityServices calculation\" }\r\n ,\"microsoft.symphony/instances\": { \"SingularDisplayName\": \"Microsoft.Symphony instance\" }\r\n ,\"microsoft.symphony/solutions\": { \"SingularDisplayName\": \"Microsoft.Symphony solution\" }\r\n ,\"microsoft.symphony/targets\": { \"SingularDisplayName\": \"Microsoft.Symphony target\" }\r\n ,\"microsoft.synapse/privatelinkhubs\": { \"SingularDisplayName\": \"Synapse private link hub\" }\r\n ,\"microsoft.synapse/workspaces\": { \"SingularDisplayName\": \"Synapse workspace\" }\r\n ,\"microsoft.synapse/workspaces/bigdatapools\": { \"SingularDisplayName\": \"Apache Spark pool\" }\r\n ,\"microsoft.synapse/workspaces/kustopools\": { \"SingularDisplayName\": \"Data Explorer pool\" }\r\n ,\"microsoft.synapse/workspaces/kustopools/databases\": { \"SingularDisplayName\": \"Data Explorer Database\" }\r\n ,\"microsoft.synapse/workspaces/scopepools\": { \"SingularDisplayName\": \"SCOPE pool\" }\r\n ,\"microsoft.synapse/workspaces/sqlpools\": { \"SingularDisplayName\": \"Dedicated SQL pool\" }\r\n ,\"microsoft.syntex/accounts\": { \"SingularDisplayName\": \"Microsoft.Syntex account\" }\r\n ,\"microsoft.syntex/documentprocessors\": { \"SingularDisplayName\": \"Microsoft.Syntex document processor\" }\r\n ,\"microsoft.test/healthdataaiservices\": { \"SingularDisplayName\": \"Azure Health Data and AI Services\" }\r\n ,\"microsoft.timeseriesinsights/environments\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environment\" }\r\n ,\"microsoft.timeseriesinsights/environments/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environments access policy\" }\r\n ,\"microsoft.timeseriesinsights/environments/eventsources\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environments event source\" }\r\n ,\"microsoft.timeseriesinsights/environments/referencedatasets\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environments reference data set\" }\r\n ,\"microsoft.toolchainorchestrator/activations\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator activation\" }\r\n ,\"microsoft.toolchainorchestrator/campaigns\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator campaign\" }\r\n ,\"microsoft.toolchainorchestrator/campaigns/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator campaigns version\" }\r\n ,\"microsoft.toolchainorchestrator/catalogs\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator catalog\" }\r\n ,\"microsoft.toolchainorchestrator/catalogs/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator catalogs version\" }\r\n ,\"microsoft.toolchainorchestrator/instances\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator instance\" }\r\n ,\"microsoft.toolchainorchestrator/instances/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator instances version\" }\r\n ,\"microsoft.toolchainorchestrator/solutions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator solution\" }\r\n ,\"microsoft.toolchainorchestrator/solutions/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator solutions version\" }\r\n ,\"microsoft.toolchainorchestrator/targets\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator target\" }\r\n ,\"microsoft.toolchainorchestrator/targets/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator targets version\" }\r\n ,\"microsoft.usagebilling/accounts\": { \"SingularDisplayName\": \"Microsoft.UsageBilling account\" }\r\n ,\"microsoft.usagebilling/accounts/dataexports\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts data export\" }\r\n ,\"microsoft.usagebilling/accounts/inputs\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts input\" }\r\n ,\"microsoft.usagebilling/accounts/metricexports\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts metric export\" }\r\n ,\"microsoft.usagebilling/accounts/pav2outputs\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts pav2output\" }\r\n ,\"microsoft.usagebilling/accounts/pipelines\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts pipeline\" }\r\n ,\"microsoft.usagebilling/accounts/pipelines/outputselectors\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts pipelines output selector\" }\r\n ,\"microsoft.verifiedid/authorities\": { \"SingularDisplayName\": \"Microsoft.VerifiedId authority\" }\r\n ,\"microsoft.videoindexer/accounts\": { \"SingularDisplayName\": \"Azure AI Video Indexer\" }\r\n ,\"microsoft.virtualmachineimages/imagetemplates\": { \"SingularDisplayName\": \"Image template\" }\r\n ,\"microsoft.visualstudio/account\": { \"SingularDisplayName\": \"Azure DevOps organization\" }\r\n ,\"microsoft.vmware/resourcepools\": { \"SingularDisplayName\": \"Microsoft.VMware resource pool\" }\r\n ,\"microsoft.vmware/vcenters\": { \"SingularDisplayName\": \"Microsoft.VMware vcenter\" }\r\n ,\"microsoft.vmware/vcenters/inventoryitems\": { \"SingularDisplayName\": \"Microsoft.VMware vcenters inventory item\" }\r\n ,\"microsoft.vmware/virtualmachines\": { \"SingularDisplayName\": \"Microsoft.VMware virtual machine\" }\r\n ,\"microsoft.vmware/virtualmachinetemplates\": { \"SingularDisplayName\": \"Microsoft.VMware virtual machine template\" }\r\n ,\"microsoft.vmware/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.VMware virtual network\" }\r\n ,\"microsoft.vmwarecloudsimple/dedicatedcloudnodes\": { \"SingularDisplayName\": \"Microsoft.VMwareCloudSimple dedicated cloud node\" }\r\n ,\"microsoft.vmwarecloudsimple/dedicatedcloudservices\": { \"SingularDisplayName\": \"Microsoft.VMwareCloudSimple dedicated cloud service\" }\r\n ,\"microsoft.vmwarecloudsimple/virtualmachines\": { \"SingularDisplayName\": \"Microsoft.VMwareCloudSimple virtual machine\" }\r\n ,\"microsoft.vnfmanager/devices\": { \"SingularDisplayName\": \"Microsoft.VnfManager device\" }\r\n ,\"microsoft.vnfmanager/vendors\": { \"SingularDisplayName\": \"Microsoft.VnfManager vendor\" }\r\n ,\"microsoft.vnfmanager/vendors/skus\": { \"SingularDisplayName\": \"Microsoft.VnfManager vendors SKU\" }\r\n ,\"microsoft.vnfmanager/vnfs\": { \"SingularDisplayName\": \"Microsoft.VnfManager vnf\" }\r\n ,\"microsoft.voiceservices/communicationsgateways\": { \"SingularDisplayName\": \"Communications Gateway\" }\r\n ,\"microsoft.voiceservices/communicationsgateways/testlines\": { \"SingularDisplayName\": \"Communications Gateway Test Line\" }\r\n ,\"microsoft.vsonline/accounts\": { \"SingularDisplayName\": \"Microsoft.VSOnline account\" }\r\n ,\"microsoft.vsonline/plans\": { \"SingularDisplayName\": \"Visual Studio Online Plan\" }\r\n ,\"microsoft.web/certificates\": { \"SingularDisplayName\": \"Microsoft.Web certificate\" }\r\n ,\"microsoft.web/connectiongateways\": { \"SingularDisplayName\": \"App Service on-premises data gateway\" }\r\n ,\"microsoft.web/connections\": { \"SingularDisplayName\": \"App Service API connection\" }\r\n ,\"microsoft.web/containerapps\": { \"SingularDisplayName\": \"Microsoft.Web container app\" }\r\n ,\"microsoft.web/containerapps/revisions\": { \"SingularDisplayName\": \"Microsoft.Web container apps revision\" }\r\n ,\"microsoft.web/customapis\": { \"SingularDisplayName\": \"Logic apps custom connector\" }\r\n ,\"microsoft.web/deletedsites\": { \"SingularDisplayName\": \"Microsoft.Web deleted site\" }\r\n ,\"microsoft.web/hostingenvironments\": { \"SingularDisplayName\": \"App Service Environment\" }\r\n ,\"microsoft.web/ishostingenvironmentnameavailable\": { \"SingularDisplayName\": \"Microsoft.Web ishostingenvironmentnameavailable\" }\r\n ,\"microsoft.web/kubeenvironments\": { \"SingularDisplayName\": \"App Service Kubernetes Environment\" }\r\n ,\"microsoft.web/publishingusers\": { \"SingularDisplayName\": \"Microsoft.Web publishing user\" }\r\n ,\"microsoft.web/serverfarms\": { \"SingularDisplayName\": \"App Service plan\" }\r\n ,\"microsoft.web/sites\": { \"SingularDisplayName\": \"App Service web app\" }\r\n ,\"microsoft.web/sites/slots\": { \"SingularDisplayName\": \"App Service deployment slot\" }\r\n ,\"microsoft.web/sourcecontrols\": { \"SingularDisplayName\": \"Microsoft.Web sourcecontrol\" }\r\n ,\"microsoft.web/staticsites\": { \"SingularDisplayName\": \"Static Web App\" }\r\n ,\"microsoft.weightsandbiases/instances\": { \"SingularDisplayName\": \"Azure Native WeightsAndBiases Cloud Service\" }\r\n ,\"microsoft.whiteboxcadlprovider/whiteboxresources\": { \"SingularDisplayName\": \"Microsoft.WhiteBoxCadlProvider white box resource\" }\r\n ,\"microsoft.windows365/cloudpcdelegatedmsis\": { \"SingularDisplayName\": \"Microsoft.Windows365 cloud pc delegated msi\" }\r\n ,\"microsoft.windowsesu/multipleactivationkeys\": { \"SingularDisplayName\": \"Microsoft.WindowsESU multiple activation key\" }\r\n ,\"microsoft.windowsiot/deviceservices\": { \"SingularDisplayName\": \"Microsoft.WindowsIoT device service\" }\r\n ,\"microsoft.windowspushnotificationservices/registrations\": { \"SingularDisplayName\": \"Microsoft.WindowsPushNotificationServices registration\" }\r\n ,\"microsoft.workloadmonitor/monitors\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitor\" }\r\n ,\"microsoft.workloadmonitor/monitors/history\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitors history\" }\r\n ,\"microsoft.workloads/connectors\": { \"SingularDisplayName\": \"Microsoft.Workloads connector\" }\r\n ,\"microsoft.workloads/connectors/acssbackups\": { \"SingularDisplayName\": \"Microsoft.Workloads connectors acss backup\" }\r\n ,\"microsoft.workloads/connectors/amsinsights\": { \"SingularDisplayName\": \"Microsoft.Workloads connectors ams insight\" }\r\n ,\"microsoft.workloads/connectors/sapvirtualinstancemonitors\": { \"SingularDisplayName\": \"Microsoft.Workloads connectors sap virtual instance monitor\" }\r\n ,\"microsoft.workloads/epicvirtualinstances\": { \"SingularDisplayName\": \"Virtual Instance for Epic solution\" }\r\n ,\"microsoft.workloads/insights\": { \"SingularDisplayName\": \"Microsoft.Workloads insight\" }\r\n ,\"microsoft.workloads/monitors\": { \"SingularDisplayName\": \"Azure Monitor for SAP solutions\" }\r\n ,\"microsoft.workloads/oraclevirtualinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads oracle virtual instance\" }\r\n ,\"microsoft.workloads/oraclevirtualinstances/databaseinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads oracle virtual instances database instance\" }\r\n ,\"microsoft.workloads/phpworkloads\": { \"SingularDisplayName\": \"Microsoft.Workloads php workload\" }\r\n ,\"microsoft.workloads/phpworkloads/wordpressinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads php workloads wordpress instance\" }\r\n ,\"microsoft.workloads/sapdiscoverysites\": { \"SingularDisplayName\": \"Microsoft.Workloads sap discovery site\" }\r\n ,\"microsoft.workloads/sapdiscoverysites/sapinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads sap discovery sites sap instance\" }\r\n ,\"microsoft.workloads/sapdiscoverysites/sapinstances/serverinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads sap discovery sites sap instances server instance\" }\r\n ,\"microsoft.workloads/sapvirtualinstances\": { \"SingularDisplayName\": \"Virtual Instance for SAP solutions\" }\r\n ,\"microsoft.workloads/sapvirtualinstances/applicationinstances\": { \"SingularDisplayName\": \"App server instance for SAP solutions\" }\r\n ,\"microsoft.workloads/sapvirtualinstances/centralinstances\": { \"SingularDisplayName\": \"Central service instance for SAP solutions\" }\r\n ,\"microsoft.workloads/sapvirtualinstances/databaseinstances\": { \"SingularDisplayName\": \"Database for SAP solutions\" }\r\n ,\"neon.postgres/organizations\": { \"SingularDisplayName\": \"Neon Serverless Postgres Resource\" }\r\n ,\"newrelic.observability/monitors\": { \"SingularDisplayName\": \"New Relic\" }\r\n ,\"nginx.nginxplus/nginxdeployments\": { \"SingularDisplayName\": \"NGINXaaS\" }\r\n ,\"oracle.database/autonomousdatabases\": { \"SingularDisplayName\": \"Autonomous Database\" }\r\n ,\"oracle.database/cloudexadatainfrastructures\": { \"SingularDisplayName\": \"Oracle Exadata Infrastructure\" }\r\n ,\"oracle.database/cloudvmclusters\": { \"SingularDisplayName\": \"Oracle Exadata VM Cluster\" }\r\n ,\"oracle.database/oraclesubscriptions\": { \"SingularDisplayName\": \"OracleSubscription\" }\r\n ,\"paloaltonetworks.cloudngfw/firewalls\": { \"SingularDisplayName\": \"Cloud NGFW by Palo Alto Networks\" }\r\n ,\"paloaltonetworks.cloudngfw/globalrulestacks\": { \"SingularDisplayName\": \"Global Rulestack\" }\r\n ,\"paloaltonetworks.cloudngfw/localrulestacks\": { \"SingularDisplayName\": \"Local Rulestack for Cloud NGFW by Palo Alto Networks\" }\r\n ,\"pinecone.vectordb/organizations\": { \"SingularDisplayName\": \"Azure Native Pinecone Cloud Service\" }\r\n ,\"purestorage.block/reservations\": { \"SingularDisplayName\": \"Azure Native Pure Storage Cloud Service\" }\r\n ,\"purestorage.block/storagepools\": { \"SingularDisplayName\": \"Storage pool\" }\r\n ,\"purestorage.block/storagepools/avsstoragecontainers\": { \"SingularDisplayName\": \"PureStorage.Block storage pools avs storage container\" }\r\n ,\"qumulo.qaas/storages\": { \"SingularDisplayName\": \"Qumulo.QaaS storage\" }\r\n ,\"qumulo.storage/filesystems\": { \"SingularDisplayName\": \"Azure Native Qumulo Scalable File Service\" }\r\n ,\"solarwinds.observability/organizations\": { \"SingularDisplayName\": \"SolarWinds Observability\" }\r\n ,\"splitio.experimentation/experimentationworkspaces\": { \"SingularDisplayName\": \"Split Experimentation Workspace\" }\r\n ,\"wandisco.fusion/migrators\": { \"SingularDisplayName\": \"LiveData Migrator\" }\r\n ,\"wandisco.fusion/migrators/datatransferagents\": { \"SingularDisplayName\": \"Data Transfer Agent\" }\r\n ,\"wandisco.fusion/migrators/exclusiontemplates\": { \"SingularDisplayName\": \"Exclusion\" }\r\n ,\"wandisco.fusion/migrators/livedatamigrations\": { \"SingularDisplayName\": \"Migration\" }\r\n ,\"wandisco.fusion/migrators/metadatamigrations\": { \"SingularDisplayName\": \"Metadata Migration\" }\r\n ,\"wandisco.fusion/migrators/metadatatargets\": { \"SingularDisplayName\": \"Metadata Target\" }\r\n ,\"wandisco.fusion/migrators/pathmappings\": { \"SingularDisplayName\": \"Path Mapping\" }\r\n ,\"wandisco.fusion/migrators/targets\": { \"SingularDisplayName\": \"Target\" }\r\n ,\"wandisco.fusion/migrators/verifications\": { \"SingularDisplayName\": \"Verification\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#5": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n// resource_type\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData')\r\nresource_type(id: string) {\r\n coalesce(_resource_type_1(id), _resource_type_2(id), _resource_type_3(id), _resource_type_4(id))\r\n}\r\n",
+ "$fxv#6": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Common utility functions\r\n//\r\n// TIP: Use Ctrl+K,Ctrl+0 to collapse all regions in VS Code\r\n//======================================================================================================================\r\n\r\n\r\n//===| Date functions |=================================================================================================\r\n\r\n// monthstring\r\n.create-or-alter function \r\nwith (docstring = @'Returns the name of the month for the specified date (e.g. Jan or January)', folder =@'Common') \r\nmonthstring(['date']: datetime, length: int = 9)\r\n{\r\n substring(dynamic(['January','February','March','April','May','June','July','August','September','October','November','December'])[getmonth(['date']) - 1], 0, length)\r\n}\r\n\r\n// datestring\r\n.create-or-alter function \r\nwith (docstring = @'Converts 2 dates into a simple, user-friendly date range (e.g. Jan 1-Jan 3)', folder =@'Common') \r\ndatestring(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n let month = (d: datetime) { monthstring(d, 3) };\r\n let endDate = iff(end == datetime('0001-01-01'), start, end);\r\n let sameDate = startofday(start) == startofday(endDate);\r\n let sameMonth = startofmonth(start) == startofmonth(endDate);\r\n let sameYear = startofyear(start) == startofyear(endDate);\r\n let fullMonth = startofday(start) == startofmonth(start) and startofday(endDate) == startofday(endofmonth(endDate));\r\n let fullYear = startofday(start) == startofyear(start) and startofday(endDate) == startofday(endofyear(endDate));\r\n let currentYear = sameYear and startofyear(start) == startofyear(now());\r\n case(\r\n // Full year | yyyy (same year) / yyyy-yyyy (diff years)\r\n fullYear,\r\n strcat(getyear(start), iff(sameYear, '', strcat('-', getyear(endDate)))),\r\n // 1 full mo, same year | Mmm yyyy\r\n fullMonth and sameMonth and sameYear,\r\n strcat(month(start), ' ', getyear(start)),\r\n // 2+ full mo, same year | Mmm-Mmm (current year) / Mmm-Mmm yyyy (other year)\r\n fullMonth and sameYear,\r\n strcat(month(start), '-', month(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // Full mo, diff year | Mmm yyyy-Mmm yyyy\r\n fullMonth and not(sameYear),\r\n strcat(month(start), ' ', getyear(start), '-', month(endDate), ' ', getyear(endDate)),\r\n // Same date | Mmm d (current year) / Mmm d, yyyy (other year)\r\n sameDate,\r\n strcat(month(start), ' ', dayofmonth(start), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // 1 partial M, same Y | Mmm d-d (current year) / Mmm d-d, yyyy (other year)\r\n not(fullMonth) and sameMonth and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', dayofmonth(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // 2+ partial M, same Y | Mmm d-Mmm d (current year) / Mmm d-Mmm d, yyyy (other year)\r\n not(fullMonth) and not(sameMonth) and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', month(endDate), ' ', dayofmonth(endDate), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // All other cases | Mmm d, yyyy-Mmm d, yyyy\r\n strcat(month(start), ' ', dayofmonth(start), ', ', getyear(start), '-', month(endDate), ' ', dayofmonth(endDate), ', ', getyear(endDate))\r\n )\r\n}\r\n\r\n// daterange\r\n.create-or-alter function \r\nwith (docstring = @'DEPRECATED: Please use datestring(); function will be removed on or after the Jan 2026 release', folder =@'Common') \r\ndaterange(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n datestring(start, end)\r\n}\r\n\r\n// monthsago\r\n.create-or-alter function \r\nwith (docstring = 'DEPRECATED: Please use startofmonth(now(), -<# of months>); function will be removed on or after the Jan 2026 release', folder = 'Common')\r\nmonthsago(months: int)\r\n{\r\n datetime_add('month', -months, startofmonth(now()))\r\n}\r\n\r\n\r\n//===| Number functions |===============================================================================================\r\n// NOTE: Must be defined before string converters\r\n\r\n// delta\r\n.create-or-alter function \r\nwith (docstring = @'Compares 2 values and returns the percentage change from oldval to newval', folder =@'Common') \r\ndelta(oldval: double, newval: double)\r\n{\r\n (newval - todouble(oldval))/oldval\r\n}\r\n\r\n// percentOfTotal\r\n// NOTE: Must be before percent() function\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercentOfTotal(t: (Count: long), tot: long)\r\n{\r\n let total = todouble(tot);\r\n t \r\n | extend Percent = round(Count / total * 100, 3) \r\n | order by Count desc\r\n}\r\n\r\n// percent\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercent(t: (Count: long))\r\n{\r\n let total = todouble(toscalar(t | summarize sum(Count)));\r\n percentOfTotal(t, total)\r\n}\r\n\r\n// plusminus\r\n.create-or-alter function \r\nwith (docstring = 'Shows a +/- sign based on the direction of the number', folder = 'Common')\r\nplusminus(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, val, strcat('+', val))\r\n}\r\n\r\n// updown\r\n.create-or-alter function \r\nwith (docstring = 'Shows an up/down arrow based on the direction of the number', folder = 'Common')\r\nupdown(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, strcat('β', substring(val, 1)), strcat('β', val))\r\n}\r\n\r\n\r\n//===| String functions |===============================================================================================\r\n\r\n// percentstring\r\n// NOTE: Must be defined before deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a percentage and render as a string', folder = 'Common')\r\npercentstring(num: double, total: double = 1.0, places: int = 9)\r\n{\r\n let value = 1.0 * num / total * 100;\r\n strcat(case(\r\n places != 9, round(value, places),\r\n value < 10, round(value, 2),\r\n round(value, 1)\r\n ), '%')\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// arraystring\r\n.create-or-alter function \r\nwith (docstring = 'Convert an array to a comma-delimited string', folder = 'Common')\r\narraystring(arr: dynamic)\r\n{\r\n replace_string(replace_regex(replace_regex(replace_regex(replace_regex(replace_regex(\r\n tostring(arr)\r\n , @'^\\[\"', '')\r\n , @'\"\\]$', '')\r\n , @'^, ', '')\r\n , @', $', '')\r\n , @'^\\[]$', '')\r\n , '\",\"', ', ')\r\n}\r\n\r\n// deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a delta percentage and render as a string', folder = 'Common')\r\ndeltastring(oldval: double, newval: double, places: int = 1, useArrows: bool = false)\r\n{\r\n let d = delta(oldval, newval);\r\n strcat(case(useArrows and d > 0, 'β', useArrows and d < 0, 'β', d < 0, '-', ''), percentstring(abs(d), 1, places))\r\n}\r\n\r\n// diffstring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate the difference and render as a string', folder = 'Common')\r\ndiffstring(oldval: double, newval: double, places: int = 1)\r\n{\r\n plusminus(round(newval - oldval, places))\r\n}\r\n\r\n// numberstring\r\n.create-or-alter function \r\nwith (docstring = 'Convert a number to a string', folder = 'Common')\r\nnumberstring(num: double, abbrev: bool = true)\r\n{\r\n replace_regex(case(\r\n num >= 10000000000000, strcat(round(1.0 * num / 1000000000000, 1), 'T'),\r\n num >= 1000000000000, strcat(round(1.0 * num / 1000000000000, 2), 'T'),\r\n num >= 10000000000, strcat(round(1.0 * num / 1000000000, 1), 'B'),\r\n num >= 1000000000, strcat(round(1.0 * num / 1000000000, 2), 'B'),\r\n num >= 10000000, strcat(round(1.0 * num / 1000000, 1), 'M'),\r\n num >= 1000000, strcat(round(1.0 * num / 1000000, 2), 'M'),\r\n num >= 10000, strcat(round(1.0 * num / 1000, 1), 'K'),\r\n // Kusto doesn't support back-refs yet -- num > 1000, replace_regex(tostring(num), @'(\\d)(?=(\\d{3})+\\.)', @'\\1,'), // See https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/re2-library\r\n num > 1000, replace_regex(tostring(num), @'([0-9]{3})$', @',\\1'), //num / 1000, ',', substring(tostring(num), 0) - (num / 1000 * 1000)),\r\n tostring(num)\r\n ), @'\\.0$', '')\r\n}\r\n\r\n\r\n//===| Other |==========================================================================================================\r\n\r\n// ifempty\r\n.create-or-alter function \r\nwith (docstring = 'Replaces an empty value with the specified default value', folder = 'Common')\r\nifempty(val: dynamic, defaultVal: dynamic)\r\n{\r\n iff(isempty(val), defaultVal, val)\r\n}\r\n",
+ "$fxv#7": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Ingestion database\r\n// Used for data ingestion, normalization, and cleansing.\r\n//\r\n// Data ingestion workflow:\r\n// - All data is ingested into tables named \"*_raw\". These tables have a union schema to support multiple sources and versions.\r\n// - All data is transformed to the latest FOCUS schema using an update policy into a table named after the version (e.g., \"1.0\" = \"_v1_0\").\r\n// - Data ingestion from previous version of hubs will remain in the versioned tables.\r\n// - Data is read from versioned functions in the Hub database. See HubSetup.kql for details.\r\n//\r\n// To add a new FOCUS versions:\r\n// 1. Add new columns to the *_raw tables per dataset\r\n// 2. Add new *_final_vX_Y tables per dataset\r\n// 3. Add new *_transform_vX_Y functions per dataset\r\n// 4. Change the update policy for the *_raw tables to use the new transform functions\r\n// 5. Update HubSetup.kql to read from the new *_final_vX_Y tables\r\n//======================================================================================================================\r\n\r\n// For allowed commands, see https://learn.microsoft.com/azure/data-explorer/database-script\r\n\r\n//===| Settings |=======================================================================================================\r\n\r\n.create-merge table HubSettingsLog (\r\n version: string,\r\n scopes: dynamic,\r\n retention: dynamic\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// HubSettings function\r\n.create-or-alter function\r\nwith (docstring='Gets the latest version of hub settings.', folder='Settings')\r\nHubSettings()\r\n{\r\n HubSettingsLog\r\n | extend timestamp = ingestion_time()\r\n | summarize arg_max(timestamp, *)\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// HubScopes function\r\n.create-or-alter function\r\nwith (docstring='Gets the currently configured scopes.', folder='Settings')\r\nHubScopes()\r\n{\r\n HubSettings\r\n | project scopes\r\n | mv-expand scopes\r\n}\r\n\r\n\r\n//===| Open data |======================================================================================================\r\n\r\n// PricingUnits\r\n.create-merge table PricingUnits ( \r\n x_PricingUnitDescription: string,\r\n x_PricingBlockSize: decimal,\r\n PricingUnit: string\r\n)\r\n\r\n// Regions\r\n.create-merge table Regions(\r\n ResourceLocation: string,\r\n RegionId: string,\r\n RegionName: string\r\n)\r\n\r\n// ResourceTypes\r\n.create-merge table ResourceTypes(\r\n x_ResourceType: string,\r\n SingularDisplayName: string,\r\n PluralDisplayName: string,\r\n LowerSingularDisplayName: string,\r\n LowerPluralDisplayName: string,\r\n IsPreview: bool,\r\n Description: string,\r\n IconUri: string\r\n)\r\n\r\n// Services\r\n.create-merge table Services(\r\n x_ConsumedService: string,\r\n x_ResourceType: string,\r\n ServiceName: string,\r\n ServiceCategory: string,\r\n ServiceSubcategory: string,\r\n PublisherName: string,\r\n x_PublisherCategory: string,\r\n x_Environment: string,\r\n x_ServiceModel: string\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// parse_resourceid\r\n.create-or-alter function \r\nwith (docstring = 'Parses an Azure resource ID to extract resource attributes like the name, type, resource group, and subaccount ID.', folder = 'Common')\r\nparse_resourceid(resourceId: string) {\r\n let ResourceId = tolower(resourceId);\r\n // let ResourceId = tolower('/providers/Microsoft.BillingBenefits/savingsPlanOrders/2d2e284b-0638-427e-b8c6-1b874d4f17c8/sp/xxx');\r\n let SubAccountId = tostring(extract('/subscriptions/[^/]+', 1, ResourceId));\r\n let x_ResourceGroupName = tostring(extract('/resourcegroups/[^/]+', 1, ResourceId));\r\n let providerPath = iff(ResourceId !contains '/providers/', '', split(iff(ResourceId startswith '/subscriptions/', strcat('/providers/microsoft.resources/', ResourceId), ResourceId), '/providers/')[-1]);\r\n let x_ResourceProvider = iff(isempty(providerPath), '', split(providerPath, '/')[0]);\r\n let tmp_ResourceProviderPath = iff(isempty(providerPath), '', substring(providerPath, strlen(x_ResourceProvider) + 1));\r\n let segments = split(tmp_ResourceProviderPath, '/');\r\n let ResourceName = trim(@'/+', replace_string(strcat_array(array_iff(\r\n dynamic([false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]),\r\n segments, dynamic([])), '/'), '//', '/'));\r\n let x_ResourceTypePath = trim(@'/+', replace_string(strcat_array(array_iff(\r\n dynamic([true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false]),\r\n segments, dynamic([])), '/'), '//', '/'));\r\n let xRT = iff(isempty(x_ResourceProvider) or isempty(x_ResourceTypePath), '', strcat(x_ResourceProvider, '/', x_ResourceTypePath));\r\n // TODO: Remove ResourceType in 0.9\r\n bag_pack('ResourceId', ResourceId, 'ResourceName', ResourceName, 'ResourceType', xRT, 'SubAccountId', SubAccountId, 'x_ResourceGroupName', x_ResourceGroupName, 'x_ResourceProvider', x_ResourceProvider, 'x_ResourceType', xRT)\r\n}\r\n\r\n\r\n//===| Prices |=========================================================================================================\r\n// NOTE: Must be before cost details.\r\n//\r\n// Supported versions:\r\n// - MS EA 2023-05-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/price-sheet-ea\r\n// - MS MCA 2023-05-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/price-sheet-mca\r\n//======================================================================================================================\r\n\r\n// Prices_raw table\r\n.create-merge table Prices_raw (\r\n BasePrice: decimal, // Azure EA + MCA\r\n BillingAccountId: string, // Azure MCA\r\n BillingAccountName: string, // Azure MCA\r\n BillingCurrency: string, // Azure MCA\r\n BillingProfileId: string, // Azure MCA\r\n BillingProfileName: string, // Azure MCA\r\n Currency: string, // Azure MCA\r\n CurrencyCode: string, // Azure EA \r\n EffectiveEndDate: datetime, // Azure MCA\r\n EffectiveStartDate: datetime, // Azure EA + MCA\r\n EnrollmentNumber: string, // Azure EA \r\n IncludedQuantity: decimal, // Azure EA \r\n MarketPrice: decimal, // Azure EA + MCA\r\n MeterCategory: string, // Azure EA + MCA\r\n MeterId: string, // Azure MCA\r\n MeterID: string, // Azure EA \r\n MeterName: string, // Azure EA + MCA\r\n MeterRegion: string, // Azure EA + MCA\r\n MeterSubCategory: string, // Azure EA + MCA\r\n MeterType: string, // Azure EA + MCA\r\n OfferID: string, // Azure EA \r\n PartNumber: string, // Azure EA\r\n PriceType: string, // Azure EA + MCA\r\n Product: string, // Azure EA + MCA\r\n ProductId: string, // Azure MCA\r\n ProductID: string, // Azure EA \r\n ServiceFamily: string, // Azure EA + MCA\r\n SkuId: string, // Azure MCA\r\n SkuID: string, // Azure EA\r\n Term: string, // Azure EA + MCA\r\n TierMinimumUnits: decimal, // Azure MCA\r\n UnitOfMeasure: string, // Azure EA + MCA\r\n UnitPrice: decimal, // Azure EA + MCA\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Prices_raw ingestion mapping\r\n.create-or-alter table Prices_raw ingestion parquet mapping \"Prices_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"BasePrice\", \"Properties\": { \"Field\": \"BasePrice\" } },\r\n { \"Column\": \"BillingAccountId\", \"Properties\": { \"Field\": \"BillingAccountId\" } },\r\n { \"Column\": \"BillingAccountName\", \"Properties\": { \"Field\": \"BillingAccountName\" } },\r\n { \"Column\": \"BillingCurrency\", \"Properties\": { \"Field\": \"BillingCurrency\" } },\r\n { \"Column\": \"BillingProfileId\", \"Properties\": { \"Field\": \"BillingProfileId\" } },\r\n { \"Column\": \"BillingProfileName\", \"Properties\": { \"Field\": \"BillingProfileName\" } },\r\n { \"Column\": \"Currency\", \"Properties\": { \"Field\": \"Currency\" } },\r\n { \"Column\": \"CurrencyCode\", \"Properties\": { \"Field\": \"CurrencyCode\" } },\r\n { \"Column\": \"EffectiveEndDate\", \"Properties\": { \"Field\": \"EffectiveEndDate\" } },\r\n { \"Column\": \"EffectiveStartDate\", \"Properties\": { \"Field\": \"EffectiveStartDate\" } },\r\n { \"Column\": \"EnrollmentNumber\", \"Properties\": { \"Field\": \"EnrollmentNumber\" } },\r\n { \"Column\": \"IncludedQuantity\", \"Properties\": { \"Field\": \"IncludedQuantity\" } },\r\n { \"Column\": \"MarketPrice\", \"Properties\": { \"Field\": \"MarketPrice\" } },\r\n { \"Column\": \"MeterCategory\", \"Properties\": { \"Field\": \"MeterCategory\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"MeterID\", \"Properties\": { \"Field\": \"MeterID\" } },\r\n { \"Column\": \"MeterName\", \"Properties\": { \"Field\": \"MeterName\" } },\r\n { \"Column\": \"MeterRegion\", \"Properties\": { \"Field\": \"MeterRegion\" } },\r\n { \"Column\": \"MeterSubCategory\", \"Properties\": { \"Field\": \"MeterSubCategory\" } },\r\n { \"Column\": \"MeterType\", \"Properties\": { \"Field\": \"MeterType\" } },\r\n { \"Column\": \"OfferID\", \"Properties\": { \"Field\": \"OfferID\" } },\r\n { \"Column\": \"PartNumber\", \"Properties\": { \"Field\": \"PartNumber\" } },\r\n { \"Column\": \"PriceType\", \"Properties\": { \"Field\": \"PriceType\" } },\r\n { \"Column\": \"Product\", \"Properties\": { \"Field\": \"Product\" } },\r\n { \"Column\": \"ProductId\", \"Properties\": { \"Field\": \"ProductId\" } },\r\n { \"Column\": \"ProductID\", \"Properties\": { \"Field\": \"ProductID\" } },\r\n { \"Column\": \"ServiceFamily\", \"Properties\": { \"Field\": \"ServiceFamily\" } },\r\n { \"Column\": \"SkuId\", \"Properties\": { \"Field\": \"SkuId\" } },\r\n { \"Column\": \"SkuID\", \"Properties\": { \"Field\": \"SkuID\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TierMinimumUnits\", \"Properties\": { \"Field\": \"TierMinimumUnits\" } },\r\n { \"Column\": \"UnitOfMeasure\", \"Properties\": { \"Field\": \"UnitOfMeasure\" } },\r\n { \"Column\": \"UnitPrice\", \"Properties\": { \"Field\": \"UnitPrice\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Prices_raw retention policy\r\n.alter-merge table Prices_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Prices_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='Transforms Prices_raw into FOCUS 1.0.', folder='Prices')\r\nPrices_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n let prices = materialize(\r\n Prices_raw\r\n | extend x_SkuId = coalesce(SkuId, SkuID)\r\n | extend x_SkuMeterId = coalesce(MeterId, MeterID)\r\n | extend x_SkuProductId = coalesce(ProductId, ProductID)\r\n | extend x_SkuTerm = isoMonths(Term)\r\n | project-rename\r\n x_BaseUnitPrice = BasePrice,\r\n x_EffectivePeriodEnd = EffectiveEndDate,\r\n x_EffectivePeriodStart = EffectiveStartDate,\r\n x_PricingUnitDescription = UnitOfMeasure,\r\n x_SkuIncludedQuantity = IncludedQuantity,\r\n x_SkuMeterCategory = MeterCategory,\r\n x_SkuMeterName = MeterName,\r\n x_SkuMeterSubcategory = MeterSubCategory,\r\n x_SkuMeterType = MeterType,\r\n x_SkuOfferId = OfferID,\r\n x_SkuPartNumber = PartNumber,\r\n x_SkuPriceType = PriceType,\r\n x_SkuRegion = MeterRegion,\r\n x_SkuServiceFamily = ServiceFamily,\r\n x_SkuTier = TierMinimumUnits\r\n | extend ContractedUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', UnitPrice, todecimal('')) // UnitPrice for savings plan is not the on-demand unit price\r\n | extend ListUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', MarketPrice, todecimal('')) // MarketPrice for savings plan is not the list price\r\n | extend ChargeCategory = case(\r\n x_SkuPriceType == 'Consumption', 'Usage',\r\n x_SkuPriceType == 'ReservedInstance', 'Purchase',\r\n x_SkuPriceType == 'SavingsPlan', 'Usage', // Savings plan prices are for committed usage, not the purchase\r\n ''\r\n )\r\n | extend SkuPriceIdv2 = strcat(case(x_SkuPriceType == 'Consumption', 'OD', x_SkuPriceType == 'ReservedInstance', 'RI', x_SkuPriceType == 'SavingsPlan', 'SP', 'XX'), substring(ChargeCategory, 0, 1), x_SkuTerm, '_', x_SkuProductId, '_', x_SkuId, '_', x_SkuMeterType, '_', x_SkuTier, x_SkuOfferId)\r\n | extend x_BillingAccountId = iff(BillingAccountId startswith '/', split(BillingAccountId, '/')[-1], coalesce(BillingAccountId, EnrollmentNumber))\r\n | extend x_BillingProfileId = iff(BillingProfileId startswith '/', split(BillingProfileId, '/')[-1], coalesce(BillingProfileId, EnrollmentNumber))\r\n | extend tmp_SavingsPlanKey = strcat(x_SkuMeterId, x_SkuProductId, x_SkuId, x_SkuTier, x_SkuOfferId)\r\n //\r\n // Get latest ingested row based on the unique ID\r\n | extend x_IngestionTime = ingestion_time()\r\n );\r\n //\r\n // Meters for reservations and savings plans to identify commitment eligibility\r\n let riMeters = prices | where x_SkuPriceType == 'ReservedInstance' | distinct x_SkuMeterId;\r\n let spMeters = prices | where x_SkuPriceType == 'SavingsPlan' | distinct x_SkuMeterId;\r\n // \r\n // Copy list/base/contracted prices from on-demand SKUs\r\n prices\r\n | where x_SkuPriceType == 'SavingsPlan'\r\n // If we use join, specify the shuffle key\r\n // TODO: Compare join vs. lookup perf -- | join kind=leftouter hint.strategy=shuffle (prices | where x_SkuPriceType == 'Consumption' | where x_SkuMeterId in (spMeters) | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey\r\n | lookup kind=leftouter (prices | where x_SkuPriceType == 'Consumption' | where x_SkuMeterId in (spMeters) | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey\r\n | extend ListUnitPrice = coalesce(ListUnitPrice, ListUnitPrice1)\r\n | extend ContractedUnitPrice = coalesce(ContractedUnitPrice, ContractedUnitPrice1)\r\n | extend x_BaseUnitPrice = coalesce(x_BaseUnitPrice, x_BaseUnitPrice1)\r\n | project-away ListUnitPrice1, ContractedUnitPrice1, x_BaseUnitPrice1, tmp_SavingsPlanKey\r\n | union ((prices | where x_SkuPriceType != 'SavingsPlan'))\r\n //\r\n // Calculate commitment discount elgibility\r\n // TODO: Would a join be faster?\r\n | extend x_CommitmentDiscountSpendEligibility = iff(x_SkuMeterId in (riMeters) and x_SkuPriceType != 'ReservedInstance', 'Eligible', 'Not Eligible')\r\n | extend x_CommitmentDiscountUsageEligibility = iff(x_SkuMeterId in (spMeters), 'Eligible', 'Not Eligible')\r\n //\r\n // Add PricingUnit and x_PricingBlockSize\r\n // TODO: Compare join vs. lookup perf -- | join kind=leftouter (PricingUnits) on x_PricingUnitDescription | project-away x_PricingUnitDescription1\r\n | lookup kind=leftouter (PricingUnits) on x_PricingUnitDescription\r\n //\r\n | extend x_EffectiveUnitPrice = iff(x_SkuPriceType == 'SavingsPlan', UnitPrice, todecimal('')) // Savings plan prices are for the effective price, not the contracted price\r\n | extend x_EffectiveUnitPriceDiscount = ContractedUnitPrice - x_EffectiveUnitPrice\r\n | extend x_ContractedUnitPriceDiscount = ListUnitPrice - ContractedUnitPrice\r\n | extend x_TotalUnitPriceDiscount = ListUnitPrice - x_EffectiveUnitPrice\r\n | project\r\n BillingAccountId = case(\r\n BillingProfileId startswith '/', BillingProfileId,\r\n BillingAccountId startswith '/', BillingAccountId,\r\n strcat('/providers/Microsoft.Billing/billingAccounts/', x_BillingAccountId, iff(x_BillingProfileId != x_BillingAccountId, '', strcat('/billingProfiles/', x_BillingProfileId)))\r\n ),\r\n BillingAccountName = coalesce(BillingProfileName, BillingAccountName, x_BillingProfileId),\r\n BillingCurrency = coalesce(BillingCurrency, CurrencyCode, Currency), // Currency last as a fallback only\r\n ChargeCategory,\r\n CommitmentDiscountCategory = case(\r\n x_SkuPriceType == 'ReservedInstance', 'Usage',\r\n x_SkuPriceType == 'SavingsPlan', 'Spend',\r\n ''\r\n ),\r\n CommitmentDiscountType = case(\r\n x_SkuPriceType == 'ReservedInstance', 'Reservation',\r\n x_SkuPriceType == 'SavingsPlan', 'Savings plan',\r\n ''\r\n ),\r\n ContractedUnitPrice,\r\n ListUnitPrice,\r\n PricingCategory = case(\r\n x_SkuPriceType == 'Consumption', 'Standard',\r\n x_SkuPriceType == 'ReservedInstance', 'Standard', // Reservation purchases are tracked as \"Standard\"\r\n x_SkuPriceType == 'SavingsPlan', 'Committed',\r\n ''\r\n ),\r\n PricingUnit,\r\n SkuId = coalesce(ProductId, ProductID),\r\n SkuPriceId = strcat(x_SkuProductId, '_', x_SkuId, '_', x_SkuMeterType),\r\n SkuPriceIdv2,\r\n x_BaseUnitPrice,\r\n x_BillingAccountAgreement = case(\r\n strlen(x_BillingAccountId) > 32, 'MCA',\r\n strlen(x_BillingAccountId) < 32, 'EA',\r\n 'Unknown'\r\n ),\r\n x_BillingAccountId,\r\n x_BillingProfileId,\r\n x_CommitmentDiscountSpendEligibility,\r\n x_CommitmentDiscountUsageEligibility,\r\n x_ContractedUnitPriceDiscount,\r\n x_ContractedUnitPriceDiscountPercent = 1.0 * x_ContractedUnitPriceDiscount / ListUnitPrice * 100,\r\n x_EffectivePeriodEnd = startofmonth(x_EffectivePeriodEnd + 1h),\r\n x_EffectivePeriodStart,\r\n x_EffectiveUnitPrice,\r\n x_EffectiveUnitPriceDiscount,\r\n x_EffectiveUnitPriceDiscountPercent = 1.0 * x_EffectiveUnitPriceDiscount / ContractedUnitPrice * 100,\r\n x_IngestionTime,\r\n x_PricingBlockSize,\r\n x_PricingCurrency = coalesce(Currency, CurrencyCode), // CurrencyCode last as a fallback only\r\n x_PricingSubcategory = case(\r\n x_SkuPriceType == 'Consumption' and (x_SkuIncludedQuantity > 0 or x_SkuTier > 0), 'Tiered',\r\n x_SkuPriceType == 'Consumption', 'Standard',\r\n x_SkuPriceType == 'ReservedInstance', 'Standard', // Reservation purchases are tracked as \"Standard\"\r\n x_SkuPriceType == 'SavingsPlan', 'Committed Spend',\r\n ''\r\n ),\r\n x_PricingUnitDescription,\r\n x_SkuDescription = Product,\r\n x_SkuId,\r\n x_SkuIncludedQuantity,\r\n x_SkuMeterCategory,\r\n x_SkuMeterId,\r\n x_SkuMeterName,\r\n x_SkuMeterSubcategory,\r\n x_SkuMeterType,\r\n x_SkuPriceType,\r\n x_SkuProductId,\r\n x_SkuRegion,\r\n x_SkuServiceFamily,\r\n x_SkuOfferId,\r\n x_SkuPartNumber,\r\n x_SkuTerm,\r\n x_SkuTier,\r\n x_SourceName = coalesce(x_SourceName, 'Cost Management'),\r\n x_SourceProvider = coalesce(x_SourceProvider, 'Microsoft'),\r\n x_SourceType = coalesce(x_SourceType, 'PriceSheet'),\r\n x_SourceVersion = coalesce(x_SourceVersion, '2023-05-01'),\r\n x_TotalUnitPriceDiscount,\r\n x_TotalUnitPriceDiscountPercent = 1.0 * x_TotalUnitPriceDiscount / ListUnitPrice * 100\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Prices_final_v1_0 table\r\n// FOCUS 1.0 version of the price sheet that covers everything defined in Prices_raw.\r\n.create-merge table Prices_final_v1_0 (\r\n BillingAccountId: string,\r\n BillingAccountName: string,\r\n BillingCurrency: string,\r\n ChargeCategory: string,\r\n CommitmentDiscountCategory: string,\r\n CommitmentDiscountType: string,\r\n ContractedUnitPrice: decimal,\r\n ListUnitPrice: decimal,\r\n PricingCategory: string,\r\n PricingUnit: string,\r\n SkuId: string,\r\n SkuPriceId: string,\r\n SkuPriceIdv2: string, // Hubs add-on\r\n x_BaseUnitPrice: decimal, // Azure\r\n x_BillingAccountAgreement: string, // Hubs add-on\r\n x_BillingAccountId: string, // Azure MCA\r\n x_BillingProfileId: string, // Azure MCA\r\n x_CommitmentDiscountSpendEligibility: string, // Hubs add-on\r\n x_CommitmentDiscountUsageEligibility: string, // Hubs add-on\r\n x_ContractedUnitPriceDiscount: decimal, // Hubs add-on\r\n x_ContractedUnitPriceDiscountPercent: decimal, // Hubs add-on\r\n x_EffectivePeriodEnd: datetime, // Azure\r\n x_EffectivePeriodStart: datetime, // Azure\r\n x_EffectiveUnitPrice: decimal, // Azure\r\n x_EffectiveUnitPriceDiscount: decimal, // Hubs add-on\r\n x_EffectiveUnitPriceDiscountPercent: decimal, // Hubs add-on\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_PricingBlockSize: decimal, // Hubs add-on\r\n x_PricingCurrency: string, // Azure\r\n x_PricingSubcategory: string, // Hubs add-on\r\n x_PricingUnitDescription: string, // Azure\r\n x_SkuDescription: string, // Azure\r\n x_SkuId: string, // Azure\r\n x_SkuIncludedQuantity: decimal, // Azure EA\r\n x_SkuMeterCategory: string, // Azure\r\n x_SkuMeterId: string, // Azure\r\n x_SkuMeterName: string, // Azure\r\n x_SkuMeterSubcategory: string, // Azure\r\n x_SkuMeterType: string, // Azure\r\n x_SkuPriceType: string, // Azure\r\n x_SkuProductId: string, // Azure\r\n x_SkuRegion: string, // Azure\r\n x_SkuServiceFamily: string, // Azure\r\n x_SkuOfferId: string, // Azure EA\r\n x_SkuPartNumber: string, // Azure EA\r\n x_SkuTerm: int, // Azure\r\n x_SkuTier: decimal, // Azure MCA\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_TotalUnitPriceDiscount: decimal, // Hubs add-on\r\n x_TotalUnitPriceDiscountPercent: decimal // Hubs add-on\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Prices_raw -> Prices_final_v1_0\r\n// NOTE: Must be after transform function is defined\r\n.alter table Prices_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Prices_raw\",\r\n \"Query\": \"Prices_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Cost and usage |=================================================================================================\r\n// Supported versions:\r\n// - MS: 1.0, 1.0-preview(v1) -- See https://aka.ms/costmgmt/exports/focus\r\n// - AWS: 1.0 -- See https://docs.aws.amazon.com/cur/latest/userguide/table-dictionary-focus-1-0-aws-columns.html\r\n// - GCP: Jan-Jun 2024 -- See https://cloud.google.com/resources/google-cloud-focus?e=48754805&hl=en\r\n// Links to (Aug 2024): https://services.google.com/fh/files/misc/focus_guide_v1.pdf\r\n// See also:\r\n// - https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/standard-usage\r\n// - https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/detailed-usage\r\n// - OCI: 1.0 -- See https://docs.oracle.com/iaas/Content/Billing/Concepts/costusagereportsoverview.htm#costreports__focus-cost-report-schema\r\n//\r\n// Support for non-Azure data is limited to ingestion only. Data is not transformed across versions.\r\n//======================================================================================================================\r\n\r\n// Costs_raw table\r\n.create-merge table Costs_raw (\r\n AvailabilityZone: string, // FOCUS 0.5+\r\n BilledCost: decimal, // FOCUS 0.5+\r\n BillingAccountId: string, // FOCUS 0.5+\r\n BillingAccountName: string, // FOCUS 0.5+\r\n BillingAccountType: string, // Azure 1.0-preview(v1)+\r\n BillingCurrency: string, // FOCUS 0.5+\r\n BillingPeriodEnd: datetime, // FOCUS 0.5+\r\n BillingPeriodStart: datetime, // FOCUS 0.5+\r\n ChargeCategory: string, // FOCUS 1.0-preview+\r\n ChargeClass: string, // FOCUS 1.0+\r\n ChargeDescription: string, // FOCUS 1.0+\r\n ChargeFrequency: string, // FOCUS 1.0+\r\n ChargePeriodEnd: datetime, // FOCUS 0.5+\r\n ChargePeriodStart: datetime, // FOCUS 0.5+\r\n ChargeSubcategory: string, // FOCUS 1.0-preview only\r\n CommitmentDiscountCategory: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountId: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountName: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountStatus: string, // FOCUS 1.0+\r\n CommitmentDiscountType: string, // FOCUS 1.0-preview+\r\n ConsumedQuantity: decimal, // FOCUS 1.0+\r\n ConsumedUnit: string, // FOCUS 1.0+\r\n ContractedCost: decimal, // FOCUS 1.0+\r\n ContractedUnitPrice: decimal, // FOCUS 1.0+\r\n EffectiveCost: decimal, // FOCUS 1.0-preview+\r\n InvoiceIssuerName: string, // FOCUS 0.5+\r\n ListCost: decimal, // FOCUS 1.0-preview+\r\n ListUnitPrice: decimal, // FOCUS 1.0-preview+\r\n PricingCategory: string, // FOCUS 1.0-preview+\r\n PricingQuantity: decimal, // FOCUS 1.0-preview+\r\n PricingUnit: string, // FOCUS 1.0-preview+\r\n ProviderName: string, // FOCUS 0.5+\r\n PublisherName: string, // FOCUS 0.5+\r\n Region: string, // FOCUS 0.5-1.0-preview (deprecated)\r\n RegionId: string, // FOCUS 1.0+\r\n RegionName: string, // FOCUS 1.0+\r\n ResourceId: string, // FOCUS 0.5+\r\n ResourceName: string, // FOCUS 0.5+\r\n ResourceType: string, // FOCUS 1.0-preview+\r\n ServiceCategory: string, // FOCUS 0.5+\r\n ServiceName: string, // FOCUS 0.5+\r\n SkuId: string, // FOCUS 1.0-preview+\r\n SkuPriceId: string, // FOCUS 1.0-preview+\r\n SubAccountId: string, // FOCUS 0.5+\r\n SubAccountName: string, // FOCUS 0.5+\r\n SubAccountType: string, // Azure 1.0-preview(v1)+\r\n Tags: string, // FOCUS 1.0-preview+\r\n UsageAmount: decimal, // GCP Jan 2024 -- Removed Mar 2024 (UsageQuantity)\r\n UsageQuantity: decimal, // FOCUS 1.0-preview only\r\n UsageUnit: string, // FOCUS 1.0-preview only\r\n x_AccountId: string, // Azure 1.0-preview(v1)+\r\n x_AccountName: string, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId: string, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingAccountId: string, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName: string, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate: datetime, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId: string, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName: string, // Azure 1.0-preview(v1)+\r\n x_ChargeId: string, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd: decimal, // Azure 1.0+\r\n x_Cost: decimal, // GCP Jan 2024 -- Removed Jun 2024 (ContractedCost)\r\n x_CostAllocationRuleName: string, // Azure 1.0-preview(v1)+\r\n x_CostCategories: string, // AWS 1.0 (JSON)\r\n x_CostCenter: string, // Azure 1.0-preview(v1)+\r\n x_Credits: string, // GCP Jan 2024\r\n x_CostType: string, // GCP Jan 2024\r\n x_CurrencyConversionRate: decimal, // GCP Jun 2024\r\n x_CustomerId: string, // Azure 1.0-preview(v1)+\r\n x_CustomerName: string, // Azure 1.0-preview(v1)+\r\n x_Discount: string, // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_ExportTime: datetime, // GCP Jan 2024\r\n x_InvoiceId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName: string, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_Location: string, // GCP Jan 2024\r\n x_OnDemandCost: decimal, // Azure 1.0-preview(v1) only\r\n x_OnDemandCostInUsd: decimal, // Azure 1.0-preview(v1) only\r\n x_OnDemandUnitPrice: decimal, // Azure 1.0-preview(v1) only\r\n x_Operation: string, // AWS 1.0\r\n x_PartnerCreditApplied: string, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate: string, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize: decimal, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency: string, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription: string, // Azure 1.0-preview(v1)+\r\n x_Project: string, // GCP Jan 2024\r\n x_PublisherCategory: string, // Azure 1.0-preview(v1)+\r\n x_PublisherId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceType: string, // Azure 1.0-preview(v1)+\r\n x_ServiceCode: string, // AWS 1.0\r\n x_ServiceId: string, // GCP Jan 2024\r\n x_ServicePeriodEnd: datetime, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart: datetime, // Azure 1.0-preview(v1)+\r\n x_SkuDescription: string, // Azure 1.0-preview(v1)+\r\n x_SkuDetails: string, // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible: bool, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName: string, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber: string, // Azure 1.0-preview(v1)+\r\n x_SkuRegion: string, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily: string, // Azure 1.0-preview(v1)+\r\n x_SkuTerm: int, // Azure 1.0-preview(v1)+\r\n x_SkuTier: string, // Azure 1.0-preview(v1)+ \r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_UsageType: string // AWS 1.0\r\n)\r\n\r\n// Costs_raw ingestion mapping\r\n.create-or-alter table Costs_raw ingestion parquet mapping \"Costs_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"AvailabilityZone\", \"Properties\": { \"Field\": \"AvailabilityZone\" } },\r\n { \"Column\": \"BilledCost\", \"Properties\": { \"Field\": \"BilledCost\" } },\r\n { \"Column\": \"BillingAccountId\", \"Properties\": { \"Field\": \"BillingAccountId\" } },\r\n { \"Column\": \"BillingAccountName\", \"Properties\": { \"Field\": \"BillingAccountName\" } },\r\n { \"Column\": \"BillingAccountType\", \"Properties\": { \"Field\": \"BillingAccountType\" } },\r\n { \"Column\": \"BillingCurrency\", \"Properties\": { \"Field\": \"BillingCurrency\" } },\r\n { \"Column\": \"BillingPeriodEnd\", \"Properties\": { \"Field\": \"BillingPeriodEnd\" } },\r\n { \"Column\": \"BillingPeriodStart\", \"Properties\": { \"Field\": \"BillingPeriodStart\" } },\r\n { \"Column\": \"ChargeCategory\", \"Properties\": { \"Field\": \"ChargeCategory\" } },\r\n { \"Column\": \"ChargeClass\", \"Properties\": { \"Field\": \"ChargeClass\" } },\r\n { \"Column\": \"ChargeDescription\", \"Properties\": { \"Field\": \"ChargeDescription\" } },\r\n { \"Column\": \"ChargeFrequency\", \"Properties\": { \"Field\": \"ChargeFrequency\" } },\r\n { \"Column\": \"ChargePeriodEnd\", \"Properties\": { \"Field\": \"ChargePeriodEnd\" } },\r\n { \"Column\": \"ChargePeriodStart\", \"Properties\": { \"Field\": \"ChargePeriodStart\" } },\r\n { \"Column\": \"ChargeSubcategory\", \"Properties\": { \"Field\": \"ChargeSubcategory\" } },\r\n { \"Column\": \"CommitmentDiscountCategory\", \"Properties\": { \"Field\": \"CommitmentDiscountCategory\" } },\r\n { \"Column\": \"CommitmentDiscountId\", \"Properties\": { \"Field\": \"CommitmentDiscountId\" } },\r\n { \"Column\": \"CommitmentDiscountName\", \"Properties\": { \"Field\": \"CommitmentDiscountName\" } },\r\n { \"Column\": \"CommitmentDiscountStatus\", \"Properties\": { \"Field\": \"CommitmentDiscountStatus\" } },\r\n { \"Column\": \"CommitmentDiscountType\", \"Properties\": { \"Field\": \"CommitmentDiscountType\" } },\r\n { \"Column\": \"ConsumedQuantity\", \"Properties\": { \"Field\": \"ConsumedQuantity\" } },\r\n { \"Column\": \"ConsumedUnit\", \"Properties\": { \"Field\": \"ConsumedUnit\" } },\r\n { \"Column\": \"ContractedCost\", \"Properties\": { \"Field\": \"ContractedCost\" } },\r\n { \"Column\": \"ContractedUnitPrice\", \"Properties\": { \"Field\": \"ContractedUnitPrice\" } },\r\n { \"Column\": \"EffectiveCost\", \"Properties\": { \"Field\": \"EffectiveCost\" } },\r\n { \"Column\": \"InvoiceIssuerName\", \"Properties\": { \"Field\": \"InvoiceIssuerName\" } },\r\n { \"Column\": \"ListCost\", \"Properties\": { \"Field\": \"ListCost\" } },\r\n { \"Column\": \"ListUnitPrice\", \"Properties\": { \"Field\": \"ListUnitPrice\" } },\r\n { \"Column\": \"PricingCategory\", \"Properties\": { \"Field\": \"PricingCategory\" } },\r\n { \"Column\": \"PricingQuantity\", \"Properties\": { \"Field\": \"PricingQuantity\" } },\r\n { \"Column\": \"PricingUnit\", \"Properties\": { \"Field\": \"PricingUnit\" } },\r\n { \"Column\": \"ProviderName\", \"Properties\": { \"Field\": \"ProviderName\" } },\r\n { \"Column\": \"PublisherName\", \"Properties\": { \"Field\": \"PublisherName\" } },\r\n { \"Column\": \"Region\", \"Properties\": { \"Field\": \"Region\" } },\r\n { \"Column\": \"RegionId\", \"Properties\": { \"Field\": \"RegionId\" } },\r\n { \"Column\": \"RegionName\", \"Properties\": { \"Field\": \"RegionName\" } },\r\n { \"Column\": \"ResourceId\", \"Properties\": { \"Field\": \"ResourceId\" } },\r\n { \"Column\": \"ResourceName\", \"Properties\": { \"Field\": \"ResourceName\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\r\n { \"Column\": \"ServiceCategory\", \"Properties\": { \"Field\": \"ServiceCategory\" } },\r\n { \"Column\": \"ServiceName\", \"Properties\": { \"Field\": \"ServiceName\" } },\r\n { \"Column\": \"SkuId\", \"Properties\": { \"Field\": \"SkuId\" } },\r\n { \"Column\": \"SkuPriceId\", \"Properties\": { \"Field\": \"SkuPriceId\" } },\r\n { \"Column\": \"SubAccountId\", \"Properties\": { \"Field\": \"SubAccountId\" } },\r\n { \"Column\": \"SubAccountName\", \"Properties\": { \"Field\": \"SubAccountName\" } },\r\n { \"Column\": \"SubAccountType\", \"Properties\": { \"Field\": \"SubAccountType\" } },\r\n { \"Column\": \"Tags\", \"Properties\": { \"Field\": \"Tags\" } },\r\n { \"Column\": \"UsageAmount\", \"Properties\": { \"Field\": \"UsageAmount\" } },\r\n { \"Column\": \"UsageQuantity\", \"Properties\": { \"Field\": \"UsageQuantity\" } },\r\n { \"Column\": \"UsageUnit\", \"Properties\": { \"Field\": \"UsageUnit\" } },\r\n { \"Column\": \"x_AccountId\", \"Properties\": { \"Field\": \"x_AccountId\" } },\r\n { \"Column\": \"x_AccountName\", \"Properties\": { \"Field\": \"x_AccountName\" } },\r\n { \"Column\": \"x_AccountOwnerId\", \"Properties\": { \"Field\": \"x_AccountOwnerId\" } },\r\n { \"Column\": \"x_BilledCostInUsd\", \"Properties\": { \"Field\": \"x_BilledCostInUsd\" } },\r\n { \"Column\": \"x_BilledUnitPrice\", \"Properties\": { \"Field\": \"x_BilledUnitPrice\" } },\r\n { \"Column\": \"x_BillingAccountId\", \"Properties\": { \"Field\": \"x_BillingAccountId\" } },\r\n { \"Column\": \"x_BillingAccountName\", \"Properties\": { \"Field\": \"x_BillingAccountName\" } },\r\n { \"Column\": \"x_BillingExchangeRate\", \"Properties\": { \"Field\": \"x_BillingExchangeRate\" } },\r\n { \"Column\": \"x_BillingExchangeRateDate\", \"Properties\": { \"Field\": \"x_BillingExchangeRateDate\" } },\r\n { \"Column\": \"x_BillingProfileId\", \"Properties\": { \"Field\": \"x_BillingProfileId\" } },\r\n { \"Column\": \"x_BillingProfileName\", \"Properties\": { \"Field\": \"x_BillingProfileName\" } },\r\n { \"Column\": \"x_ChargeId\", \"Properties\": { \"Field\": \"x_ChargeId\" } },\r\n { \"Column\": \"x_ContractedCostInUsd\", \"Properties\": { \"Field\": \"x_ContractedCostInUsd\" } },\r\n { \"Column\": \"x_Cost\", \"Properties\": { \"Field\": \"x_Cost\" } },\r\n { \"Column\": \"x_CostAllocationRuleName\", \"Properties\": { \"Field\": \"x_CostAllocationRuleName\" } },\r\n { \"Column\": \"x_CostCategories\", \"Properties\": { \"Field\": \"x_CostCategories\" } },\r\n { \"Column\": \"x_CostCenter\", \"Properties\": { \"Field\": \"x_CostCenter\" } },\r\n { \"Column\": \"x_Credits\", \"Properties\": { \"Field\": \"x_Credits\" } },\r\n { \"Column\": \"x_CostType\", \"Properties\": { \"Field\": \"x_CostType\" } },\r\n { \"Column\": \"x_CurrencyConversionRate\", \"Properties\": { \"Field\": \"x_CurrencyConversionRate\" } },\r\n { \"Column\": \"x_CustomerId\", \"Properties\": { \"Field\": \"x_CustomerId\" } },\r\n { \"Column\": \"x_CustomerName\", \"Properties\": { \"Field\": \"x_CustomerName\" } },\r\n { \"Column\": \"x_Discount\", \"Properties\": { \"Field\": \"x_Discount\" } },\r\n { \"Column\": \"x_EffectiveCostInUsd\", \"Properties\": { \"Field\": \"x_EffectiveCostInUsd\" } },\r\n { \"Column\": \"x_EffectiveUnitPrice\", \"Properties\": { \"Field\": \"x_EffectiveUnitPrice\" } },\r\n { \"Column\": \"x_ExportTime\", \"Properties\": { \"Field\": \"x_ExportTime\" } },\r\n { \"Column\": \"x_InvoiceId\", \"Properties\": { \"Field\": \"x_InvoiceId\" } },\r\n { \"Column\": \"x_InvoiceIssuerId\", \"Properties\": { \"Field\": \"x_InvoiceIssuerId\" } },\r\n { \"Column\": \"x_InvoiceSectionId\", \"Properties\": { \"Field\": \"x_InvoiceSectionId\" } },\r\n { \"Column\": \"x_InvoiceSectionName\", \"Properties\": { \"Field\": \"x_InvoiceSectionName\" } },\r\n { \"Column\": \"x_ListCostInUsd\", \"Properties\": { \"Field\": \"x_ListCostInUsd\" } },\r\n { \"Column\": \"x_Location\", \"Properties\": { \"Field\": \"x_Location\" } },\r\n { \"Column\": \"x_OnDemandCost\", \"Properties\": { \"Field\": \"x_OnDemandCost\" } },\r\n { \"Column\": \"x_OnDemandCostInUsd\", \"Properties\": { \"Field\": \"x_OnDemandCostInUsd\" } },\r\n { \"Column\": \"x_OnDemandUnitPrice\", \"Properties\": { \"Field\": \"x_OnDemandUnitPrice\" } },\r\n { \"Column\": \"x_Operation\", \"Properties\": { \"Field\": \"x_Operation\" } },\r\n { \"Column\": \"x_PartnerCreditApplied\", \"Properties\": { \"Field\": \"x_PartnerCreditApplied\" } },\r\n { \"Column\": \"x_PartnerCreditRate\", \"Properties\": { \"Field\": \"x_PartnerCreditRate\" } },\r\n { \"Column\": \"x_PricingBlockSize\", \"Properties\": { \"Field\": \"x_PricingBlockSize\" } },\r\n { \"Column\": \"x_PricingCurrency\", \"Properties\": { \"Field\": \"x_PricingCurrency\" } },\r\n { \"Column\": \"x_PricingSubcategory\", \"Properties\": { \"Field\": \"x_PricingSubcategory\" } },\r\n { \"Column\": \"x_PricingUnitDescription\", \"Properties\": { \"Field\": \"x_PricingUnitDescription\" } },\r\n { \"Column\": \"x_Project\", \"Properties\": { \"Field\": \"x_Project\" } },\r\n { \"Column\": \"x_PublisherCategory\", \"Properties\": { \"Field\": \"x_PublisherCategory\" } },\r\n { \"Column\": \"x_PublisherId\", \"Properties\": { \"Field\": \"x_PublisherId\" } },\r\n { \"Column\": \"x_ResellerId\", \"Properties\": { \"Field\": \"x_ResellerId\" } },\r\n { \"Column\": \"x_ResellerName\", \"Properties\": { \"Field\": \"x_ResellerName\" } },\r\n { \"Column\": \"x_ResourceGroupName\", \"Properties\": { \"Field\": \"x_ResourceGroupName\" } },\r\n { \"Column\": \"x_ResourceType\", \"Properties\": { \"Field\": \"x_ResourceType\" } },\r\n { \"Column\": \"x_ServiceCode\", \"Properties\": { \"Field\": \"x_ServiceCode\" } },\r\n { \"Column\": \"x_ServiceId\", \"Properties\": { \"Field\": \"x_ServiceId\" } },\r\n { \"Column\": \"x_ServicePeriodEnd\", \"Properties\": { \"Field\": \"x_ServicePeriodEnd\" } },\r\n { \"Column\": \"x_ServicePeriodStart\", \"Properties\": { \"Field\": \"x_ServicePeriodStart\" } },\r\n { \"Column\": \"x_SkuDescription\", \"Properties\": { \"Field\": \"x_SkuDescription\" } },\r\n { \"Column\": \"x_SkuDetails\", \"Properties\": { \"Field\": \"x_SkuDetails\" } },\r\n { \"Column\": \"x_SkuIsCreditEligible\", \"Properties\": { \"Field\": \"x_SkuIsCreditEligible\" } },\r\n { \"Column\": \"x_SkuMeterCategory\", \"Properties\": { \"Field\": \"x_SkuMeterCategory\" } },\r\n { \"Column\": \"x_SkuMeterId\", \"Properties\": { \"Field\": \"x_SkuMeterId\" } },\r\n { \"Column\": \"x_SkuMeterName\", \"Properties\": { \"Field\": \"x_SkuMeterName\" } },\r\n { \"Column\": \"x_SkuMeterSubcategory\", \"Properties\": { \"Field\": \"x_SkuMeterSubcategory\" } },\r\n { \"Column\": \"x_SkuOfferId\", \"Properties\": { \"Field\": \"x_SkuOfferId\" } },\r\n { \"Column\": \"x_SkuOrderId\", \"Properties\": { \"Field\": \"x_SkuOrderId\" } },\r\n { \"Column\": \"x_SkuOrderName\", \"Properties\": { \"Field\": \"x_SkuOrderName\" } },\r\n { \"Column\": \"x_SkuPartNumber\", \"Properties\": { \"Field\": \"x_SkuPartNumber\" } },\r\n { \"Column\": \"x_SkuRegion\", \"Properties\": { \"Field\": \"x_SkuRegion\" } },\r\n { \"Column\": \"x_SkuServiceFamily\", \"Properties\": { \"Field\": \"x_SkuServiceFamily\" } },\r\n { \"Column\": \"x_SkuTerm\", \"Properties\": { \"Field\": \"x_SkuTerm\" } },\r\n { \"Column\": \"x_SkuTier\", \"Properties\": { \"Field\": \"x_SkuTier\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } },\r\n { \"Column\": \"x_UsageType\", \"Properties\": { \"Field\": \"x_UsageType\" } }\r\n]\r\n```\r\n\r\n// Costs_raw retention policy\r\n.alter-merge table Costs_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Costs_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All costs transformed to FOCUS 1.0.', folder='Costs')\r\nCosts_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n Costs_raw\r\n //\r\n // Dedupe rows\r\n | extend x_IngestionTime = ingestion_time()\r\n | extend x_ChargeId = ''\r\n // TODO: Consider adding a unique charge ID per row\r\n // hash_sha256(strcat(\r\n // // DO NOT CHANGE COLUMNS OR COLUMN ORDER\r\n // // 1. Resource hierarchy (including resource name), highest to lowest\r\n // BillingAccountId,\r\n // x_InvoiceSectionId,\r\n // x_AccountOwnerId,\r\n // SubAccountId,\r\n // x_ResourceGroupName,\r\n // ResourceName,\r\n // // 2. Resource details\r\n // ResourceId,\r\n // RegionId,\r\n // Tags,\r\n // CommitmentDiscountId,\r\n // x_CostCenter,\r\n // // 4. Meter details\r\n // SkuPriceId,\r\n // x_SkuMeterId,\r\n // x_SkuPartNumber,\r\n // x_SkuOfferId,\r\n // x_SkuDetails,\r\n // // 5. Date\r\n // ChargePeriodStart\r\n // ))\r\n //\r\n // Identify data quality issues\r\n | extend x_SourceChanges = trim_end(',', strcat(\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and ChargeFrequency == 'Usage-Based', 'InvalidChargeFrequency,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and EffectiveCost > 0, 'InvalidEffectiveCost,', ''),\r\n iff((isempty(ContractedCost) or ContractedCost == 0) and EffectiveCost != 0, 'MissingContractedCost,', ''),\r\n iff((isempty(ContractedUnitPrice) or ContractedUnitPrice == 0) and x_EffectiveUnitPrice != 0, 'MissingContractedUnitPrice,', ''),\r\n iff((isempty(ListCost) or ListCost == 0) and (ContractedCost != 0 or EffectiveCost != 0), 'MissingListCost,', ''),\r\n iff((isempty(ListUnitPrice) or ListUnitPrice == 0) and (ContractedUnitPrice != 0 or x_EffectiveUnitPrice != 0), 'MissingListUnitPrice,', ''),\r\n iff(isempty(ProviderName), 'MissingProviderName,', ''),\r\n iff(isempty(PublisherName), 'MissingPublisherName,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceId), 'MissingResourceId,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceName), 'MissingResourceName,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceType), 'MissingResourceType,', ''),\r\n iff(BilledCost > 0 and x_BilledUnitPrice == 0, 'MissingXBilledUnitPrice,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(x_ResourceType), 'MissingXResourceType,', ''),\r\n iff(PricingCategory == 'Standard' and isnotempty(CommitmentDiscountId) and ChargeCategory == 'Usage', 'PricingCategoryShouldBeCommitted,', ''),\r\n iff(x_SkuTerm == '1Year' or x_SkuTerm == '3Years' or x_SkuTerm == '5Years', 'SkuTermShouldBeAnInteger,', '')\r\n ))\r\n //\r\n // Fix columns needed in other changes\r\n | extend ProviderName = case(\r\n isnotempty(ProviderName), ProviderName,\r\n isnotempty(coalesce(x_CostCategories, x_Discount, x_Operation, x_ServiceCode, x_UsageType)), 'AWS',\r\n isnotempty(coalesce(tostring(UsageAmount), tostring(x_Cost), x_Credits, x_CostType, tostring(x_CurrencyConversionRate), tostring(x_ExportTime), x_Project, x_ServiceId)), 'GCP',\r\n isnotempty(coalesce(x_BillingProfileId, x_InvoiceSectionId)), 'Microsoft',\r\n ''\r\n )\r\n //\r\n // Identify source\r\n | extend x_SourceName = coalesce(x_SourceName, iff(isnotempty(x_BillingProfileId), 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(isnotempty(x_BillingProfileId), 'FocusCost', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, case(\r\n isnotempty(coalesce(ChargeClass, CommitmentDiscountStatus, tostring(ConsumedQuantity), ConsumedUnit, tostring(ContractedCost), tostring(ContractedUnitPrice), RegionId, RegionName)), '1.0',\r\n isnotempty(coalesce(ChargeSubcategory, Region, tostring(UsageQuantity), UsageUnit)), iff(ProviderName == 'Microsoft', '1.0-preview(v1)', '1.0-preview'),\r\n ''\r\n ))\r\n // Append version check error code\r\n | extend x_SourceChanges = iff(x_SourceVersion == '1.0', x_SourceChanges,\r\n strcat(x_SourceChanges, iff(isempty(x_SourceChanges), '', ','), iff(x_SourceVersion == '', 'UnknownFocusVersion', 'LegacyFocusVersion'))\r\n )\r\n //\r\n // Populate missing prices -- mapping to on-demand prices requires meter ID and offer ID\r\n | extend tmp_MissingPrices = ProviderName == 'Microsoft'\r\n and (ListUnitPrice == 0 or ContractedUnitPrice == 0)\r\n and x_EffectiveUnitPrice != 0\r\n and not(CommitmentDiscountCategory == 'Spend' and CommitmentDiscountStatus == 'Unused')\r\n and isnotempty(strcat(x_SkuMeterId, x_SkuOfferId))\r\n | as allCosts\r\n | where tmp_MissingPrices\r\n | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(ChargePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)\r\n | as costsWithMissingPrices\r\n | join kind=leftouter (\r\n Prices_final_v1_0\r\n | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)\r\n | where x_SkuPriceType == 'Consumption' and tmp_ReservationPriceLookupKey in ((costsWithMissingPrices | summarize by tmp_ReservationPriceLookupKey))\r\n | summarize ListUnitPrice = min(ListUnitPrice), ContractedUnitPrice = min(ContractedUnitPrice) by tmp_ReservationPriceLookupKey, x_PricingBlockSize, PricingUnit\r\n ) on tmp_ReservationPriceLookupKey\r\n // Select the best price to use for each row\r\n | extend ContractedUnitPrice = case(\r\n // If price is already correct, keep that\r\n ContractedUnitPrice != 0 or x_EffectiveUnitPrice == 0, ContractedUnitPrice,\r\n // If both prices use the same scale, use the new one\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize == x_PricingBlockSize1, ContractedUnitPrice1 * x_BillingExchangeRate,\r\n // If prices are the same unit but not the same scale, use the new one but correct the scale\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize != x_PricingBlockSize1 and isnotempty(x_PricingBlockSize) and isnotempty(x_PricingBlockSize1), ContractedUnitPrice1 * x_BillingExchangeRate / x_PricingBlockSize1 * x_PricingBlockSize,\r\n // If billed price is available, assume the billed price is the same as contracted price to support aggregations\r\n isnotempty(x_BilledUnitPrice) and x_BilledUnitPrice != 0, x_EffectiveUnitPrice,\r\n // Otherwise, assume the effective price is the same as contracted price to support aggregations\r\n x_EffectiveUnitPrice\r\n )\r\n | extend ListUnitPrice = case(\r\n // If price is already correct, keep that\r\n ListUnitPrice != 0 or x_EffectiveUnitPrice == 0, ListUnitPrice,\r\n // If both prices use the same scale, use the new one\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize == x_PricingBlockSize1, ListUnitPrice1 * x_BillingExchangeRate,\r\n // If prices are the same unit but not the same scale, use the new one but correct the scale\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize != x_PricingBlockSize1 and isnotempty(x_PricingBlockSize) and isnotempty(x_PricingBlockSize1), ListUnitPrice1 * x_BillingExchangeRate / x_PricingBlockSize1 * x_PricingBlockSize,\r\n // Otherwise, assume the contracted price is the same as list price to support aggregations\r\n ContractedUnitPrice\r\n )\r\n // Calculate missing costs based on new prices -- If cost is already correct, keep that; if not and price is available, recalculate the cost; otherwise, keep the existing cost\r\n | extend ListCost = case(ListCost != 0 or EffectiveCost == 0, ListCost, ListUnitPrice != 0, ListUnitPrice * PricingQuantity, ListCost)\r\n | extend ContractedCost = case(ContractedCost != 0 or EffectiveCost == 0, ContractedCost, ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity, ContractedCost)\r\n // Merge the rest of the unmodified cost records and remove excess columns\r\n | union (allCosts | where not(tmp_MissingPrices))\r\n | project-away x_PricingBlockSize1, PricingUnit1, ListUnitPrice1, ContractedUnitPrice1, tmp_MissingPrices, tmp_ReservationPriceLookupKey, tmp_ReservationPriceLookupKey1\r\n //\r\n // BUG: Fix ContractedCost that has bad values\r\n | extend ContractedCost = iff(ProviderName == 'Microsoft' and isnotempty(PricingQuantity) and isnotempty(x_PricingBlockSize) and ContractedCost != ContractedUnitPrice * PricingQuantity, ContractedUnitPrice * PricingQuantity, ContractedCost)\r\n //\r\n // Handle FOCUS 1.0-preview UsageQuantity/Unit\r\n | extend ConsumedQuantity = iff(ChargeCategory == 'Usage', coalesce(ConsumedQuantity, UsageQuantity, UsageAmount), todecimal(''))\r\n | extend ConsumedUnit = iff(ChargeCategory == 'Usage' and isnotempty(ConsumedQuantity), coalesce(ConsumedUnit, UsageUnit, 'Units'), '')\r\n //\r\n // Convert IDs to lowercase for consistency\r\n | extend CommitmentDiscountId = tolower(CommitmentDiscountId)\r\n //\r\n // BUG: Remove EffectiveCost for commitment discount purchases\r\n | extend EffectiveCost = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), decimal(0), EffectiveCost)\r\n | extend x_EffectiveCostInUsd = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), decimal(0), x_EffectiveCostInUsd)\r\n //\r\n // Clean up resource columns\r\n | extend ResourceId = case(\r\n isnotempty(ResourceId), ResourceId,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), CommitmentDiscountId,\r\n ResourceId)\r\n | extend ResourceName = tolower(case(\r\n isnotempty(ResourceName), ResourceName,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountName), CommitmentDiscountName,\r\n isnotempty(ResourceId), parse_resourceid(ResourceId).ResourceName,\r\n ResourceName))\r\n | extend x_ResourceType = case(\r\n isnotempty(x_ResourceType), x_ResourceType,\r\n isnotempty(ResourceId), parse_resourceid(ResourceId).x_ResourceType,\r\n x_ResourceType)\r\n | extend ResourceType = case(\r\n // Use existing resource type display name unless it's an internal resource type ID\r\n isnotempty(ResourceType) and tolower(ResourceType) != tolower(x_ResourceType) and ResourceType !contains '/', ResourceType,\r\n // Use CommitmentDisocuntType for commitment discount purchases\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountType), CommitmentDiscountType,\r\n // Look up display name from internal type\r\n isnotempty(x_ResourceType), coalesce(resource_type(x_ResourceType).SingularDisplayName, ResourceType, x_ResourceType),\r\n ResourceType)\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n AvailabilityZone,\r\n BilledCost,\r\n BillingAccountId,\r\n BillingAccountName,\r\n BillingAccountType,\r\n BillingCurrency,\r\n BillingPeriodEnd,\r\n BillingPeriodStart,\r\n ChargeCategory = case(\r\n // Handle FOCUS 1.0-preview ChargeSubcategory\r\n ChargeSubcategory == 'Credit', 'Credit',\r\n ChargeSubcategory == 'Refund', 'Purchase', // We are assuming purchase refunds since we don't have data to indicate usage refunds\r\n ChargeCategory\r\n ),\r\n ChargeClass = case(ChargeSubcategory == 'Refund', 'Correction', ChargeClass),\r\n ChargeDescription,\r\n // BUG: ChargeFrequency shows \"Usage-Based\" for monthly recurring savings plan purchases\r\n ChargeFrequency = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and ChargeFrequency == 'Usage-Based' and ProviderName == 'Microsoft' and x_SourceVersion startswith '1.0', 'Recurring', ChargeFrequency),\r\n ChargePeriodEnd,\r\n ChargePeriodStart,\r\n CommitmentDiscountCategory,\r\n CommitmentDiscountId,\r\n CommitmentDiscountName,\r\n CommitmentDiscountStatus = case(\r\n // Handle FOCUS 1.0-preview ChargeSubcategory\r\n ChargeSubcategory == 'Used Commitment', 'Used',\r\n ChargeSubcategory == 'Unused Commitment', 'Unused',\r\n CommitmentDiscountStatus\r\n ),\r\n CommitmentDiscountType,\r\n ConsumedQuantity,\r\n ConsumedUnit,\r\n ContractedCost = coalesce(ContractedCost, x_OnDemandCost, x_Cost),\r\n ContractedUnitPrice = coalesce(ContractedUnitPrice, x_OnDemandUnitPrice),\r\n EffectiveCost,\r\n InvoiceIssuerName,\r\n ListCost,\r\n ListUnitPrice,\r\n PricingCategory = case(\r\n // Handle FOCUS 1.0-preview PricingCategory values\r\n PricingCategory == 'On-Demand', 'Standard',\r\n PricingCategory == 'Commitment-Based', 'Committed',\r\n PricingCategory\r\n ),\r\n PricingQuantity,\r\n PricingUnit,\r\n ProviderName,\r\n // Handle missing PublisherName values\r\n PublisherName = case(PublisherName == 'Microsoft Corporation', 'Microsoft', isnotempty(PublisherName), PublisherName, x_PublisherCategory == 'Cloud Provider', ProviderName, ''),\r\n // Handle FOCUS 1.0-preview Region column\r\n RegionId = coalesce(RegionId, iff(ProviderName == 'Microsoft', replace_string(tolower(Region), ' ', ''), Region)),\r\n RegionName = coalesce(RegionName, Region),\r\n ResourceId,\r\n ResourceName,\r\n ResourceType,\r\n ServiceCategory,\r\n ServiceName,\r\n SkuId,\r\n SkuPriceId,\r\n SubAccountId,\r\n SubAccountName,\r\n SubAccountType, // Azure 1.0-preview(v1)+\r\n Tags = parse_json(Tags),\r\n x_AccountId, // Azure 1.0-preview(v1)+\r\n x_AccountName, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice, // Azure 1.0-preview(v1)+\r\n x_BillingAccountAgreement = case(\r\n ProviderName == 'Microsoft' and x_BillingAccountId == x_BillingProfileId, 'EA',\r\n ProviderName == 'Microsoft' and x_BillingAccountId != x_BillingProfileId, 'MCA',\r\n ProviderName\r\n ), // Hubs add-on\r\n x_BillingAccountId, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName, // Azure 1.0-preview(v1)+\r\n x_ChargeId, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd = coalesce(x_ContractedCostInUsd, x_OnDemandCostInUsd), // Azure 1.0+\r\n x_CostAllocationRuleName, // Azure 1.0-preview(v1)+\r\n x_CostCategories = parse_json(x_CostCategories), // AWS 1.0 (JSON)\r\n x_CostCenter, // Azure 1.0-preview(v1)+\r\n x_Credits = parse_json(x_Credits), // GCP Jan 2024\r\n x_CostType, // GCP Jan 2024\r\n x_CurrencyConversionRate, // GCP Jun 2024\r\n x_CustomerId, // Azure 1.0-preview(v1)+\r\n x_CustomerName, // Azure 1.0-preview(v1)+\r\n x_Discount = parse_json(x_Discount), // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice, // Azure 1.0-preview(v1)+\r\n x_ExportTime, // GCP Jan 2024\r\n x_IngestionTime, // Hubs add-on\r\n x_InvoiceId, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd, // Azure 1.0-preview(v1)+\r\n x_Location, // GCP Jan 2024\r\n x_Operation, // AWS 1.0\r\n x_PartnerCreditApplied, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription, // Azure 1.0-preview(v1)+\r\n x_Project, // GCP Jan 2024\r\n x_PublisherCategory, // Azure 1.0-preview(v1)+\r\n x_PublisherId, // Azure 1.0-preview(v1)+\r\n x_ResellerId, // Azure 1.0-preview(v1)+\r\n x_ResellerName, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName = tolower(x_ResourceGroupName), // Azure 1.0-preview(v1)+\r\n x_ResourceType, // Azure 1.0-preview(v1)+\r\n x_ServiceCode, // AWS 1.0\r\n x_ServiceId, // GCP Jan 2024\r\n x_ServicePeriodEnd, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart, // Azure 1.0-preview(v1)+\r\n x_SkuDescription, // Azure 1.0-preview(v1)+\r\n x_SkuDetails = parse_json(x_SkuDetails), // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber, // Azure 1.0-preview(v1)+\r\n x_SkuRegion, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily, // Azure 1.0-preview(v1)+\r\n x_SkuTerm, // Azure 1.0-preview(v1)+\r\n x_SkuTier, // Azure 1.0-preview(v1)+ \r\n x_SourceChanges, // Hubs add-on\r\n x_SourceName, // Hubs add-on\r\n x_SourceProvider, // Hubs add-on\r\n x_SourceType, // Hubs add-on\r\n x_SourceVersion, // Hubs add-on\r\n x_UsageType // AWS 1.0\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Costs_final_v1_0 table\r\n.create-merge table Costs_final_v1_0 (\r\n AvailabilityZone: string,\r\n BilledCost: decimal,\r\n BillingAccountId: string,\r\n BillingAccountName: string,\r\n BillingAccountType: string, // Azure 1.0-preview(v1)+\r\n BillingCurrency: string,\r\n BillingPeriodEnd: datetime,\r\n BillingPeriodStart: datetime,\r\n ChargeCategory: string,\r\n ChargeClass: string,\r\n ChargeDescription: string,\r\n ChargeFrequency: string,\r\n ChargePeriodEnd: datetime,\r\n ChargePeriodStart: datetime,\r\n CommitmentDiscountCategory: string, // FOCUS 1.0-preview only\r\n CommitmentDiscountId: string,\r\n CommitmentDiscountName: string,\r\n CommitmentDiscountStatus: string,\r\n CommitmentDiscountType: string,\r\n ConsumedQuantity: decimal,\r\n ConsumedUnit: string,\r\n ContractedCost: decimal,\r\n ContractedUnitPrice: decimal,\r\n EffectiveCost: decimal,\r\n InvoiceIssuerName: string,\r\n ListCost: decimal,\r\n ListUnitPrice: decimal,\r\n PricingCategory: string,\r\n PricingQuantity: decimal,\r\n PricingUnit: string,\r\n ProviderName: string,\r\n PublisherName: string,\r\n RegionId: string,\r\n RegionName: string,\r\n ResourceId: string,\r\n ResourceName: string,\r\n ResourceType: string,\r\n ServiceCategory: string,\r\n ServiceName: string,\r\n SkuId: string,\r\n SkuPriceId: string,\r\n SubAccountId: string,\r\n SubAccountName: string,\r\n SubAccountType: string,\r\n Tags: dynamic,\r\n x_AccountId: string, // Azure 1.0-preview(v1)+\r\n x_AccountName: string, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId: string, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingAccountAgreement: string, // Hubs add-on\r\n x_BillingAccountId: string, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName: string, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate: datetime, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId: string, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName: string, // Azure 1.0-preview(v1)+\r\n x_ChargeId: string, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd: decimal, // Azure 1.0+\r\n x_CostAllocationRuleName: string, // Azure 1.0-preview(v1)+\r\n x_CostCategories: dynamic, // AWS 1.0 (JSON)\r\n x_CostCenter: string, // Azure 1.0-preview(v1)+\r\n x_Credits: dynamic, // GCP Jan 2024\r\n x_CostType: string, // GCP Jan 2024\r\n x_CurrencyConversionRate: decimal, // GCP Jun 2024\r\n x_CustomerId: string, // Azure 1.0-preview(v1)+\r\n x_CustomerName: string, // Azure 1.0-preview(v1)+\r\n x_Discount: dynamic, // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_ExportTime: datetime, // GCP Jan 2024\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_InvoiceId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName: string, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_Location: string, // GCP Jan 2024\r\n x_Operation: string, // AWS 1.0\r\n x_PartnerCreditApplied: string, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate: string, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize: decimal, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency: string, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription: string, // Azure 1.0-preview(v1)+\r\n x_Project: string, // GCP Jan 2024\r\n x_PublisherCategory: string, // Azure 1.0-preview(v1)+\r\n x_PublisherId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceType: string, // Azure 1.0-preview(v1)+\r\n x_ServiceCode: string, // AWS 1.0\r\n x_ServiceId: string, // GCP Jan 2024\r\n x_ServicePeriodEnd: datetime, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart: datetime, // Azure 1.0-preview(v1)+\r\n x_SkuDescription: string, // Azure 1.0-preview(v1)+\r\n x_SkuDetails: dynamic, // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible: bool, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName: string, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber: string, // Azure 1.0-preview(v1)+\r\n x_SkuRegion: string, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily: string, // Azure 1.0-preview(v1)+\r\n x_SkuTerm: int, // Azure 1.0-preview(v1)+\r\n x_SkuTier: string, // Azure 1.0-preview(v1)+ \r\n x_SourceChanges: string, // Hubs add-on\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_UsageType: string // AWS 1.0\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Costs_raw -> Costs_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Costs_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Costs_raw\",\r\n \"Query\": \"Costs_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| CommitmentDiscountUsage |========================================================================================\r\n// Supported versions:\r\n// - MS EA reservation details: 2023-03-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/reservation-details-ea\r\n// - MS MCA reservation details: 2023-03-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/reservation-details-mca\r\n//======================================================================================================================\r\n\r\n// CommitmentDiscountUsage_raw table\r\n.create-merge table CommitmentDiscountUsage_raw (\r\n InstanceFlexibilityGroup: string,\r\n InstanceFlexibilityRatio: decimal,\r\n InstanceId: string,\r\n Kind: string,\r\n ReservationId: string,\r\n ReservationOrderId: string,\r\n ReservedHours: decimal,\r\n SkuName: string,\r\n TotalReservedQuantity: decimal,\r\n UsageDate: datetime,\r\n UsedHours: decimal,\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// CommitmentDiscountUsage_raw ingestion mapping\r\n.create-or-alter table CommitmentDiscountUsage_raw ingestion parquet mapping \"CommitmentDiscountUsage_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"InstanceId\", \"Properties\": { \"Field\": \"InstanceId\" } },\r\n { \"Column\": \"Kind\", \"Properties\": { \"Field\": \"Kind\" } },\r\n { \"Column\": \"ReservationId\", \"Properties\": { \"Field\": \"ReservationId\" } },\r\n { \"Column\": \"ReservationOrderId\", \"Properties\": { \"Field\": \"ReservationOrderId\" } },\r\n { \"Column\": \"ReservedHours\", \"Properties\": { \"Field\": \"ReservedHours\" } },\r\n { \"Column\": \"SkuName\", \"Properties\": { \"Field\": \"SkuName\" } },\r\n { \"Column\": \"TotalReservedQuantity\", \"Properties\": { \"Field\": \"TotalReservedQuantity\" } },\r\n { \"Column\": \"UsageDate\", \"Properties\": { \"Field\": \"UsageDate\" } },\r\n { \"Column\": \"UsedHours\", \"Properties\": { \"Field\": \"UsedHours\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// CommitmentDiscountUsage_raw retention policy\r\n.alter-merge table CommitmentDiscountUsage_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// CommitmentDiscountUsage_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All commitment discount usage transformed to FOCUS 1.0. This includes reservationdeatils_raw.', folder='Commitment discounts')\r\nCommitmentDiscountUsage_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n CommitmentDiscountUsage_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Handle resource columns\r\n | extend ResourceId = tolower(InstanceId)\r\n | extend tmp_ResourceDetails = parse_resourceid(ResourceId)\r\n | extend ResourceName = tostring(tmp_ResourceDetails.ResourceName)\r\n | extend SubAccountId = tostring(tmp_ResourceDetails.SubAccountId)\r\n | extend x_ResourceGroupName = tostring(tmp_ResourceDetails.x_ResourceGroupName)\r\n | extend x_ResourceType = tostring(tmp_ResourceDetails.x_ResourceType)\r\n | lookup kind=leftouter (ResourceTypes | distinct x_ResourceType, ResourceType = SingularDisplayName) on x_ResourceType\r\n | lookup kind=leftouter (Services | distinct x_ResourceType, ServiceName, ServiceCategory, x_ServiceModel) on x_ResourceType\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n ChargePeriodEnd = UsageDate + 1d,\r\n ChargePeriodStart = UsageDate,\r\n CommitmentDiscountCategory = 'Usage',\r\n CommitmentDiscountId = tolower(strcat('/providers/microsoft.capacity/reservationorders/', ReservationOrderId, '/reservations/', ReservationId)),\r\n CommitmentDiscountType = 'Reservation',\r\n ConsumedQuantity = UsedHours,\r\n ProviderName,\r\n ResourceId,\r\n ResourceName,\r\n ResourceType,\r\n ServiceCategory,\r\n ServiceName,\r\n SubAccountId,\r\n x_CommitmentDiscountCommittedCount = TotalReservedQuantity,\r\n x_CommitmentDiscountCommittedAmount = ReservedHours,\r\n // TODO: Is this needed? -- x_CommitmentDiscountKind = Kind,\r\n x_CommitmentDiscountNormalizedGroup = iff(InstanceFlexibilityGroup == 'NA', '', InstanceFlexibilityGroup),\r\n x_CommitmentDiscountNormalizedRatio = InstanceFlexibilityRatio,\r\n x_CommitmentDiscountQuantity = UsedHours * InstanceFlexibilityRatio,\r\n x_IngestionTime = ingestion_time(),\r\n x_ResourceGroupName,\r\n x_ResourceType,\r\n // x_RowId = hash_sha256(strcat(\r\n // // DO NOT CHANGE COLUMNS OR COLUMN ORDER\r\n // CommitmentDiscountId,\r\n // ResourceId,\r\n // ChargePeriodStart\r\n // )),\r\n x_ServiceModel,\r\n x_SkuOrderId = ReservationOrderId,\r\n x_SkuSize = iff(SkuName == 'NA', '', SkuName),\r\n x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName)),\r\n x_SourceProvider = coalesce(x_SourceProvider, ProviderName),\r\n x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationDetails', '')),\r\n x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2024-03-01', ''))\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// CommitmentDiscountUsage_final_v1_0 table\r\n.create-merge table CommitmentDiscountUsage_final_v1_0 (\r\n ChargePeriodEnd: datetime, // Hubs add-on\r\n ChargePeriodStart: datetime, // MS 2023-03-01\r\n CommitmentDiscountCategory: string, // Hubs add-on\r\n CommitmentDiscountId: string, // MS 2023-03-01\r\n CommitmentDiscountType: string, // Hubs add-on\r\n ConsumedQuantity: decimal, // MS 2023-03-01\r\n ProviderName: string, // Hubs add-on\r\n ResourceId: string, // MS 2023-03-01\r\n ResourceName: string, // Hubs add-on\r\n ResourceType: string, // Hubs add-on\r\n ServiceCategory: string, // Hubs add-on\r\n ServiceName: string, // Hubs add-on\r\n SubAccountId: string, // Hubs add-on\r\n x_CommitmentDiscountCommittedCount: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountCommittedAmount: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountNormalizedGroup: string, // MS 2023-03-01\r\n x_CommitmentDiscountNormalizedRatio: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountQuantity: decimal, // MS 2023-03-01\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_ResourceGroupName: string, // Hubs add-on\r\n x_ResourceType: string, // Hubs add-on\r\n x_ServiceModel: string, // Hubs add-on\r\n x_SkuOrderId: string, // MS 2023-03-01\r\n x_SkuSize: string, // MS 2023-03-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for CommitmentDiscountUsage_raw -> CommitmentDiscountUsage_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table CommitmentDiscountUsage_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"CommitmentDiscountUsage_raw\",\r\n \"Query\": \"CommitmentDiscountUsage_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Recommendations |================================================================================================\r\n// Supported datasets/versions:\r\n// - MS CM EA reservation recommendations: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-recommendations-ea\r\n// - MS CM MCA reservation recommendations: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-recommendations-mca\r\n//======================================================================================================================\r\n\r\n// Recommendations_raw table\r\n.create-merge table Recommendations_raw (\r\n CostWithNoReservedInstances: decimal, // MS CM EA resv reco 2024-05-01\r\n CostWithNoReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n FirstUsageDate: datetime, // MS CM EA resv reco 2024-05-01\r\n FirstUsageDate2: datetime, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n InstanceFlexibilityGroup: string, // MS CM EA resv reco 2024-05-01\r\n InstanceFlexibilityGroup2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n InstanceFlexibilityRatio: decimal, // MS CM EA resv reco 2024-05-01\r\n InstanceFlexibilityRatio2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n Location: string, // MS CM EA+MCA resv reco 2024-05-01\r\n LookBackPeriod: string, // MS CM EA+MCA resv reco 2024-05-01\r\n MeterId: string, // MS CM EA resv reco 2024-05-01\r\n MeterID: string, // MS CM MCA resv reco 2024-05-01\r\n NetSavings: decimal, // MS CM EA resv reco 2024-05-01\r\n NetSavings2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n NormalizedSize: string, // MS CM EA resv reco 2024-05-01\r\n NormalizedSize2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n RecommendedQuantity: decimal, // MS CM EA resv reco 2024-05-01\r\n RecommendedQuantity2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n RecommendedQuantityNormalized: decimal, // MS CM EA resv reco 2024-05-01\r\n RecommendedQuantityNormalized2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n ResourceType: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Scope: string, // MS CM EA resv reco 2024-05-01\r\n scope: string, // MS CM MCA resv reco 2024-05-01\r\n SKU: string, // MS CM EA resv reco 2024-05-01\r\n SkuName: string, // MS CM MCA resv reco 2024-05-01\r\n SkuProperties: string, // MS CM EA resv reco 2024-05-01\r\n SkuProperties2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n SubscriptionId: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Term: string, // MS CM EA+MCA resv reco 2024-05-01\r\n TotalCostWithReservedInstances: decimal, // MS CM EA resv reco 2024-05-01\r\n TotalCostWithReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Recommendations_raw ingestion mapping\r\n.create-or-alter table Recommendations_raw ingestion parquet mapping \"Recommendations_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"CostWithNoReservedInstances\", \"Properties\": { \"Field\": \"CostWithNoReservedInstances\" } },\r\n { \"Column\": \"CostWithNoReservedInstances2\", \"Properties\": { \"Field\": \"Cost With No ReservedInstances\" } },\r\n { \"Column\": \"FirstUsageDate\", \"Properties\": { \"Field\": \"FirstUsageDate\" } },\r\n { \"Column\": \"FirstUsageDate2\", \"Properties\": { \"Field\": \"First UsageDate\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup2\", \"Properties\": { \"Field\": \"Instance Flexibility Group\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio2\", \"Properties\": { \"Field\": \"Instance Flexibility Ratio\" } },\r\n { \"Column\": \"Location\", \"Properties\": { \"Field\": \"Location\" } },\r\n { \"Column\": \"LookBackPeriod\", \"Properties\": { \"Field\": \"LookBackPeriod\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"MeterID\", \"Properties\": { \"Field\": \"MeterID\" } },\r\n { \"Column\": \"NetSavings\", \"Properties\": { \"Field\": \"NetSavings\" } },\r\n { \"Column\": \"NetSavings2\", \"Properties\": { \"Field\": \"Net Savings\" } },\r\n { \"Column\": \"NormalizedSize\", \"Properties\": { \"Field\": \"NormalizedSize\" } },\r\n { \"Column\": \"NormalizedSize2\", \"Properties\": { \"Field\": \"Normalized Size\" } },\r\n { \"Column\": \"RecommendedQuantity\", \"Properties\": { \"Field\": \"RecommendedQuantity\" } },\r\n { \"Column\": \"RecommendedQuantity2\", \"Properties\": { \"Field\": \"Recommended Quantity\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized\", \"Properties\": { \"Field\": \"RecommendedQuantityNormalized\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized2\", \"Properties\": { \"Field\": \"Recommended Quantity Normalized\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\r\n { \"Column\": \"Scope\", \"Properties\": { \"Field\": \"Scope\" } },\r\n { \"Column\": \"scope\", \"Properties\": { \"Field\": \"scope\" } },\r\n { \"Column\": \"SKU\", \"Properties\": { \"Field\": \"SKU\" } },\r\n { \"Column\": \"SkuName\", \"Properties\": { \"Field\": \"SkuName\" } },\r\n { \"Column\": \"SkuProperties\", \"Properties\": { \"Field\": \"SkuProperties\" } },\r\n { \"Column\": \"SkuProperties2\", \"Properties\": { \"Field\": \"Sku Properties\" } },\r\n { \"Column\": \"SubscriptionId\", \"Properties\": { \"Field\": \"SubscriptionId\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstances\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances2\", \"Properties\": { \"Field\": \"Total Cost With ReservedInstances\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Recommendations_raw retention policy\r\n.alter-merge table Recommendations_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Recommendations_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All recommendations transformed to FOCUS 1.0.', folder='Recommendations')\r\nRecommendations_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n Recommendations_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Set source columns\r\n | extend x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationRecommendations', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', ''))\r\n //\r\n // Handle duplicated columns with spaces\r\n | extend CostWithNoReservedInstances = coalesce(CostWithNoReservedInstances, CostWithNoReservedInstances2)\r\n | extend FirstUsageDate = coalesce(FirstUsageDate, FirstUsageDate2)\r\n | extend InstanceFlexibilityGroup = coalesce(InstanceFlexibilityGroup, InstanceFlexibilityGroup2)\r\n | extend InstanceFlexibilityRatio = coalesce(InstanceFlexibilityRatio, InstanceFlexibilityRatio2)\r\n | extend NetSavings = coalesce(NetSavings, NetSavings2)\r\n | extend NormalizedSize = coalesce(NormalizedSize, NormalizedSize2)\r\n | extend RecommendedQuantity = coalesce(RecommendedQuantity, RecommendedQuantity2)\r\n | extend RecommendedQuantityNormalized = coalesce(RecommendedQuantityNormalized, RecommendedQuantityNormalized2)\r\n | extend SkuProperties = coalesce(SkuProperties, SkuProperties2)\r\n | extend TotalCostWithReservedInstances = coalesce(TotalCostWithReservedInstances, TotalCostWithReservedInstances2)\r\n //\r\n // Build recommendation details\r\n | lookup kind=leftouter (database('Ingestion').Regions | distinct Location = RegionId, RegionName) on Location\r\n | extend x_RecommendationDetails = case(\r\n x_SourceType == 'ReservationRecommendations', bag_pack(\r\n 'CommitmentDiscountNormalizedGroup', InstanceFlexibilityGroup,\r\n 'CommitmentDiscountNormalizedRatio', InstanceFlexibilityRatio,\r\n 'CommitmentDiscountNormalizedSize', NormalizedSize,\r\n 'CommitmentDiscountResourceType', ResourceType,\r\n 'CommitmentDiscountScope', coalesce(Scope, scope),\r\n 'LookbackPeriodDuration', case(\r\n LookBackPeriod matches regex @'^Last([0-9]+)Days$', replace_regex(LookBackPeriod, @'^Last([0-9]+)Days$', @'P\\1D'),\r\n ''\r\n ),\r\n 'LookbackPeriodStart', FirstUsageDate,\r\n 'RecommendedQuantity', RecommendedQuantity,\r\n 'RecommendedQuantityNormalized', RecommendedQuantityNormalized,\r\n 'RegionId', Location,\r\n 'RegionName', RegionName,\r\n 'SkuMeterId', coalesce(MeterId, MeterID),\r\n 'SkuPriceDetails', SkuProperties,\r\n 'SkuSize', coalesce(SKU, SkuName),\r\n 'SkuTerm', isoMonths(Term)\r\n ),\r\n dynamic({})\r\n )\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n ProviderName,\r\n SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''),\r\n x_IngestionTime = ingestion_time(),\r\n x_EffectiveCostAfter = TotalCostWithReservedInstances,\r\n x_EffectiveCostBefore = CostWithNoReservedInstances,\r\n x_EffectiveCostSavings = NetSavings,\r\n x_RecommendationDate = FirstUsageDate + (toint(extract(@'^Last([0-9]+)Days$', 1, LookBackPeriod)) * 1d),\r\n x_RecommendationDetails,\r\n x_SourceName,\r\n x_SourceProvider,\r\n x_SourceType,\r\n x_SourceVersion\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Recommendations_final_v1_0 table\r\n.create-merge table Recommendations_final_v1_0 (\r\n ProviderName: string,\r\n SubAccountId: string,\r\n x_IngestionTime: datetime,\r\n x_EffectiveCostAfter: decimal,\r\n x_EffectiveCostBefore: decimal,\r\n x_EffectiveCostSavings: decimal,\r\n x_RecommendationDate: datetime,\r\n x_RecommendationDetails: dynamic,\r\n x_SourceName: string,\r\n x_SourceProvider: string,\r\n x_SourceType: string,\r\n x_SourceVersion: string\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Recommendations_raw -> Recommendations_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Recommendations_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Recommendations_raw\",\r\n \"Query\": \"Recommendations_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Transactions |===================================================================================================\r\n// Supported versions:\r\n// - MS CM EA reservation transactions: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-transactions-ea\r\n// - MS CM MCA reservation transactions: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-transactions-mca\r\n//======================================================================================================================\r\n\r\n// Transactions_raw table\r\n.create-merge table Transactions_raw (\r\n AccountName: string, // MS CM EA resv trans 2023-05-01\r\n AccountOwnerEmail: string, // MS CM EA resv trans 2023-05-01\r\n Amount: decimal, // MS CM EA+MCA resv trans 2023-05-01\r\n ArmSkuName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n BillingFrequency: string, // MS CM EA+MCA resv trans 2023-05-01\r\n BillingMonth: string, // MS CM EA resv trans 2023-05-01\r\n BillingProfileId: string, // MS CM MCA resv trans 2023-05-01\r\n BillingProfileName: string, // MS CM MCA resv trans 2023-05-01\r\n CostCenter: string, // MS CM EA resv trans 2023-05-01\r\n Currency: string, // MS CM EA+MCA resv trans 2023-05-01\r\n CurrentEnrollmentId: string, // MS CM EA resv trans 2023-05-01\r\n DepartmentName: string, // MS CM EA resv trans 2023-05-01\r\n Description: string, // MS CM EA+MCA resv trans 2023-05-01\r\n EventDate: datetime, // MS CM EA+MCA resv trans 2023-05-01\r\n EventType: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Invoice: string, // MS CM EA+MCA resv trans 2023-05-01\r\n InvoiceId: string, // MS CM EA+MCA resv trans 2023-05-01\r\n InvoiceSectionId: string, // MS CM MCA resv trans 2023-05-01\r\n InvoiceSectionName: string, // MS CM MCA resv trans 2023-05-01\r\n MonetaryCommitment: decimal, // MS CM EA resv trans 2023-05-01\r\n Overage: decimal, // MS CM EA resv trans 2023-05-01\r\n PurchasingEnrollment: string, // MS CM EA resv trans 2023-05-01\r\n PurchasingSubscriptionGuid: string, // MS CM EA+MCA resv trans 2023-05-01\r\n PurchasingSubscriptionName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Quantity: decimal, // MS CM EA+MCA resv trans 2023-05-01\r\n Region: string, // MS CM EA+MCA resv trans 2023-05-01\r\n ReservationOrderId: string, // MS CM EA+MCA resv trans 2023-05-01\r\n ReservationOrderName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Term: string, // MS CM EA+MCA resv trans 2023-05-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Transactions_raw ingestion mapping\r\n.create-or-alter table Transactions_raw ingestion parquet mapping \"Transactions_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"AccountName\", \"Properties\": { \"Field\": \"AccountName\" } },\r\n { \"Column\": \"AccountOwnerEmail\", \"Properties\": { \"Field\": \"AccountOwnerEmail\" } },\r\n { \"Column\": \"Amount\", \"Properties\": { \"Field\": \"Amount\" } },\r\n { \"Column\": \"ArmSkuName\", \"Properties\": { \"Field\": \"ArmSkuName\" } },\r\n { \"Column\": \"BillingFrequency\", \"Properties\": { \"Field\": \"BillingFrequency\" } },\r\n { \"Column\": \"BillingMonth\", \"Properties\": { \"Field\": \"BillingMonth\" } },\r\n { \"Column\": \"BillingProfileId\", \"Properties\": { \"Field\": \"BillingProfileId\" } },\r\n { \"Column\": \"BillingProfileName\", \"Properties\": { \"Field\": \"BillingProfileName\" } },\r\n { \"Column\": \"CostCenter\", \"Properties\": { \"Field\": \"CostCenter\" } },\r\n { \"Column\": \"Currency\", \"Properties\": { \"Field\": \"Currency\" } },\r\n { \"Column\": \"CurrentEnrollmentId\", \"Properties\": { \"Field\": \"CurrentEnrollmentId\" } },\r\n { \"Column\": \"DepartmentName\", \"Properties\": { \"Field\": \"DepartmentName\" } },\r\n { \"Column\": \"Description\", \"Properties\": { \"Field\": \"Description\" } },\r\n { \"Column\": \"EventDate\", \"Properties\": { \"Field\": \"EventDate\" } },\r\n { \"Column\": \"EventType\", \"Properties\": { \"Field\": \"EventType\" } },\r\n { \"Column\": \"Invoice\", \"Properties\": { \"Field\": \"Invoice\" } },\r\n { \"Column\": \"InvoiceId\", \"Properties\": { \"Field\": \"InvoiceId\" } },\r\n { \"Column\": \"InvoiceSectionId\", \"Properties\": { \"Field\": \"InvoiceSectionId\" } },\r\n { \"Column\": \"InvoiceSectionName\", \"Properties\": { \"Field\": \"InvoiceSectionName\" } },\r\n { \"Column\": \"MonetaryCommitment\", \"Properties\": { \"Field\": \"MonetaryCommitment\" } },\r\n { \"Column\": \"Overage\", \"Properties\": { \"Field\": \"Overage\" } },\r\n { \"Column\": \"PurchasingEnrollment\", \"Properties\": { \"Field\": \"PurchasingEnrollment\" } },\r\n { \"Column\": \"PurchasingSubscriptionGuid\", \"Properties\": { \"Field\": \"PurchasingSubscriptionGuid\" } },\r\n { \"Column\": \"PurchasingSubscriptionName\", \"Properties\": { \"Field\": \"PurchasingSubscriptionName\" } },\r\n { \"Column\": \"Quantity\", \"Properties\": { \"Field\": \"Quantity\" } },\r\n { \"Column\": \"Region\", \"Properties\": { \"Field\": \"Region\" } },\r\n { \"Column\": \"ReservationOrderId\", \"Properties\": { \"Field\": \"ReservationOrderId\" } },\r\n { \"Column\": \"ReservationOrderName\", \"Properties\": { \"Field\": \"ReservationOrderName\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Transactions_raw retention policy\r\n.alter-merge table Transactions_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Transactions_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All transactions transformed to FOCUS 1.0.', folder='Transactions')\r\nTransactions_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n Transactions_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Set source columns\r\n | extend x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationTransactions', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', ''))\r\n //\r\n // Handle BillingPeriodStart/End\r\n | extend BillingMonth = tostring(BillingMonth)\r\n | extend BillingPeriodStart = iff(isempty(BillingMonth), datetime(null), todatetime(strcat(substring(BillingMonth, 0, 4), \"-\", substring(BillingMonth, 4, 2), \"-\", substring(BillingMonth, 6, 2))))\r\n | extend BillingPeriodEnd = iff(isempty(BillingMonth), datetime(null), startofmonth(endofmonth(BillingPeriodStart) + 1d))\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n BilledCost = Amount,\r\n BillingAccountId = case(\r\n BillingProfileId startswith '/', BillingProfileId,\r\n isnotempty(CurrentEnrollmentId), strcat('/providers/Microsoft.Billing/billingAccounts/', CurrentEnrollmentId),\r\n isnotempty(BillingProfileId), strcat('/providers/Microsoft.Billing/billingProfiles/', BillingProfileId),\r\n ''\r\n ),\r\n BillingAccountName = coalesce(BillingProfileName, CurrentEnrollmentId),\r\n BillingCurrency = Currency,\r\n BillingPeriodEnd,\r\n BillingPeriodStart,\r\n ChargeCategory = case(\r\n EventType in ('Cancel', 'Purchase', 'Refund'), 'Purchase',\r\n 'Adjustment'\r\n ),\r\n ChargeClass = case(\r\n EventType == 'Cancel', 'Cancel', // FOCUS does not handle this scenario\r\n EventType == 'Refund', 'Correction',\r\n ''\r\n ),\r\n ChargeDescription = Description,\r\n ChargeFrequency = case(\r\n BillingFrequency == 'OneTime', 'One-Time',\r\n BillingFrequency == 'Recurring', 'Recurring',\r\n BillingFrequency\r\n ),\r\n ChargePeriodStart = EventDate,\r\n PricingQuantity = Quantity,\r\n PricingUnit = 'Reservations',\r\n ProviderName,\r\n RegionId = Region,\r\n RegionName = Region,\r\n SubAccountId = iff(isempty(PurchasingSubscriptionGuid), '', strcat('/subscriptions/', PurchasingSubscriptionGuid)),\r\n SubAccountName = iff(isempty(PurchasingSubscriptionGuid), '', PurchasingSubscriptionName),\r\n x_AccountName = AccountName,\r\n x_AccountOwnerId = AccountOwnerEmail,\r\n x_CostCenter = CostCenter,\r\n x_InvoiceId = InvoiceId,\r\n x_InvoiceNumber = Invoice,\r\n x_InvoiceSectionId = InvoiceSectionId,\r\n x_InvoiceSectionName = coalesce(InvoiceSectionName, DepartmentName),\r\n x_IngestionTime = ingestion_time(),\r\n x_MonetaryCommitment = MonetaryCommitment,\r\n x_Overage = Overage,\r\n x_PurchasingBillingAccountId = PurchasingEnrollment,\r\n x_SkuOrderId = ReservationOrderId,\r\n x_SkuOrderName = ReservationOrderName,\r\n x_SkuSize = ArmSkuName,\r\n x_SkuTerm = isoMonths(Term),\r\n x_SourceName,\r\n x_SourceProvider,\r\n x_SourceType,\r\n x_SourceVersion,\r\n x_SubscriptionId = PurchasingSubscriptionGuid,\r\n x_TransactionType = EventType\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Transactions_final_v1_0 table\r\n.create-merge table Transactions_final_v1_0 (\r\n BilledCost: decimal, // MS CM EA+MCA 2023-05-01\r\n BillingAccountId: string, // MS CM EA+MCA 2023-05-01\r\n BillingAccountName: string, // MS CM EA+MCA 2023-05-01\r\n BillingCurrency: string, // MS CM EA+MCA 2023-05-01\r\n BillingPeriodEnd: datetime, // MS CM EA+MCA 2023-05-01\r\n BillingPeriodStart: datetime, // MS CM EA+MCA 2023-05-01\r\n ChargeCategory: string, // Hubs add-on\r\n ChargeClass: string, // Hubs add-on\r\n ChargeDescription: string, // MS CM EA+MCA 2023-05-01\r\n ChargeFrequency: string, // MS CM EA+MCA 2023-05-01\r\n ChargePeriodStart: datetime, // MS CM EA+MCA 2023-05-01\r\n PricingQuantity: decimal, // MS CM EA+MCA 2023-05-01\r\n PricingUnit: string, // Hubs add-on\r\n ProviderName: string, // Hubs add-on\r\n RegionId: string, // MS CM EA+MCA 2023-05-01\r\n RegionName: string, // MS CM EA+MCA 2023-05-01\r\n SubAccountId: string, // MS CM EA+MCA 2023-05-01\r\n SubAccountName: string, // MS CM EA+MCA 2023-05-01\r\n x_AccountName: string, // MS CM EA 2023-05-01\r\n x_AccountOwnerId: string, // MS CM EA 2023-05-01\r\n x_CostCenter: string, // MS CM EA 2023-05-01\r\n x_InvoiceId: string, // MS CM MCA 2023-05-01\r\n x_InvoiceNumber: string, // MS CM MCA 2023-05-01\r\n x_InvoiceSectionId: string, // MS CM MCA 2023-05-01\r\n x_InvoiceSectionName: string, // MS CM MCA 2023-05-01\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_MonetaryCommitment: decimal, // MS CM EA 2023-05-01\r\n x_Overage: decimal, // MS CM EA 2023-05-01\r\n x_PurchasingBillingAccountId: string, // MS CM EA 2023-05-01\r\n x_SkuOrderId: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuOrderName: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuSize: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuTerm: int, // MS CM EA+MCA 2023-05-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_SubscriptionId: string, // MS CM EA+MCA 2023-05-01\r\n x_TransactionType: string // MS CM EA+MCA 2023-05-01\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Transactions_raw -> Transactions_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Transactions_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Transactions_raw\",\r\n \"Query\": \"Transactions_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n",
+ "$fxv#8": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Common utility functions\r\n//\r\n// TIP: Use Ctrl+K,Ctrl+0 to collapse all regions in VS Code\r\n//======================================================================================================================\r\n\r\n\r\n//===| Date functions |=================================================================================================\r\n\r\n// monthstring\r\n.create-or-alter function \r\nwith (docstring = @'Returns the name of the month for the specified date (e.g. Jan or January)', folder =@'Common') \r\nmonthstring(['date']: datetime, length: int = 9)\r\n{\r\n substring(dynamic(['January','February','March','April','May','June','July','August','September','October','November','December'])[getmonth(['date']) - 1], 0, length)\r\n}\r\n\r\n// datestring\r\n.create-or-alter function \r\nwith (docstring = @'Converts 2 dates into a simple, user-friendly date range (e.g. Jan 1-Jan 3)', folder =@'Common') \r\ndatestring(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n let month = (d: datetime) { monthstring(d, 3) };\r\n let endDate = iff(end == datetime('0001-01-01'), start, end);\r\n let sameDate = startofday(start) == startofday(endDate);\r\n let sameMonth = startofmonth(start) == startofmonth(endDate);\r\n let sameYear = startofyear(start) == startofyear(endDate);\r\n let fullMonth = startofday(start) == startofmonth(start) and startofday(endDate) == startofday(endofmonth(endDate));\r\n let fullYear = startofday(start) == startofyear(start) and startofday(endDate) == startofday(endofyear(endDate));\r\n let currentYear = sameYear and startofyear(start) == startofyear(now());\r\n case(\r\n // Full year | yyyy (same year) / yyyy-yyyy (diff years)\r\n fullYear,\r\n strcat(getyear(start), iff(sameYear, '', strcat('-', getyear(endDate)))),\r\n // 1 full mo, same year | Mmm yyyy\r\n fullMonth and sameMonth and sameYear,\r\n strcat(month(start), ' ', getyear(start)),\r\n // 2+ full mo, same year | Mmm-Mmm (current year) / Mmm-Mmm yyyy (other year)\r\n fullMonth and sameYear,\r\n strcat(month(start), '-', month(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // Full mo, diff year | Mmm yyyy-Mmm yyyy\r\n fullMonth and not(sameYear),\r\n strcat(month(start), ' ', getyear(start), '-', month(endDate), ' ', getyear(endDate)),\r\n // Same date | Mmm d (current year) / Mmm d, yyyy (other year)\r\n sameDate,\r\n strcat(month(start), ' ', dayofmonth(start), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // 1 partial M, same Y | Mmm d-d (current year) / Mmm d-d, yyyy (other year)\r\n not(fullMonth) and sameMonth and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', dayofmonth(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // 2+ partial M, same Y | Mmm d-Mmm d (current year) / Mmm d-Mmm d, yyyy (other year)\r\n not(fullMonth) and not(sameMonth) and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', month(endDate), ' ', dayofmonth(endDate), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // All other cases | Mmm d, yyyy-Mmm d, yyyy\r\n strcat(month(start), ' ', dayofmonth(start), ', ', getyear(start), '-', month(endDate), ' ', dayofmonth(endDate), ', ', getyear(endDate))\r\n )\r\n}\r\n\r\n// daterange\r\n.create-or-alter function \r\nwith (docstring = @'DEPRECATED: Please use datestring(); function will be removed on or after the Jan 2026 release', folder =@'Common') \r\ndaterange(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n datestring(start, end)\r\n}\r\n\r\n// monthsago\r\n.create-or-alter function \r\nwith (docstring = 'DEPRECATED: Please use startofmonth(now(), -<# of months>); function will be removed on or after the Jan 2026 release', folder = 'Common')\r\nmonthsago(months: int)\r\n{\r\n datetime_add('month', -months, startofmonth(now()))\r\n}\r\n\r\n\r\n//===| Number functions |===============================================================================================\r\n// NOTE: Must be defined before string converters\r\n\r\n// delta\r\n.create-or-alter function \r\nwith (docstring = @'Compares 2 values and returns the percentage change from oldval to newval', folder =@'Common') \r\ndelta(oldval: double, newval: double)\r\n{\r\n (newval - todouble(oldval))/oldval\r\n}\r\n\r\n// percentOfTotal\r\n// NOTE: Must be before percent() function\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercentOfTotal(t: (Count: long), tot: long)\r\n{\r\n let total = todouble(tot);\r\n t \r\n | extend Percent = round(Count / total * 100, 3) \r\n | order by Count desc\r\n}\r\n\r\n// percent\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercent(t: (Count: long))\r\n{\r\n let total = todouble(toscalar(t | summarize sum(Count)));\r\n percentOfTotal(t, total)\r\n}\r\n\r\n// plusminus\r\n.create-or-alter function \r\nwith (docstring = 'Shows a +/- sign based on the direction of the number', folder = 'Common')\r\nplusminus(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, val, strcat('+', val))\r\n}\r\n\r\n// updown\r\n.create-or-alter function \r\nwith (docstring = 'Shows an up/down arrow based on the direction of the number', folder = 'Common')\r\nupdown(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, strcat('β', substring(val, 1)), strcat('β', val))\r\n}\r\n\r\n\r\n//===| String functions |===============================================================================================\r\n\r\n// percentstring\r\n// NOTE: Must be defined before deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a percentage and render as a string', folder = 'Common')\r\npercentstring(num: double, total: double = 1.0, places: int = 9)\r\n{\r\n let value = 1.0 * num / total * 100;\r\n strcat(case(\r\n places != 9, round(value, places),\r\n value < 10, round(value, 2),\r\n round(value, 1)\r\n ), '%')\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// arraystring\r\n.create-or-alter function \r\nwith (docstring = 'Convert an array to a comma-delimited string', folder = 'Common')\r\narraystring(arr: dynamic)\r\n{\r\n replace_string(replace_regex(replace_regex(replace_regex(replace_regex(replace_regex(\r\n tostring(arr)\r\n , @'^\\[\"', '')\r\n , @'\"\\]$', '')\r\n , @'^, ', '')\r\n , @', $', '')\r\n , @'^\\[]$', '')\r\n , '\",\"', ', ')\r\n}\r\n\r\n// deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a delta percentage and render as a string', folder = 'Common')\r\ndeltastring(oldval: double, newval: double, places: int = 1, useArrows: bool = false)\r\n{\r\n let d = delta(oldval, newval);\r\n strcat(case(useArrows and d > 0, 'β', useArrows and d < 0, 'β', d < 0, '-', ''), percentstring(abs(d), 1, places))\r\n}\r\n\r\n// diffstring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate the difference and render as a string', folder = 'Common')\r\ndiffstring(oldval: double, newval: double, places: int = 1)\r\n{\r\n plusminus(round(newval - oldval, places))\r\n}\r\n\r\n// numberstring\r\n.create-or-alter function \r\nwith (docstring = 'Convert a number to a string', folder = 'Common')\r\nnumberstring(num: double, abbrev: bool = true)\r\n{\r\n replace_regex(case(\r\n num >= 10000000000000, strcat(round(1.0 * num / 1000000000000, 1), 'T'),\r\n num >= 1000000000000, strcat(round(1.0 * num / 1000000000000, 2), 'T'),\r\n num >= 10000000000, strcat(round(1.0 * num / 1000000000, 1), 'B'),\r\n num >= 1000000000, strcat(round(1.0 * num / 1000000000, 2), 'B'),\r\n num >= 10000000, strcat(round(1.0 * num / 1000000, 1), 'M'),\r\n num >= 1000000, strcat(round(1.0 * num / 1000000, 2), 'M'),\r\n num >= 10000, strcat(round(1.0 * num / 1000, 1), 'K'),\r\n // Kusto doesn't support back-refs yet -- num > 1000, replace_regex(tostring(num), @'(\\d)(?=(\\d{3})+\\.)', @'\\1,'), // See https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/re2-library\r\n num > 1000, replace_regex(tostring(num), @'([0-9]{3})$', @',\\1'), //num / 1000, ',', substring(tostring(num), 0) - (num / 1000 * 1000)),\r\n tostring(num)\r\n ), @'\\.0$', '')\r\n}\r\n\r\n\r\n//===| Other |==========================================================================================================\r\n\r\n// ifempty\r\n.create-or-alter function \r\nwith (docstring = 'Replaces an empty value with the specified default value', folder = 'Common')\r\nifempty(val: dynamic, defaultVal: dynamic)\r\n{\r\n iff(isempty(val), defaultVal, val)\r\n}\r\n",
+ "$fxv#9": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Hub database\r\n// Used for querying and reporting.\r\n//\r\n// Versioning strategy:\r\n// - Each dataset includes a function that returns the latest version of the data (e.g., \"Costs()\").\r\n// - Every supported version of FOCUS should have a corresponding function (e.g., \"Costs_v1_0\").\r\n// - Each versioned function unions data from versioned tables in the Ingestion database and transforms it to that FOCUS version for back compat.\r\n// - Consumers should use the unversioned function for the latest and the versioned functions for back compat.\r\n//\r\n// To add a new FOCUS versions:\r\n// 1. Add new FOCUS version section after the latest version section and before existing version sections\r\n// 2. Create new *_vX_Y functions per dataset that transforms older data to the new FOCUS version\r\n// 3. Update the unversioned functions to use the new *_vX_Y functions\r\n// 4. Update older versioned functions to also pull from the new *_vX_Y functions and transform to the old schema\r\n//======================================================================================================================\r\n\r\n// For allowed commands, see https://learn.microsoft.com/azure/data-explorer/database-script\r\n\r\n\r\n//======================================================================================================================\r\n// FOCUS 1.0\r\n//======================================================================================================================\r\n\r\n// CommitmentDiscountUsage_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all commitment discount usage records aligned to FOCUS 1.0.', folder = 'CommitmentDiscountUsage')\r\nCommitmentDiscountUsage_v1_0()\r\n{\r\n database('Ingestion').CommitmentDiscountUsage_final_v1_0\r\n}\r\n\r\n\r\n// Costs_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all cost and usage records aligned to FOCUS 1.0.', folder = 'Costs')\r\nCosts_v1_0()\r\n{\r\n database('Ingestion').Costs_final_v1_0\r\n}\r\n\r\n\r\n// Prices_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all prices aligned to FOCUS 1.0.', folder = 'Prices')\r\nPrices_v1_0()\r\n{\r\n database('Ingestion').Prices_final_v1_0\r\n}\r\n\r\n\r\n// Recommendations_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all recommendations aligned to FOCUS 1.0.', folder = 'Recommendations')\r\nRecommendations_v1_0()\r\n{\r\n database('Ingestion').Recommendations_final_v1_0\r\n}\r\n\r\n\r\n// Transactions_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all transactions aligned to FOCUS 1.0.', folder = 'Transactions')\r\nTransactions_v1_0()\r\n{\r\n database('Ingestion').Transactions_final_v1_0\r\n}\r\n\r\n\r\n//======================================================================================================================\r\n// Latest FOCUS version\r\n//======================================================================================================================\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all commitment discount usage records with the latest supported version of the FOCUS schema.', folder = 'CommitmentDiscountUsage')\r\nCommitmentDiscountUsage()\r\n{\r\n CommitmentDiscountUsage_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all cost and usage records with the latest supported version of the FOCUS schema.', folder = 'Costs')\r\nCosts()\r\n{\r\n Costs_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all prices with the latest supported version of the FOCUS schema.', folder = 'Prices')\r\nPrices()\r\n{\r\n Prices_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all recommendations with the latest supported version of the FOCUS schema.', folder = 'Recommendations')\r\nRecommendations()\r\n{\r\n Recommendations_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all transactions with the latest supported version of the FOCUS schema.', folder = 'Transactions')\r\nTransactions()\r\n{\r\n Transactions_v1_0()\r\n}\r\n",
+ "ftkver": "[variables('$fxv#0')]",
+ "ftkVersion": "[if(contains(variables('ftkver'), '-'), split(variables('ftkver'), '-')[0], variables('ftkver'))]",
+ "ftkBranch": "[if(contains(variables('ftkver'), '-'), split(variables('ftkver'), '-')[1], '')]",
+ "dataExplorerPrivateDnsZoneName": "[replace(format('privatelink.{0}.{1}', parameters('location'), replace(environment().suffixes.storage, 'core', 'kusto')), '..', '.')]",
+ "ingestionCapacity": {
+ "Dev(No SLA)_Standard_E2a_v4": 1,
+ "Dev(No SLA)_Standard_D11_v2": 1,
+ "Standard_D11_v2": 2,
+ "Standard_D12_v2": 4,
+ "Standard_D13_v2": 8,
+ "Standard_D14_v2": 16,
+ "Standard_D16d_v5": 16,
+ "Standard_D32d_v4": 32,
+ "Standard_D32d_v5": 32,
+ "Standard_DS13_v2+1TB_PS": 8,
+ "Standard_DS13_v2+2TB_PS": 8,
+ "Standard_DS14_v2+3TB_PS": 16,
+ "Standard_DS14_v2+4TB_PS": 16,
+ "Standard_E2a_v4": 2,
+ "Standard_E2ads_v5": 2,
+ "Standard_E2d_v4": 2,
+ "Standard_E2d_v5": 2,
+ "Standard_E4a_v4": 4,
+ "Standard_E4ads_v5": 4,
+ "Standard_E4d_v4": 4,
+ "Standard_E4d_v5": 4,
+ "Standard_E8a_v4": 8,
+ "Standard_E8ads_v5": 8,
+ "Standard_E8as_v4+1TB_PS": 8,
+ "Standard_E8as_v4+2TB_PS": 8,
+ "Standard_E8as_v5+1TB_PS": 8,
+ "Standard_E8as_v5+2TB_PS": 8,
+ "Standard_E8d_v4": 8,
+ "Standard_E8d_v5": 8,
+ "Standard_E8s_v4+1TB_PS": 8,
+ "Standard_E8s_v4+2TB_PS": 8,
+ "Standard_E8s_v5+1TB_PS": 8,
+ "Standard_E8s_v5+2TB_PS": 8,
+ "Standard_E16a_v4": 16,
+ "Standard_E16ads_v5": 16,
+ "Standard_E16as_v4+3TB_PS": 16,
+ "Standard_E16as_v4+4TB_PS": 16,
+ "Standard_E16as_v5+3TB_PS": 16,
+ "Standard_E16as_v5+4TB_PS": 16,
+ "Standard_E16d_v4": 16,
+ "Standard_E16d_v5": 16,
+ "Standard_E16s_v4+3TB_PS": 16,
+ "Standard_E16s_v4+4TB_PS": 16,
+ "Standard_E16s_v5+3TB_PS": 16,
+ "Standard_E16s_v5+4TB_PS": 16,
+ "Standard_E64i_v3": 64,
+ "Standard_E80ids_v4": 80,
+ "Standard_EC8ads_v5": 8,
+ "Standard_EC8as_v5+1TB_PS": 8,
+ "Standard_EC8as_v5+2TB_PS": 8,
+ "Standard_EC16ads_v5": 16,
+ "Standard_EC16as_v5+3TB_PS": 16,
+ "Standard_EC16as_v5+4TB_PS": 16,
+ "Standard_L4s": 4,
+ "Standard_L8as_v3": 8,
+ "Standard_L8s": 8,
+ "Standard_L8s_v2": 8,
+ "Standard_L8s_v3": 8,
+ "Standard_L16as_v3": 16,
+ "Standard_L16s": 16,
+ "Standard_L16s_v2": 16,
+ "Standard_L16s_v3": 16,
+ "Standard_L32as_v3": 32,
+ "Standard_L32s_v3": 32
+ }
+ },
+ "resources": {
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_1": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_1')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#1')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_2": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_2')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#2')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_3": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_3')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#3')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_4": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_4')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#4')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::openDataScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#5')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_1",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_2",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_3",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_4"
+ ]
+ },
+ "cluster::ingestionDb::commonScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'CommonFunctions')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#6')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb",
+ "cluster::ingestionDb::openDataScript"
+ ]
+ },
+ "cluster::ingestionDb::setupScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'SetupScript')]",
+ "properties": {
+ "scriptContent": "[replace(replace(replace(replace(variables('$fxv#7'), '$$adfPrincipalId$$', reference('dataFactory', '2018-06-01', 'full').identity.principalId), '$$adfTenantId$$', reference('dataFactory', '2018-06-01', 'full').identity.tenantId), '$$ftkOpenDataFolder$$', if(empty(variables('ftkBranch')), format('https://github.com/microsoft/finops-toolkit/releases/download/v{0}', variables('ftkVersion')), format('https://raw.githubusercontent.com/microsoft/finops-toolkit/{0}/src/open-data', variables('ftkBranch')))), '$$rawRetentionInDays$$', string(parameters('rawRetentionInDays')))]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb::commonScript",
+ "dataFactory",
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::hubDb::commonScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Hub', 'CommonFunctions')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#8')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::hubDb"
+ ]
+ },
+ "cluster::hubDb::setupScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Hub', 'SetupScript')]",
+ "properties": {
+ "scriptContent": "[replace(replace(variables('$fxv#9'), '$$adfPrincipalId$$', reference('dataFactory', '2018-06-01', 'full').identity.principalId), '$$adfTenantId$$', reference('dataFactory', '2018-06-01', 'full').identity.tenantId)]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::hubDb::commonScript",
+ "dataFactory",
+ "cluster::hubDb"
+ ]
+ },
+ "cluster::adfClusterAdmin": {
+ "type": "Microsoft.Kusto/clusters/principalAssignments",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}', parameters('clusterName'), 'adf-mi-cluster-admin')]",
+ "properties": {
+ "principalType": "App",
+ "principalId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]",
+ "tenantId": "[reference('dataFactory', '2018-06-01', 'full').identity.tenantId]",
+ "role": "AllDatabasesAdmin"
+ },
+ "dependsOn": [
+ "cluster",
+ "dataFactory"
+ ]
+ },
+ "cluster::ingestionDb": {
+ "type": "Microsoft.Kusto/clusters/databases",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}', parameters('clusterName'), 'Ingestion')]",
+ "location": "[parameters('location')]",
+ "kind": "ReadWrite",
+ "dependsOn": [
+ "cluster"
+ ]
+ },
+ "cluster::hubDb": {
+ "type": "Microsoft.Kusto/clusters/databases",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}', parameters('clusterName'), 'Hub')]",
+ "location": "[parameters('location')]",
+ "kind": "ReadWrite",
+ "dependsOn": [
+ "cluster",
+ "cluster::ingestionDb::setupScript"
+ ]
+ },
+ "dataFactory": {
+ "existing": true,
+ "type": "Microsoft.DataFactory/factories",
+ "apiVersion": "2018-06-01",
+ "name": "[parameters('dataFactoryName')]"
+ },
+ "blobPrivateDnsZone": {
+ "existing": true,
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.blob.{0}', environment().suffixes.storage)]"
+ },
+ "queuePrivateDnsZone": {
+ "existing": true,
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.queue.{0}', environment().suffixes.storage)]"
+ },
+ "tablePrivateDnsZone": {
+ "existing": true,
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.table.{0}', environment().suffixes.storage)]"
+ },
+ "storage": {
+ "existing": true,
+ "type": "Microsoft.Storage/storageAccounts",
+ "apiVersion": "2022-09-01",
+ "name": "[parameters('storageAccountName')]"
+ },
+ "cluster": {
+ "type": "Microsoft.Kusto/clusters",
+ "apiVersion": "2023-08-15",
+ "name": "[parameters('clusterName')]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Kusto/clusters'), createObject()))]",
+ "sku": {
+ "name": "[parameters('clusterSku')]",
+ "tier": "[if(startsWith(parameters('clusterSku'), 'Dev(No SLA)_'), 'Basic', 'Standard')]",
+ "capacity": "[if(startsWith(parameters('clusterSku'), 'Dev(No SLA)_'), 1, if(equals(parameters('clusterCapacity'), 1), 2, parameters('clusterCapacity')))]"
+ },
+ "identity": {
+ "type": "SystemAssigned"
+ },
+ "properties": {
+ "copy": [
+ {
+ "name": "trustedExternalTenants",
+ "count": "[length(parameters('clusterTrustedExternalTenants'))]",
+ "input": {
+ "value": "[parameters('clusterTrustedExternalTenants')[copyIndex('trustedExternalTenants')]]"
+ }
+ }
+ ],
+ "enableStreamingIngest": true,
+ "enableAutoStop": false,
+ "publicNetworkAccess": "[if(parameters('enablePublicAccess'), 'Enabled', 'Disabled')]"
+ }
+ },
+ "clusterStorageAccess": {
+ "type": "Microsoft.Authorization/roleAssignments",
+ "apiVersion": "2022-04-01",
+ "scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
+ "name": "[guid(parameters('clusterName'), subscription().id, 'Storage Blob Data Contributor')]",
+ "properties": {
+ "description": "Give \"Storage Blob Data Contributor\" to the cluster",
+ "principalId": "[reference('cluster', '2023-08-15', 'full').identity.principalId]",
+ "principalType": "ServicePrincipal",
+ "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')]"
+ },
+ "dependsOn": [
+ "cluster"
+ ]
+ },
+ "dataExplorerPrivateDnsZone": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[variables('dataExplorerPrivateDnsZoneName')]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones'), createObject()))]",
+ "properties": {}
+ },
+ "dataExplorerPrivateDnsZoneLink": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "apiVersion": "2024-06-01",
+ "name": "[format('{0}/{1}', variables('dataExplorerPrivateDnsZoneName'), format('{0}-link', replace(variables('dataExplorerPrivateDnsZoneName'), '.', '-')))]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
+ "properties": {
+ "virtualNetwork": {
+ "id": "[parameters('virtualNetworkId')]"
+ },
+ "registrationEnabled": false
+ },
+ "dependsOn": [
+ "dataExplorerPrivateDnsZone"
+ ]
+ },
+ "dataExplorerEndpoint": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}-ep', parameters('clusterName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
+ "properties": {
+ "subnet": {
+ "id": "[parameters('privateEndpointSubnetId')]"
+ },
+ "privateLinkServiceConnections": [
+ {
+ "name": "dataExplorerLink",
+ "properties": {
+ "privateLinkServiceId": "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]",
+ "groupIds": [
+ "cluster"
+ ]
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "cluster"
+ ]
+ },
+ "dataExplorerPrivateDnsZoneGroup": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}/{1}', format('{0}-ep', parameters('clusterName')), 'dataExplorer-endpoint-zone')]",
+ "properties": {
+ "privateDnsZoneConfigs": [
+ {
+ "name": "privatelink-westus-kusto-net",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]"
+ }
+ },
+ {
+ "name": "privatelink-blob-core-windows-net",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.blob.{0}', environment().suffixes.storage))]"
+ }
+ },
+ {
+ "name": "privatelink-table-core-windows-net",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.table.{0}', environment().suffixes.storage))]"
+ }
+ },
+ {
+ "name": "privatelink-queue-core-windows-net",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', format('privatelink.queue.{0}', environment().suffixes.storage))]"
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "dataExplorerEndpoint",
+ "dataExplorerPrivateDnsZone"
+ ]
+ }
+ },
+ "outputs": {
+ "clusterId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the cluster."
+ },
+ "value": "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]"
+ },
+ "principalId": {
+ "type": "string",
+ "metadata": {
+ "description": "The ID of the cluster system assigned managed identity."
+ },
+ "value": "[reference('cluster', '2023-08-15', 'full').identity.principalId]"
+ },
+ "clusterName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the cluster."
+ },
+ "value": "[parameters('clusterName')]"
+ },
+ "clusterUri": {
+ "type": "string",
+ "metadata": {
+ "description": "The URI of the cluster."
+ },
+ "value": "[reference('cluster').uri]"
+ },
+ "ingestionDbName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the database for data ingestion."
+ },
+ "value": "Ingestion"
+ },
+ "hubDbName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the database for queries."
+ },
+ "value": "Hub"
+ },
+ "clusterIngestionCapacity": {
+ "type": "int",
+ "metadata": {
+ "description": "Max ingestion capacity of the cluster."
+ },
+ "value": "[coalesce(tryGet(variables('ingestionCapacity'), parameters('clusterSku')), 1)]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "dataFactory",
+ "storage",
+ "vnet"
+ ]
+ },
+ "dataFactoryResources": {
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "dataFactoryResources",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "hubName": {
+ "value": "[parameters('hubName')]"
+ },
+ "dataFactoryName": {
+ "value": "[variables('dataFactoryName')]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "tagsByResource": {
+ "value": "[parameters('tagsByResource')]"
+ },
+ "storageAccountName": {
+ "value": "[reference('storage').outputs.name.value]"
+ },
+ "exportContainerName": {
+ "value": "[reference('storage').outputs.exportContainer.value]"
+ },
+ "configContainerName": {
+ "value": "[reference('storage').outputs.configContainer.value]"
+ },
+ "ingestionContainerName": {
+ "value": "[reference('storage').outputs.ingestionContainer.value]"
+ },
+ "dataExplorerName": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.clusterName.value))]",
+ "dataExplorerPrincipalId": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.principalId.value))]",
+ "dataExplorerIngestionDatabase": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.ingestionDbName.value))]",
+ "dataExplorerIngestionCapacity": "[if(not(variables('deployDataExplorer')), createObject('value', 1), createObject('value', reference('dataExplorer').outputs.clusterIngestionCapacity.value))]",
+ "dataExplorerUri": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.clusterUri.value))]",
+ "dataExplorerId": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.clusterId.value))]",
+ "keyVaultName": {
+ "value": "[reference('keyVault').outputs.name.value]"
+ },
+ "remoteHubStorageUri": {
+ "value": "[parameters('remoteHubStorageUri')]"
+ },
+ "enablePublicAccess": {
+ "value": "[parameters('enablePublicAccess')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "languageVersion": "2.0",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "12735875725202531386"
+ }
+ },
+ "functions": [
+ {
+ "namespace": "__bicep",
+ "members": {
+ "getExportBody": {
+ "parameters": [
+ {
+ "type": "string",
+ "name": "exportContainerName"
+ },
+ {
+ "type": "string",
+ "name": "datasetType"
+ },
+ {
+ "type": "string",
+ "name": "schemaVersion"
+ },
+ {
+ "type": "bool",
+ "name": "isMonthly"
+ },
+ {
+ "type": "string",
+ "name": "exportFormat"
+ },
+ {
+ "type": "string",
+ "name": "compressionMode"
+ },
+ {
+ "type": "string",
+ "name": "partitionData"
+ },
+ {
+ "type": "string",
+ "name": "dataOverwriteBehavior"
+ }
+ ],
+ "output": {
+ "type": "string",
+ "value": "[format('{{ \"properties\": {{ \"definition\": {{ \"dataSet\": {{ \"configuration\": {{ \"dataVersion\": \"{0}\", \"filters\": [] }}, \"granularity\": \"Daily\" }}, \"timeframe\": \"{1}\", \"type\": \"{2}\" }}, \"deliveryInfo\": {{ \"destination\": {{ \"container\": \"{3}\", \"rootFolderPath\": \"@{{if(startswith(item().scope, ''/''), substring(item().scope, 1, sub(length(item().scope), 1)) ,item().scope)}}\", \"type\": \"AzureBlob\", \"resourceId\": \"@{{variables(''storageAccountId'')}}\" }} }}, \"schedule\": {{ \"recurrence\": \"{4}\", \"recurrencePeriod\": {{ \"from\": \"2024-01-01T00:00:00.000Z\", \"to\": \"2050-02-01T00:00:00.000Z\" }}, \"status\": \"Inactive\" }}, \"format\": \"{5}\", \"partitionData\": \"{6}\", \"dataOverwriteBehavior\": \"{7}\", \"compressionMode\": \"{8}\" }}, \"id\": \"@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{variables(''exportName'')}}\", \"name\": \"@{{variables(''exportName'')}}\", \"type\": \"Microsoft.CostManagement/reports\", \"identity\": {{ \"type\": \"systemAssigned\" }}, \"location\": \"global\" }}', parameters('schemaVersion'), if(parameters('isMonthly'), 'TheLastMonth', 'MonthToDate'), parameters('datasetType'), parameters('exportContainerName'), if(parameters('isMonthly'), 'Monthly', 'Daily'), parameters('exportFormat'), parameters('partitionData'), parameters('dataOverwriteBehavior'), parameters('compressionMode'))]"
+ }
+ }
+ }
+ }
+ ],
+ "parameters": {
+ "hubName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the FinOps hub instance."
+ }
+ },
+ "dataFactoryName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the Data Factory instance."
+ }
+ },
+ "keyVaultName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. The name of the Azure Key Vault instance."
+ }
+ },
+ "storageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. The name of the Azure storage account instance."
+ }
+ },
+ "exportContainerName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. The name of the container where Cost Management data is exported."
+ }
+ },
+ "ingestionContainerName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. The name of the container where normalized data is ingested."
+ }
+ },
+ "configContainerName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. The name of the container where normalized data is ingested."
+ }
+ },
+ "dataExplorerName": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer cluster to use for advanced analytics, if applicable."
+ }
+ },
+ "dataExplorerId": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. Resource ID of the Azure Data Explorer cluster to use for advanced analytics, if applicable."
+ }
+ },
+ "dataExplorerPrincipalId": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. ID of the Azure Data Explorer cluster system assigned managed identity, if applicable."
+ }
+ },
+ "dataExplorerUri": {
+ "type": "string",
+ "defaultValue": "",
+ "metadata": {
+ "description": "Optional. URI of the Azure Data Explorer cluster to use for advanced analytics, if applicable."
+ }
+ },
+ "dataExplorerIngestionDatabase": {
+ "type": "string",
+ "defaultValue": "Ingestion",
+ "metadata": {
+ "description": "Optional. Name of the Azure Data Explorer ingestion database. Default: \"ingestion\"."
+ }
+ },
+ "dataExplorerIngestionCapacity": {
+ "type": "int",
+ "defaultValue": 1,
+ "metadata": {
+ "description": "Optional. Azure Data Explorer ingestion capacity. Increase for non-dev SKUs. Default: 1"
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. The location to use for the managed identity and deployment script to auto-start triggers. Default = (resource group location)."
+ }
+ },
+ "remoteHubStorageUri": {
+ "type": "string",
+ "metadata": {
+ "description": "Optional. Remote storage account for ingestion dataset."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to all resources."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "metadata": {
+ "description": "Optional. Enable public access."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\n# \r\n$adfParams = @{\r\n ResourceGroupName = $env:DataFactoryResourceGroup\r\n DataFactoryName = $env:DataFactoryName\r\n}\r\n\r\n# Delete old triggers\r\n$triggers = Get-AzDataFactoryV2Trigger @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^msexports(_(setup|daily|monthly|extract|FileAdded))?$' }\r\n$DeploymentScriptOutputs[\"stopTriggers\"] = $triggers | Stop-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n$DeploymentScriptOutputs[\"deleteTriggers\"] = $triggers | Remove-AzDataFactoryV2Trigger -Force -ErrorAction SilentlyContinue\r\n\r\n# Delete old pipelines\r\n$DeploymentScriptOutputs[\"pipelines\"] = Get-AzDataFactoryV2Pipeline @adfParams -ErrorAction SilentlyContinue `\r\n| Where-Object { $_.Name -match '^(msexports_(backfill|extract|fill|get|run|setup|transform)|config_(BackfillData|ExportData|RunBackfill|RunExports))$' } `\r\n| Remove-AzDataFactoryV2Pipeline -Force -ErrorAction SilentlyContinue\r\n",
+ "$fxv#1": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n",
+ "$fxv#2": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n",
+ "focusSchemaVersion": "1.0",
+ "ftkVersion": "0.8",
+ "exportApiVersion": "2023-07-01-preview",
+ "hubDataExplorerName": "hubDataExplorer",
+ "deployDataExplorer": "[not(empty(parameters('dataExplorerId')))]",
+ "datasetPropsDefault": {
+ "location": {
+ "type": "AzureBlobFSLocation",
+ "fileName": {
+ "value": "@{dataset().fileName}",
+ "type": "Expression"
+ },
+ "folderPath": {
+ "value": "@{dataset().folderPath}",
+ "type": "Expression"
+ }
+ }
+ },
+ "safeExportContainerName": "[replace(format('{0}', parameters('exportContainerName')), '-', '_')]",
+ "safeIngestionContainerName": "[replace(format('{0}', parameters('ingestionContainerName')), '-', '_')]",
+ "safeConfigContainerName": "[replace(format('{0}', parameters('configContainerName')), '-', '_')]",
+ "managedVnetName": "default",
+ "ingestionIdFileNameSeparator": "__",
+ "exportManifestAddedTriggerName": "[format('{0}_ManifestAdded', variables('safeExportContainerName'))]",
+ "ingestionManifestAddedTriggerName": "[format('{0}_ManifestAdded', variables('safeIngestionContainerName'))]",
+ "updateConfigTriggerName": "[format('{0}_SettingsUpdated', variables('safeConfigContainerName'))]",
+ "dailyTriggerName": "[format('{0}_DailySchedule', variables('safeConfigContainerName'))]",
+ "monthlyTriggerName": "[format('{0}_MonthlySchedule', variables('safeConfigContainerName'))]",
+ "allHubTriggers": [
+ "[variables('exportManifestAddedTriggerName')]",
+ "[variables('ingestionManifestAddedTriggerName')]",
+ "[variables('updateConfigTriggerName')]",
+ "[variables('dailyTriggerName')]",
+ "[variables('monthlyTriggerName')]"
+ ],
+ "autoStartRbacRoles": [
+ "673868aa-7521-48a0-acc6-0f60742d39f5",
+ "e40ec5ca-96e0-45a2-b4ff-59039f2c2b59"
+ ],
+ "storageRbacRoles": [
+ "17d1049b-9a84-46fb-8f53-869881c3d3ab",
+ "ba92f5b4-2d11-453d-a403-e96b0029c9fe",
+ "acdd72a7-3385-48ef-bd42-f606fba81ae7",
+ "18d7d88d-d35e-4fb5-a5c3-7773c20a72d9"
+ ]
+ },
+ "resources": {
+ "dataFactory": {
+ "existing": true,
+ "type": "Microsoft.DataFactory/factories",
+ "apiVersion": "2018-06-01",
+ "name": "[parameters('dataFactoryName')]"
+ },
+ "storageAccount": {
+ "existing": true,
+ "type": "Microsoft.Storage/storageAccounts",
+ "apiVersion": "2022-09-01",
+ "name": "[parameters('storageAccountName')]"
+ },
+ "keyVault": {
+ "existing": true,
+ "type": "Microsoft.KeyVault/vaults",
+ "apiVersion": "2023-02-01",
+ "name": "[parameters('keyVaultName')]"
+ },
+ "managedVirtualNetwork": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.DataFactory/factories/managedVirtualNetworks",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('managedVnetName'))]",
+ "properties": {}
+ },
+ "managedIntegrationRuntime": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.DataFactory/factories/integrationRuntimes",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), 'ManagedIntegrationRuntime')]",
+ "properties": {
+ "type": "Managed",
+ "managedVirtualNetwork": {
+ "referenceName": "[variables('managedVnetName')]",
+ "type": "ManagedVirtualNetworkReference"
+ },
+ "typeProperties": {
+ "computeProperties": {
+ "location": "[parameters('location')]",
+ "dataFlowProperties": {
+ "computeType": "General",
+ "coreCount": 8,
+ "timeToLive": 10,
+ "cleanup": false,
+ "customProperties": []
+ },
+ "copyComputeScaleProperties": {
+ "dataIntegrationUnit": 16,
+ "timeToLive": 30
+ },
+ "pipelineExternalComputeScaleProperties": {
+ "timeToLive": 30,
+ "numberOfPipelineNodes": 1,
+ "numberOfExternalNodes": 1
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "managedVirtualNetwork"
+ ]
+ },
+ "storageManagedPrivateEndpoint": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}/{2}', parameters('dataFactoryName'), variables('managedVnetName'), parameters('storageAccountName'))]",
+ "properties": {
+ "name": "[parameters('storageAccountName')]",
+ "groupId": "dfs",
+ "privateLinkResourceId": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
+ "fqdns": [
+ "[reference('storageAccount').primaryEndpoints.dfs]"
+ ]
+ },
+ "dependsOn": [
+ "managedVirtualNetwork",
+ "storageAccount"
+ ]
+ },
+ "keyVaultManagedPrivateEndpoint": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}/{2}', parameters('dataFactoryName'), variables('managedVnetName'), parameters('keyVaultName'))]",
+ "properties": {
+ "name": "[parameters('keyVaultName')]",
+ "groupId": "vault",
+ "privateLinkResourceId": "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
+ "fqdns": [
+ "[reference('keyVault').vaultUri]"
+ ]
+ },
+ "dependsOn": [
+ "keyVault",
+ "managedVirtualNetwork"
+ ]
+ },
+ "dataExplorerManagedPrivateEndpoint": {
+ "condition": "[and(variables('deployDataExplorer'), not(parameters('enablePublicAccess')))]",
+ "type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}/{2}', parameters('dataFactoryName'), variables('managedVnetName'), variables('hubDataExplorerName'))]",
+ "properties": {
+ "name": "[variables('hubDataExplorerName')]",
+ "groupId": "cluster",
+ "privateLinkResourceId": "[parameters('dataExplorerId')]",
+ "fqdns": [
+ "[parameters('dataExplorerUri')]"
+ ]
+ },
+ "dependsOn": [
+ "managedVirtualNetwork"
+ ]
+ },
+ "triggerManagerIdentity": {
+ "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
+ "apiVersion": "2023-01-31",
+ "name": "[format('{0}_triggerManager', parameters('dataFactoryName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), createObject()))]"
+ },
+ "triggerManagerRoleAssignments": {
+ "copy": {
+ "name": "triggerManagerRoleAssignments",
+ "count": "[length(variables('autoStartRbacRoles'))]"
+ },
+ "type": "Microsoft.Authorization/roleAssignments",
+ "apiVersion": "2022-04-01",
+ "scope": "[format('Microsoft.DataFactory/factories/{0}', parameters('dataFactoryName'))]",
+ "name": "[guid(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), variables('autoStartRbacRoles')[copyIndex()], resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName'))))]",
+ "properties": {
+ "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', variables('autoStartRbacRoles')[copyIndex()])]",
+ "principalId": "[reference('triggerManagerIdentity').principalId]",
+ "principalType": "ServicePrincipal"
+ },
+ "dependsOn": [
+ "triggerManagerIdentity"
+ ]
+ },
+ "factoryIdentityStorageRoleAssignments": {
+ "copy": {
+ "name": "factoryIdentityStorageRoleAssignments",
+ "count": "[length(variables('storageRbacRoles'))]"
+ },
+ "type": "Microsoft.Authorization/roleAssignments",
+ "apiVersion": "2022-04-01",
+ "scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
+ "name": "[guid(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), variables('storageRbacRoles')[copyIndex()], resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')))]",
+ "properties": {
+ "roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', variables('storageRbacRoles')[copyIndex()])]",
+ "principalId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]",
+ "principalType": "ServicePrincipal"
+ },
+ "dependsOn": [
+ "dataFactory"
+ ]
+ },
+ "deleteOldResources": {
+ "type": "Microsoft.Resources/deploymentScripts",
+ "apiVersion": "2020-10-01",
+ "name": "[format('{0}_deleteOldResources', parameters('dataFactoryName'))]",
+ "location": "[if(startsWith(parameters('location'), 'china'), 'chinaeast2', parameters('location'))]",
+ "identity": {
+ "type": "UserAssigned",
+ "userAssignedIdentities": {
+ "[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName'))))]": {}
+ }
+ },
+ "kind": "AzurePowerShell",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]",
+ "properties": {
+ "azPowerShellVersion": "8.0",
+ "retentionInterval": "PT1H",
+ "cleanupPreference": "OnSuccess",
+ "scriptContent": "[variables('$fxv#0')]",
+ "environmentVariables": [
+ {
+ "name": "DataFactorySubscriptionId",
+ "value": "[subscription().id]"
+ },
+ {
+ "name": "DataFactoryResourceGroup",
+ "value": "[resourceGroup().name]"
+ },
+ {
+ "name": "DataFactoryName",
+ "value": "[parameters('dataFactoryName')]"
+ }
+ ]
+ },
+ "dependsOn": [
+ "triggerManagerIdentity",
+ "triggerManagerRoleAssignments"
+ ]
+ },
+ "stopTriggers": {
+ "type": "Microsoft.Resources/deploymentScripts",
+ "apiVersion": "2020-10-01",
+ "name": "[format('{0}_stopTriggers', parameters('dataFactoryName'))]",
+ "location": "[parameters('location')]",
+ "identity": {
+ "type": "UserAssigned",
+ "userAssignedIdentities": {
+ "[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName'))))]": {}
+ }
+ },
+ "kind": "AzurePowerShell",
+ "tags": "[parameters('tags')]",
+ "properties": {
+ "azPowerShellVersion": "8.0",
+ "retentionInterval": "PT1H",
+ "cleanupPreference": "OnSuccess",
+ "scriptContent": "[variables('$fxv#1')]",
+ "arguments": "-Stop",
+ "environmentVariables": [
+ {
+ "name": "DataFactorySubscriptionId",
+ "value": "[subscription().id]"
+ },
+ {
+ "name": "DataFactoryResourceGroup",
+ "value": "[resourceGroup().name]"
+ },
+ {
+ "name": "DataFactoryName",
+ "value": "[parameters('dataFactoryName')]"
+ },
+ {
+ "name": "Triggers",
+ "value": "[join(variables('allHubTriggers'), '|')]"
+ }
+ ]
+ },
+ "dependsOn": [
+ "triggerManagerIdentity",
+ "triggerManagerRoleAssignments"
+ ]
+ },
+ "linkedService_keyVault": {
+ "type": "Microsoft.DataFactory/factories/linkedservices",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), parameters('keyVaultName'))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {},
+ "type": "AzureKeyVault",
+ "typeProperties": {
+ "baseUrl": "[reference(format('Microsoft.KeyVault/vaults/{0}', parameters('keyVaultName')), '2023-02-01').vaultUri]"
+ },
+ "connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
+ },
+ "dependsOn": [
+ "managedIntegrationRuntime"
+ ]
+ },
+ "linkedService_storageAccount": {
+ "type": "Microsoft.DataFactory/factories/linkedservices",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), parameters('storageAccountName'))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {},
+ "type": "AzureBlobFS",
+ "typeProperties": {
+ "url": "[reference(format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName')), '2021-08-01').primaryEndpoints.dfs]"
+ },
+ "connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
+ },
+ "dependsOn": [
+ "managedIntegrationRuntime"
+ ]
+ },
+ "linkedService_dataExplorer": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.DataFactory/factories/linkedservices",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('hubDataExplorerName'))]",
+ "properties": {
+ "type": "AzureDataExplorer",
+ "parameters": {
+ "database": {
+ "type": "String",
+ "defaultValue": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ },
+ "typeProperties": {
+ "endpoint": "[parameters('dataExplorerUri')]",
+ "database": "@{linkedService().database}",
+ "tenant": "[reference('dataFactory', '2018-06-01', 'full').identity.tenantId]",
+ "servicePrincipalId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]"
+ },
+ "connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
+ },
+ "dependsOn": [
+ "dataFactory",
+ "managedIntegrationRuntime"
+ ]
+ },
+ "linkedService_remoteHubStorage": {
+ "condition": "[not(empty(parameters('remoteHubStorageUri')))]",
+ "type": "Microsoft.DataFactory/factories/linkedservices",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), 'remoteHubStorage')]",
+ "properties": {
+ "annotations": [],
+ "parameters": {},
+ "type": "AzureBlobFS",
+ "typeProperties": {
+ "url": "[parameters('remoteHubStorageUri')]",
+ "accountKey": {
+ "type": "AzureKeyVaultSecret",
+ "store": {
+ "referenceName": "[parameters('keyVaultName')]",
+ "type": "LinkedServiceReference"
+ },
+ "secretName": "[format('{0}-storage-key', toLower(parameters('hubName')))]"
+ }
+ },
+ "connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
+ },
+ "dependsOn": [
+ "linkedService_keyVault",
+ "managedIntegrationRuntime"
+ ]
+ },
+ "linkedService_ftkRepo": {
+ "type": "Microsoft.DataFactory/factories/linkedservices",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), 'ftkRepo')]",
+ "properties": {
+ "parameters": {
+ "filePath": {
+ "type": "string"
+ }
+ },
+ "annotations": [],
+ "type": "HttpServer",
+ "typeProperties": {
+ "url": "@concat('https://github.com/microsoft/finops-toolkit/', linkedService().filePath)",
+ "enableServerCertificateValidation": true,
+ "authenticationType": "Anonymous"
+ },
+ "connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
+ },
+ "dependsOn": [
+ "managedIntegrationRuntime"
+ ]
+ },
+ "dataset_config": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "fileName": {
+ "type": "String",
+ "defaultValue": "settings.json"
+ },
+ "folderPath": {
+ "type": "String",
+ "defaultValue": "[parameters('configContainerName')]"
+ }
+ },
+ "type": "Json",
+ "typeProperties": "[variables('datasetPropsDefault')]",
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[parameters('storageAccountName')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_manifest": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), 'manifest')]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "fileName": {
+ "type": "String",
+ "defaultValue": "manifest.json"
+ },
+ "folderPath": {
+ "type": "String",
+ "defaultValue": "[parameters('exportContainerName')]"
+ }
+ },
+ "type": "Json",
+ "typeProperties": "[variables('datasetPropsDefault')]",
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[parameters('storageAccountName')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_msexports": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('safeExportContainerName'))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "blobPath": {
+ "type": "String"
+ }
+ },
+ "type": "DelimitedText",
+ "typeProperties": {
+ "location": {
+ "type": "AzureBlobFSLocation",
+ "fileName": {
+ "value": "@{dataset().blobPath}",
+ "type": "Expression"
+ },
+ "fileSystem": "[variables('safeExportContainerName')]"
+ },
+ "columnDelimiter": ",",
+ "escapeChar": "\"",
+ "quoteChar": "\"",
+ "firstRowAsHeader": true
+ },
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[parameters('storageAccountName')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_msexports_gzip": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_gzip', variables('safeExportContainerName')))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "blobPath": {
+ "type": "String"
+ }
+ },
+ "type": "DelimitedText",
+ "typeProperties": {
+ "location": {
+ "type": "AzureBlobFSLocation",
+ "fileName": {
+ "value": "@{dataset().blobPath}",
+ "type": "Expression"
+ },
+ "fileSystem": "[variables('safeExportContainerName')]"
+ },
+ "columnDelimiter": ",",
+ "escapeChar": "\"",
+ "quoteChar": "\"",
+ "firstRowAsHeader": true,
+ "compressionCodec": "Gzip"
+ },
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[parameters('storageAccountName')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_msexports_parquet": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_parquet', variables('safeExportContainerName')))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "blobPath": {
+ "type": "String"
+ }
+ },
+ "type": "Parquet",
+ "typeProperties": {
+ "location": {
+ "type": "AzureBlobFSLocation",
+ "fileName": {
+ "value": "@{dataset().blobPath}",
+ "type": "Expression"
+ },
+ "fileSystem": "[variables('safeExportContainerName')]"
+ }
+ },
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[parameters('storageAccountName')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_ingestion": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('safeIngestionContainerName'))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "blobPath": {
+ "type": "String"
+ }
+ },
+ "type": "Parquet",
+ "typeProperties": {
+ "location": {
+ "type": "AzureBlobFSLocation",
+ "fileName": {
+ "value": "@{dataset().blobPath}",
+ "type": "Expression"
+ },
+ "fileSystem": "[variables('safeIngestionContainerName')]"
+ }
+ },
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[if(empty(parameters('remoteHubStorageUri')), parameters('storageAccountName'), 'remoteHubStorage')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_remoteHubStorage",
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_ingestion_files": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_files', variables('safeIngestionContainerName')))]",
+ "properties": {
+ "annotations": [],
+ "parameters": {
+ "folderPath": {
+ "type": "String"
+ }
+ },
+ "type": "Parquet",
+ "typeProperties": {
+ "location": {
+ "type": "AzureBlobFSLocation",
+ "fileSystem": "[variables('safeIngestionContainerName')]",
+ "folderPath": {
+ "value": "@dataset().folderPath",
+ "type": "Expression"
+ }
+ }
+ },
+ "linkedServiceName": {
+ "parameters": {},
+ "referenceName": "[if(empty(parameters('remoteHubStorageUri')), parameters('storageAccountName'), 'remoteHubStorage')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ "dependsOn": [
+ "linkedService_remoteHubStorage",
+ "linkedService_storageAccount"
+ ]
+ },
+ "dataset_dataExplorer": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('hubDataExplorerName'))]",
+ "properties": {
+ "type": "AzureDataExplorerTable",
+ "linkedServiceName": {
+ "parameters": {
+ "database": "@dataset().database"
+ },
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference"
+ },
+ "parameters": {
+ "database": {
+ "type": "String",
+ "defaultValue": "[parameters('dataExplorerIngestionDatabase')]"
+ },
+ "table": {
+ "type": "String"
+ }
+ },
+ "typeProperties": {
+ "table": {
+ "value": "@dataset().table",
+ "type": "Expression"
+ }
+ }
+ },
+ "dependsOn": [
+ "linkedService_dataExplorer"
+ ]
+ },
+ "dataset_ftkReleaseFile": {
+ "type": "Microsoft.DataFactory/factories/datasets",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), 'ftkReleaseFile')]",
+ "properties": {
+ "linkedServiceName": {
+ "referenceName": "ftkRepo",
+ "type": "LinkedServiceReference"
+ },
+ "parameters": {
+ "fileName": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string",
+ "defaultValue": "[variables('ftkVersion')]"
+ }
+ },
+ "annotations": [],
+ "type": "DelimitedText",
+ "typeProperties": {
+ "location": {
+ "type": "HttpServerLocation",
+ "relativeUrl": {
+ "value": "@concat('releases/download/v', dataset().version, '/', dataset().fileName)",
+ "type": "Expression"
+ }
+ },
+ "columnDelimiter": ",",
+ "escapeChar": "\\",
+ "firstRowAsHeader": true,
+ "quoteChar": "\""
+ },
+ "schema": []
+ },
+ "dependsOn": [
+ "linkedService_ftkRepo"
+ ]
+ },
+ "trigger_ExportManifestAdded": {
+ "type": "Microsoft.DataFactory/factories/triggers",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('exportManifestAddedTriggerName'))]",
+ "properties": {
+ "annotations": [],
+ "pipelines": [
+ {
+ "pipelineReference": {
+ "referenceName": "[format('{0}_ExecuteETL', variables('safeExportContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "parameters": {
+ "folderPath": "@triggerBody().folderPath",
+ "fileName": "@triggerBody().fileName"
+ }
+ }
+ ],
+ "type": "BlobEventsTrigger",
+ "typeProperties": {
+ "blobPathBeginsWith": "[format('/{0}/blobs/', parameters('exportContainerName'))]",
+ "blobPathEndsWith": "manifest.json",
+ "ignoreEmptyBlobs": true,
+ "scope": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
+ "events": [
+ "Microsoft.Storage.BlobCreated"
+ ]
+ }
+ },
+ "dependsOn": [
+ "pipeline_ExecuteExportsETL",
+ "stopTriggers"
+ ]
+ },
+ "trigger_IngestionManifestAdded": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.DataFactory/factories/triggers",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('ingestionManifestAddedTriggerName'))]",
+ "properties": {
+ "annotations": [],
+ "pipelines": [
+ {
+ "pipelineReference": {
+ "referenceName": "[format('{0}_ExecuteETL', variables('safeIngestionContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "parameters": {
+ "folderPath": "@triggerBody().folderPath"
+ }
+ }
+ ],
+ "type": "BlobEventsTrigger",
+ "typeProperties": {
+ "blobPathBeginsWith": "[format('/{0}/blobs/', parameters('ingestionContainerName'))]",
+ "blobPathEndsWith": "manifest.json",
+ "ignoreEmptyBlobs": true,
+ "scope": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
+ "events": [
+ "Microsoft.Storage.BlobCreated"
+ ]
+ }
+ },
+ "dependsOn": [
+ "pipeline_ExecuteIngestionETL",
+ "stopTriggers"
+ ]
+ },
+ "trigger_SettingsUpdated": {
+ "type": "Microsoft.DataFactory/factories/triggers",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('updateConfigTriggerName'))]",
+ "properties": {
+ "annotations": [],
+ "pipelines": [
+ {
+ "pipelineReference": {
+ "referenceName": "[format('{0}_ConfigureExports', variables('safeConfigContainerName'))]",
+ "type": "PipelineReference"
+ }
+ }
+ ],
+ "type": "BlobEventsTrigger",
+ "typeProperties": {
+ "blobPathBeginsWith": "[format('/{0}/blobs/', parameters('configContainerName'))]",
+ "blobPathEndsWith": "settings.json",
+ "ignoreEmptyBlobs": true,
+ "scope": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
+ "events": [
+ "Microsoft.Storage.BlobCreated"
+ ]
+ }
+ },
+ "dependsOn": [
+ "pipeline_ConfigureExports",
+ "stopTriggers"
+ ]
+ },
+ "trigger_DailySchedule": {
+ "type": "Microsoft.DataFactory/factories/triggers",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('dailyTriggerName'))]",
+ "properties": {
+ "pipelines": [
+ {
+ "pipelineReference": {
+ "referenceName": "[format('{0}_StartExportProcess', variables('safeConfigContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "parameters": {
+ "Recurrence": "Daily"
+ }
+ }
+ ],
+ "type": "ScheduleTrigger",
+ "typeProperties": {
+ "recurrence": {
+ "frequency": "Hour",
+ "interval": 24,
+ "startTime": "2023-01-01T01:01:00",
+ "timeZone": "[reference('azuretimezones').outputs.Timezone.value]"
+ }
+ }
+ },
+ "dependsOn": [
+ "azuretimezones",
+ "pipeline_StartExportProcess",
+ "stopTriggers"
+ ]
+ },
+ "trigger_MonthlySchedule": {
+ "type": "Microsoft.DataFactory/factories/triggers",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('monthlyTriggerName'))]",
+ "properties": {
+ "pipelines": [
+ {
+ "pipelineReference": {
+ "referenceName": "[format('{0}_StartExportProcess', variables('safeConfigContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "parameters": {
+ "Recurrence": "Monthly"
+ }
+ }
+ ],
+ "type": "ScheduleTrigger",
+ "typeProperties": {
+ "recurrence": {
+ "frequency": "Month",
+ "interval": 1,
+ "startTime": "2023-01-05T01:11:00",
+ "timeZone": "[reference('azuretimezones').outputs.Timezone.value]",
+ "schedule": {
+ "monthDays": [
+ 5,
+ 19
+ ]
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "azuretimezones",
+ "pipeline_StartExportProcess",
+ "stopTriggers"
+ ]
+ },
+ "pipeline_InitializeHub": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_InitializeHub', variables('safeConfigContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Get Config",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference"
+ }
+ }
+ },
+ {
+ "name": "Set Version",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "version",
+ "value": {
+ "value": "@activity('Get Config').output.firstRow.version",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Scopes",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopes",
+ "value": {
+ "value": "@string(activity('Get Config').output.firstRow.scopes)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Retention",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "retention",
+ "value": {
+ "value": "@string(activity('Get Config').output.firstRow.retention)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Until Capacity Is Available",
+ "type": "Until",
+ "dependsOn": [
+ {
+ "activity": "Set Version",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Retention",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@equals(variables('tryAgain'), false)",
+ "type": "Expression"
+ },
+ "activities": [
+ {
+ "name": "Confirm Ingestion Capacity",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": ".show capacity | where Resource == 'Ingestions' | project Remaining",
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "If Has Capacity",
+ "type": "IfCondition",
+ "dependsOn": [
+ {
+ "activity": "Confirm Ingestion Capacity",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@or(equals(activity('Confirm Ingestion Capacity').output.count, 0), greater(activity('Confirm Ingestion Capacity').output.value[0].Remaining, 0))",
+ "type": "Expression"
+ },
+ "ifFalseActivities": [
+ {
+ "name": "Wait for Ingestion",
+ "type": "Wait",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "waitTimeInSeconds": 15
+ }
+ },
+ {
+ "name": "Try Again",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Wait for Ingestion",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": true
+ }
+ }
+ ],
+ "ifTrueActivities": [
+ {
+ "name": "Set ingestion policy in ADX",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": {
+ "value": "[format('.alter-merge database {0} policy managed_identity \"[ {{ ''ObjectId'' : ''{1}'', ''AllowedUsages'' : ''NativeIngestion'' }}]\"', parameters('dataExplorerIngestionDatabase'), parameters('dataExplorerPrincipalId'))]",
+ "type": "Expression"
+ },
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Save Hub Settings in ADX",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Set ingestion policy in ADX",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": {
+ "value": "@concat('.append HubSettingsLog <| print version=\"', variables('version'), '\",scopes=dynamic(', variables('scopes'), '),retention=dynamic(', variables('retention'), ') | extend scopes = iff(isnull(scopes[0]), pack_array(scopes), scopes) | mv-apply scopeObj = scopes on (where isnotempty(scopeObj.scope) | summarize scopes = make_set(scopeObj.scope))')",
+ "type": "Expression"
+ },
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Update PricingUnits in ADX",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Save Hub Settings in ADX",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": "[format('.set-or-replace PricingUnits <| externaldata(x_PricingUnitDescription: string, AccountTypes: string, x_PricingBlockSize: decimal, PricingUnit: string)[@\"https://github.com/microsoft/finops-toolkit/releases/download/v{0}/PricingUnits.csv\"] with (format=\"csv\", ignoreFirstRecord=true) | project-away AccountTypes', variables('ftkVersion'))]",
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Update Regions in ADX",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Update PricingUnits in ADX",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": "[format('.set-or-replace Regions <| externaldata(ResourceLocation: string, RegionId: string, RegionName: string)[@\"https://github.com/microsoft/finops-toolkit/releases/download/v{0}/Regions.csv\"] with (format=\"csv\", ignoreFirstRecord=true)', variables('ftkVersion'))]",
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Update ResourceTypes in ADX",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Update Regions in ADX",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": "[format('.set-or-replace ResourceTypes <| externaldata(x_ResourceType: string, SingularDisplayName: string, PluralDisplayName: string, LowerSingularDisplayName: string, LowerPluralDisplayName: string, IsPreview: bool, Description: string, IconUri: string, Links: string)[@\"https://github.com/microsoft/finops-toolkit/releases/download/v{0}/ResourceTypes.csv\"] with (format=\"csv\", ignoreFirstRecord=true) | project-away Links', variables('ftkVersion'))]",
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Update Services in ADX",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Update ResourceTypes in ADX",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": "[format('.set-or-replace Services <| externaldata(x_ConsumedService: string, x_ResourceType: string, ServiceName: string, ServiceCategory: string, ServiceSubcategory: string, PublisherName: string, x_PublisherCategory: string, x_Environment: string, x_ServiceModel: string)[@\"https://github.com/microsoft/finops-toolkit/releases/download/v{0}/Services.csv\"] with (format=\"csv\", ignoreFirstRecord=true)', variables('ftkVersion'))]",
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Ingestion Complete",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Update Services in ADX",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "Abort On Error",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "If Has Capacity",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": false
+ }
+ }
+ ],
+ "timeout": "0.02:00:00"
+ }
+ },
+ {
+ "name": "Timeout Error",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Until Capacity Is Available",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": "Data Explorer ingestion timed out after 2 hours while waiting for available capacity. Please re-run this pipeline to re-attempt ingestion. If you continue to see this error, please report an issue at https://aka.ms/ftk/ideas.",
+ "errorCode": "DataExplorerIngestionTimeout"
+ }
+ }
+ ],
+ "concurrency": 1,
+ "variables": {
+ "version": {
+ "type": "String"
+ },
+ "scopes": {
+ "type": "String"
+ },
+ "retention": {
+ "type": "String"
+ },
+ "tryAgain": {
+ "type": "Boolean",
+ "defaultValue": true
+ }
+ }
+ },
+ "dependsOn": [
+ "dataset_config",
+ "linkedService_dataExplorer"
+ ],
+ "metadata": {
+ "description": "Initializes the hub instance based on the configuration settings."
+ }
+ },
+ "pipeline_StartBackfillProcess": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_StartBackfillProcess', variables('safeConfigContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Get Config",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@variables('fileName')",
+ "type": "Expression"
+ },
+ "folderPath": {
+ "value": "@variables('folderPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set backfill end date",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "endDate",
+ "value": {
+ "value": "@addDays(startOfMonth(utcNow()), -1)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set backfill start date",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "startDate",
+ "value": {
+ "value": "@subtractFromTime(startOfMonth(utcNow()), activity('Get Config').output.firstRow.retention.ingestion.months, 'Month')",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set export start date",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Set backfill start date",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "thisMonth",
+ "value": {
+ "value": "@startOfMonth(variables('endDate'))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set export end date",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Set export start date",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "nextMonth",
+ "value": {
+ "value": "@startOfMonth(subtractFromTime(variables('thisMonth'), 1, 'Month'))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Every Month",
+ "type": "Until",
+ "dependsOn": [
+ {
+ "activity": "Set export end date",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set backfill end date",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@less(variables('thisMonth'), variables('startDate'))",
+ "type": "Expression"
+ },
+ "activities": [
+ {
+ "name": "Update export start date",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Backfill data",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "thisMonth",
+ "value": {
+ "value": "@variables('nextMonth')",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Update export end date",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Update export start date",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "nextMonth",
+ "value": {
+ "value": "@subtractFromTime(variables('thisMonth'), 1, 'Month')",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Backfill data",
+ "type": "ExecutePipeline",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "pipeline": {
+ "referenceName": "[format('{0}_RunBackfillJob', variables('safeConfigContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "waitOnCompletion": true,
+ "parameters": {
+ "StartDate": {
+ "value": "@variables('thisMonth')",
+ "type": "Expression"
+ },
+ "EndDate": {
+ "value": "@addDays(addToTime(variables('thisMonth'), 1, 'Month'), -1)",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ ],
+ "timeout": "0.02:00:00"
+ }
+ }
+ ],
+ "concurrency": 1,
+ "variables": {
+ "exportName": {
+ "type": "String"
+ },
+ "storageAccountId": {
+ "type": "String",
+ "defaultValue": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
+ },
+ "finOpsHub": {
+ "type": "String",
+ "defaultValue": "[parameters('hubName')]"
+ },
+ "resourceManagementUri": {
+ "type": "String",
+ "defaultValue": "[environment().resourceManager]"
+ },
+ "fileName": {
+ "type": "String",
+ "defaultValue": "settings.json"
+ },
+ "folderPath": {
+ "type": "String",
+ "defaultValue": "[parameters('configContainerName')]"
+ },
+ "endDate": {
+ "type": "String"
+ },
+ "startDate": {
+ "type": "String"
+ },
+ "thisMonth": {
+ "type": "String"
+ },
+ "nextMonth": {
+ "type": "String"
+ }
+ }
+ },
+ "dependsOn": [
+ "dataset_config",
+ "pipeline_RunBackfillJob"
+ ],
+ "metadata": {
+ "description": "Runs the backfill job for each month based on retention settings."
+ }
+ },
+ "pipeline_RunBackfillJob": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_RunBackfillJob', variables('safeConfigContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Get Config",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@variables('fileName')",
+ "type": "Expression"
+ },
+ "folderPath": {
+ "value": "@variables('folderPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Scopes",
+ "description": "Save scopes to test if it is an array",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopesArray",
+ "value": {
+ "value": "@activity('Get Config').output.firstRow.scopes",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Scopes as Array",
+ "description": "Wraps a single scope object into an array to work around the PowerShell bug where single-item arrays are sometimes written as a single object instead of an array.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Set Scopes",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopesArray",
+ "value": {
+ "value": "@createArray(activity('Get Config').output.firstRow.scopes)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Filter Invalid Scopes",
+ "description": "Remove any invalid scopes to avoid errors.",
+ "type": "Filter",
+ "dependsOn": [
+ {
+ "activity": "Set Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Scopes as Array",
+ "dependencyConditions": [
+ "Skipped",
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@variables('scopesArray')",
+ "type": "Expression"
+ },
+ "condition": {
+ "value": "@and(not(empty(item().scope)), not(equals(item().scope, '/')))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "ForEach Export Scope",
+ "type": "ForEach",
+ "dependsOn": [
+ {
+ "activity": "Filter Invalid Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@activity('Filter Invalid Scopes').output.Value",
+ "type": "Expression"
+ },
+ "isSequential": true,
+ "activities": [
+ {
+ "name": "Set backfill export name",
+ "type": "SetVariable",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "exportName",
+ "value": {
+ "value": "@toLower(concat(variables('finOpsHub'), '-monthly-costdetails'))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Trigger backfill export",
+ "type": "WebActivity",
+ "dependsOn": [
+ {
+ "activity": "Set backfill export name",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 1,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "url": {
+ "value": "[format('@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{variables(''exportName'')}}/run?api-version={0}', variables('exportApiVersion'))]",
+ "type": "Expression"
+ },
+ "method": "POST",
+ "headers": {
+ "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunBackfill@{0}', variables('ftkVersion'))]",
+ "Content-Type": "application/json",
+ "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]"
+ },
+ "body": "{\"timePeriod\" : { \"from\" : \"@{pipeline().parameters.StartDate}\", \"to\" : \"@{pipeline().parameters.EndDate}\" }}",
+ "authentication": {
+ "type": "MSI",
+ "resource": {
+ "value": "@variables('resourceManagementUri')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "concurrency": 1,
+ "parameters": {
+ "StartDate": {
+ "type": "string"
+ },
+ "EndDate": {
+ "type": "string"
+ }
+ },
+ "variables": {
+ "exportName": {
+ "type": "String"
+ },
+ "storageAccountId": {
+ "type": "String",
+ "defaultValue": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
+ },
+ "finOpsHub": {
+ "type": "String",
+ "defaultValue": "[parameters('hubName')]"
+ },
+ "resourceManagementUri": {
+ "type": "String",
+ "defaultValue": "[environment().resourceManager]"
+ },
+ "fileName": {
+ "type": "String",
+ "defaultValue": "settings.json"
+ },
+ "folderPath": {
+ "type": "String",
+ "defaultValue": "[parameters('configContainerName')]"
+ },
+ "scopesArray": {
+ "type": "Array"
+ }
+ }
+ },
+ "dependsOn": [
+ "dataset_config"
+ ],
+ "metadata": {
+ "description": "Creates and triggers exports for all defined scopes for the specified date range."
+ }
+ },
+ "pipeline_StartExportProcess": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_StartExportProcess', variables('safeConfigContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Get Config",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@variables('fileName')",
+ "type": "Expression"
+ },
+ "folderPath": {
+ "value": "@variables('folderPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Scopes",
+ "description": "Save scopes to test if it is an array",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopesArray",
+ "value": {
+ "value": "@activity('Get Config').output.firstRow.scopes",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Scopes as Array",
+ "description": "Wraps a single scope object into an array to work around the PowerShell bug where single-item arrays are sometimes written as a single object instead of an array.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Set Scopes",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopesArray",
+ "value": {
+ "value": "@createArray(activity('Get Config').output.firstRow.scopes)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Filter Invalid Scopes",
+ "description": "Remove any invalid scopes to avoid errors.",
+ "type": "Filter",
+ "dependsOn": [
+ {
+ "activity": "Set Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Scopes as Array",
+ "dependencyConditions": [
+ "Succeeded",
+ "Skipped"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@variables('scopesArray')",
+ "type": "Expression"
+ },
+ "condition": {
+ "value": "@and(not(empty(item().scope)), not(equals(item().scope, '/')))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "ForEach Export Scope",
+ "type": "ForEach",
+ "dependsOn": [
+ {
+ "activity": "Filter Invalid Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@activity('Filter Invalid Scopes').output.Value",
+ "type": "Expression"
+ },
+ "isSequential": true,
+ "activities": [
+ {
+ "name": "Get exports for scope",
+ "type": "WebActivity",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "url": {
+ "value": "[format('@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports?api-version={0}', variables('exportApiVersion'))]",
+ "type": "Expression"
+ },
+ "method": "GET",
+ "authentication": {
+ "type": "MSI",
+ "resource": {
+ "value": "@variables('resourceManagementUri')",
+ "type": "Expression"
+ }
+ }
+ }
+ },
+ {
+ "name": "Run exports for scope",
+ "type": "ExecutePipeline",
+ "dependsOn": [
+ {
+ "activity": "Get exports for scope",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "pipeline": {
+ "referenceName": "[format('{0}_RunExportJobs', variables('safeConfigContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "waitOnCompletion": true,
+ "parameters": {
+ "ExportScopes": {
+ "value": "@activity('Get exports for scope').output.value",
+ "type": "Expression"
+ },
+ "Recurrence": {
+ "value": "@pipeline().parameters.Recurrence",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "concurrency": 1,
+ "parameters": {
+ "Recurrence": {
+ "type": "string",
+ "defaultValue": "Daily"
+ }
+ },
+ "variables": {
+ "fileName": {
+ "type": "String",
+ "defaultValue": "settings.json"
+ },
+ "folderPath": {
+ "type": "String",
+ "defaultValue": "[parameters('configContainerName')]"
+ },
+ "finOpsHub": {
+ "type": "String",
+ "defaultValue": "[parameters('hubName')]"
+ },
+ "resourceManagementUri": {
+ "type": "String",
+ "defaultValue": "[environment().resourceManager]"
+ },
+ "scopesArray": {
+ "type": "Array"
+ }
+ }
+ },
+ "dependsOn": [
+ "dataset_config",
+ "pipeline_RunExportJobs"
+ ],
+ "metadata": {
+ "description": "Gets a list of all Cost Management exports configured for this hub based on the scopes defined in settings.json, then runs each export using the config_RunExportJobs pipeline."
+ }
+ },
+ "pipeline_RunExportJobs": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_RunExportJobs', variables('safeConfigContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "ForEach export scope",
+ "type": "ForEach",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@pipeline().parameters.exportScopes",
+ "type": "Expression"
+ },
+ "isSequential": true,
+ "activities": [
+ {
+ "name": "If scheduled",
+ "type": "IfCondition",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@and(equals(toLower(item().properties.schedule.recurrence), toLower(pipeline().parameters.Recurrence)),startswith(toLower(item().name), toLower(variables('hubName'))))",
+ "type": "Expression"
+ },
+ "ifTrueActivities": [
+ {
+ "name": "Trigger export",
+ "type": "WebActivity",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "method": "POST",
+ "url": {
+ "value": "[format('@{{replace(toLower(concat(variables(''resourceManagementUri''),item().id)), ''com//'', ''com/'')}}/run?api-version={0}', variables('exportApiVersion'))]",
+ "type": "Expression"
+ },
+ "headers": {
+ "x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs@{0}', variables('ftkVersion'))]",
+ "ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]"
+ },
+ "body": "{}",
+ "authentication": {
+ "type": "MSI",
+ "resource": {
+ "value": "@variables('resourceManagementUri')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "concurrency": 1,
+ "parameters": {
+ "ExportScopes": {
+ "type": "array"
+ },
+ "Recurrence": {
+ "type": "string",
+ "defaultValue": "Daily"
+ }
+ },
+ "variables": {
+ "resourceManagementUri": {
+ "type": "String",
+ "defaultValue": "[environment().resourceManager]"
+ },
+ "hubName": {
+ "type": "String",
+ "defaultValue": "[parameters('hubName')]"
+ }
+ }
+ },
+ "dependsOn": [
+ "dataset_config"
+ ],
+ "metadata": {
+ "description": "Runs the specified Cost Management exports."
+ }
+ },
+ "pipeline_ConfigureExports": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ConfigureExports', variables('safeConfigContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Get Config",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@variables('fileName')",
+ "type": "Expression"
+ },
+ "folderPath": {
+ "value": "@variables('folderPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Save Scopes",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Get Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopesArray",
+ "value": {
+ "value": "@activity('Get Config').output.firstRow.scopes",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Save Scopes as Array",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Save Scopes",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scopesArray",
+ "value": {
+ "value": "@array(activity('Get Config').output.firstRow.scopes)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Filter Invalid Scopes",
+ "type": "Filter",
+ "dependsOn": [
+ {
+ "activity": "Save Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Save Scopes as Array",
+ "dependencyConditions": [
+ "Skipped",
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@variables('scopesArray')",
+ "type": "Expression"
+ },
+ "condition": {
+ "value": "@and(not(empty(item().scope)), not(equals(item().scope, '/')))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "ForEach Export Scope",
+ "type": "ForEach",
+ "dependsOn": [
+ {
+ "activity": "Filter Invalid Scopes",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@activity('Filter Invalid Scopes').output.value",
+ "type": "Expression"
+ },
+ "isSequential": true,
+ "activities": [
+ {
+ "name": "Create or update open month focus export",
+ "type": "WebActivity",
+ "dependsOn": [
+ {
+ "activity": "Set open month focus export name",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "url": {
+ "value": "[format('@{{variables(''resourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{variables(''exportName'')}}?api-version={0}', variables('exportApiVersion'))]",
+ "type": "Expression"
+ },
+ "method": "PUT",
+ "body": {
+ "value": "[__bicep.getExportBody(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), false(), 'Parquet', 'Snappy', 'true', 'CreateNewReport')]",
+ "type": "Expression"
+ },
+ "authentication": {
+ "type": "MSI",
+ "resource": {
+ "value": "@variables('ResourceManagementUri')",
+ "type": "Expression"
+ }
+ }
+ }
+ },
+ {
+ "name": "Set open month focus export name",
+ "type": "SetVariable",
+ "dependsOn": [],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "exportName",
+ "value": {
+ "value": "@toLower(concat(variables('finOpsHub'), '-daily-costdetails'))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Create or update closed month focus export",
+ "type": "WebActivity",
+ "dependsOn": [
+ {
+ "activity": "Set closed month focus export name",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 2,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "url": {
+ "value": "[format('@{{variables(''ResourceManagementUri'')}}@{{item().scope}}/providers/Microsoft.CostManagement/exports/@{{variables(''exportName'')}}?api-version={0}', variables('exportApiVersion'))]",
+ "type": "Expression"
+ },
+ "method": "PUT",
+ "body": {
+ "value": "[__bicep.getExportBody(parameters('exportContainerName'), 'FocusCost', variables('focusSchemaVersion'), true(), 'Parquet', 'Snappy', 'true', 'CreateNewReport')]",
+ "type": "Expression"
+ },
+ "authentication": {
+ "type": "MSI",
+ "resource": {
+ "value": "@variables('ResourceManagementUri')",
+ "type": "Expression"
+ }
+ }
+ }
+ },
+ {
+ "name": "Set closed month focus export name",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Create or update open month focus export",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "exportName",
+ "value": {
+ "value": "@toLower(concat(variables('finOpsHub'), '-monthly-costdetails'))",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "concurrency": 1,
+ "variables": {
+ "scopesArray": {
+ "type": "Array"
+ },
+ "exportName": {
+ "type": "String"
+ },
+ "exportScope": {
+ "type": "String"
+ },
+ "storageAccountId": {
+ "type": "String",
+ "defaultValue": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
+ },
+ "finOpsHub": {
+ "type": "String",
+ "defaultValue": "[parameters('hubName')]"
+ },
+ "resourceManagementUri": {
+ "type": "String",
+ "defaultValue": "[environment().resourceManager]"
+ },
+ "fileName": {
+ "type": "String",
+ "defaultValue": "settings.json"
+ },
+ "folderPath": {
+ "type": "String",
+ "defaultValue": "[parameters('configContainerName')]"
+ }
+ }
+ },
+ "dependsOn": [
+ "dataset_config"
+ ],
+ "metadata": {
+ "description": "Creates Cost Management exports for all scopes."
+ }
+ },
+ "pipeline_ExecuteExportsETL": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ExecuteETL', variables('safeExportContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Wait",
+ "description": "Files may not be available immediately after being created.",
+ "type": "Wait",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "waitTimeInSeconds": 60
+ }
+ },
+ {
+ "name": "Read Manifest",
+ "description": "Load the export manifest to determine the scope, dataset, and date range.",
+ "type": "Lookup",
+ "dependsOn": [
+ {
+ "activity": "Wait",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "manifest",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@pipeline().parameters.fileName",
+ "type": "Expression"
+ },
+ "folderPath": {
+ "value": "@pipeline().parameters.folderPath",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Has No Rows",
+ "description": "Check the row count ",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Read Manifest",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "hasNoRows",
+ "value": {
+ "value": "@or(equals(activity('Read Manifest').output.firstRow.blobCount, null), equals(activity('Read Manifest').output.firstRow.blobCount, 0))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Export Dataset Type",
+ "description": "Save the dataset type from the export manifest.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Read Manifest",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "exportDatasetType",
+ "value": {
+ "value": "@activity('Read Manifest').output.firstRow.exportConfig.type",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set MCA Column",
+ "description": "Determines if the dataset schema has channel-specific columns and saves the column name that only exists in MCA to determine if it is an MCA dataset.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Set Export Dataset Type",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "mcaColumnToCheck",
+ "value": {
+ "value": "@if(contains(createArray('pricesheet', 'reservationtransactions'), toLower(variables('exportDatasetType'))), 'BillingProfileId', if(equals(toLower(variables('exportDatasetType')), 'reservationrecommendations'), 'Net Savings', null))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Export Dataset Version",
+ "description": "Save the dataset version from the export manifest.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Read Manifest",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "exportDatasetVersion",
+ "value": {
+ "value": "@activity('Read Manifest').output.firstRow.exportConfig.dataVersion",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Detect Channel",
+ "description": "Determines what channel this export is from. Switch statement handles the different file types if the mcaColumnToCheck variable is set.",
+ "type": "Switch",
+ "dependsOn": [
+ {
+ "activity": "Set Has No Rows",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set MCA Column",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Export Dataset Version",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "on": {
+ "value": "@if(or(empty(variables('mcaColumnToCheck')), variables('hasNoRows')), 'ignore', last(array(split(activity('Read Manifest').output.firstRow.blobs[0].blobName, '.'))))",
+ "type": "Expression"
+ },
+ "cases": [
+ {
+ "value": "csv",
+ "activities": [
+ {
+ "name": "Check for MCA Column in CSV",
+ "description": "Checks the dataset to determine if the applicable MCA-specific column exists.",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "DelimitedTextSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": false,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "DelimitedTextReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeExportContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@activity('Read Manifest').output.firstRow.blobs[0].blobName",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Schema File with Channel in CSV",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Check for MCA Column in CSV",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "schemaFile",
+ "value": {
+ "value": "@toLower(concat(variables('exportDatasetType'), '_', variables('exportDatasetVersion'), if(and(contains(activity('Check for MCA Column in CSV').output, 'firstRow'), contains(activity('Check for MCA Column in CSV').output.firstRow, variables('mcaColumnToCheck'))), '_mca', '_ea'), '.json'))",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "value": "gz",
+ "activities": [
+ {
+ "name": "Check for MCA Column in Gzip CSV",
+ "description": "Checks the dataset to determine if the applicable MCA-specific column exists.",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "DelimitedTextSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": false,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "DelimitedTextReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[format('{0}_gzip', variables('safeExportContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@activity('Read Manifest').output.firstRow.blobs[0].blobName",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Schema File with Channel in Gzip CSV",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Check for MCA Column in Gzip CSV",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "schemaFile",
+ "value": {
+ "value": "@toLower(concat(variables('exportDatasetType'), '_', variables('exportDatasetVersion'), if(and(contains(activity('Check for MCA Column in Gzip CSV').output, 'firstRow'), contains(activity('Check for MCA Column in Gzip CSV').output.firstRow, variables('mcaColumnToCheck'))), '_mca', '_ea'), '.json'))",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "value": "parquet",
+ "activities": [
+ {
+ "name": "Check for MCA Column in Parquet",
+ "description": "Checks the dataset to determine if the applicable MCA-specific column exists.",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "ParquetSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": false,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "ParquetReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[format('{0}_parquet', variables('safeExportContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@activity('Read Manifest').output.firstRow.blobs[0].blobName",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Schema File with Channel for Parquet",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Check for MCA Column in Parquet",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "schemaFile",
+ "value": {
+ "value": "@toLower(concat(variables('exportDatasetType'), '_', variables('exportDatasetVersion'), if(and(contains(activity('Check for MCA Column in Parquet').output, 'firstRow'), contains(activity('Check for MCA Column in Parquet').output.firstRow, variables('mcaColumnToCheck'))), '_mca', '_ea'), '.json'))",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "defaultActivities": [
+ {
+ "name": "Set Schema File",
+ "type": "SetVariable",
+ "dependsOn": [],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "schemaFile",
+ "value": {
+ "value": "@toLower(concat(variables('exportDatasetType'), '_', variables('exportDatasetVersion'), '.json'))",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "Set Scope",
+ "description": "Save the scope from the export manifest.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Read Manifest",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "scope",
+ "value": {
+ "value": "@split(toLower(activity('Read Manifest').output.firstRow.exportConfig.resourceId), '/providers/microsoft.costmanagement/exports/')[0]",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Date",
+ "description": "Save the exported month from the export manifest.",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Read Manifest",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "date",
+ "value": {
+ "value": "@replace(substring(activity('Read Manifest').output.firstRow.runInfo.startDate, 0, 7), '-', '')",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Failed to Read Manifest",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Set Date",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ },
+ {
+ "activity": "Set Export Dataset Type",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ },
+ {
+ "activity": "Set Scope",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ },
+ {
+ "activity": "Read Manifest",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ },
+ {
+ "activity": "Set Export Dataset Version",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ },
+ {
+ "activity": "Detect Channel",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Failed to read the manifest file for this export run. Manifest path: ', pipeline().parameters.folderPath)",
+ "type": "Expression"
+ },
+ "errorCode": "ManifestReadFailed"
+ }
+ },
+ {
+ "name": "Check Schema",
+ "description": "Verify that the schema file exists in storage.",
+ "type": "GetMetadata",
+ "dependsOn": [
+ {
+ "activity": "Set Scope",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Date",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Detect Channel",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@variables('schemaFile')",
+ "type": "Expression"
+ },
+ "folderPath": "[format('{0}/schemas', parameters('configContainerName'))]"
+ }
+ },
+ "fieldList": [
+ "exists"
+ ],
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ }
+ },
+ {
+ "name": "Schema Not Found",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Check Schema",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('The ', variables('schemaFile'), ' schema mapping file was not found. Please confirm version ', variables('exportDatasetVersion'), ' of the ', variables('exportDatasetType'), ' dataset is supported by this version of FinOps hubs. You may need to upgrade to a newer release. To add support for another dataset, you can create a custom mapping file.')",
+ "type": "Expression"
+ },
+ "errorCode": "SchemaNotFound"
+ }
+ },
+ {
+ "name": "Set Hub Dataset",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Set Export Dataset Type",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "hubDataset",
+ "value": {
+ "value": "@if(equals(toLower(variables('exportDatasetType')), 'focuscost'), 'Costs', if(equals(toLower(variables('exportDatasetType')), 'pricesheet'), 'Prices', if(equals(toLower(variables('exportDatasetType')), 'reservationdetails'), 'CommitmentDiscountUsage', if(equals(toLower(variables('exportDatasetType')), 'reservationrecommendations'), 'Recommendations', if(equals(toLower(variables('exportDatasetType')), 'reservationtransactions'), 'Transactions', toLower(variables('exportDatasetType')))))))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Destination Folder",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Check Schema",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Hub Dataset",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "destinationFolder",
+ "value": {
+ "value": "@replace(concat(variables('hubDataset'),'/',substring(variables('date'), 0, 4),'/',substring(variables('date'), 4, 2),'/',toLower(variables('scope'))),'//','/')",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "For Each Blob",
+ "description": "Loop thru each exported file listed in the manifest.",
+ "type": "ForEach",
+ "dependsOn": [
+ {
+ "activity": "Set Destination Folder",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@if(variables('hasNoRows'), json('[]'), activity('Read Manifest').output.firstRow.blobs)",
+ "type": "Expression"
+ },
+ "batchCount": "[if(parameters('enablePublicAccess'), 30, 4)]",
+ "isSequential": false,
+ "activities": [
+ {
+ "name": "Execute",
+ "description": "Run the ingestion ETL pipeline.",
+ "type": "ExecutePipeline",
+ "dependsOn": [],
+ "policy": {
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "pipeline": {
+ "referenceName": "[format('{0}_ETL_{1}', variables('safeExportContainerName'), variables('safeIngestionContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "waitOnCompletion": true,
+ "parameters": {
+ "blobPath": {
+ "value": "@item().blobName",
+ "type": "Expression"
+ },
+ "destinationFolder": {
+ "value": "@variables('destinationFolder')",
+ "type": "Expression"
+ },
+ "destinationFile": {
+ "value": "@last(array(split(replace(replace(item().blobName, '.gz', ''), '.csv', '.parquet'), '/')))",
+ "type": "Expression"
+ },
+ "ingestionId": {
+ "value": "@activity('Read Manifest').output.firstRow.runInfo.runId",
+ "type": "Expression"
+ },
+ "schemaFile": {
+ "value": "@variables('schemaFile')",
+ "type": "Expression"
+ },
+ "exportDatasetType": {
+ "value": "@variables('exportDatasetType')",
+ "type": "Expression"
+ },
+ "exportDatasetVersion": {
+ "value": "@variables('exportDatasetVersion')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "Copy Manifest",
+ "description": "Copy the manifest to the ingestion container to trigger ADX ingestion",
+ "type": "Copy",
+ "dependsOn": [
+ {
+ "activity": "For Each Blob",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "sink": {
+ "type": "JsonSink",
+ "storeSettings": {
+ "type": "AzureBlobFSWriteSettings"
+ },
+ "formatSettings": {
+ "type": "JsonWriteSettings"
+ }
+ },
+ "enableStaging": false
+ },
+ "inputs": [
+ {
+ "referenceName": "manifest",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": "manifest.json",
+ "folderPath": {
+ "value": "@pipeline().parameters.folderPath",
+ "type": "Expression"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "referenceName": "manifest",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": "manifest.json",
+ "folderPath": {
+ "value": "[format('@concat(''{0}/'', variables(''destinationFolder''))', parameters('ingestionContainerName'))]",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "parameters": {
+ "folderPath": {
+ "type": "string"
+ },
+ "fileName": {
+ "type": "string"
+ }
+ },
+ "variables": {
+ "date": {
+ "type": "String"
+ },
+ "destinationFolder": {
+ "type": "String"
+ },
+ "exportDatasetType": {
+ "type": "String"
+ },
+ "exportDatasetVersion": {
+ "type": "String"
+ },
+ "hasNoRows": {
+ "type": "Boolean"
+ },
+ "hubDataset": {
+ "type": "String"
+ },
+ "mcaColumnToCheck": {
+ "type": "String"
+ },
+ "schemaFile": {
+ "type": "String"
+ },
+ "scope": {
+ "type": "String"
+ }
+ },
+ "annotations": [
+ "New export"
+ ]
+ },
+ "dependsOn": [
+ "dataset_config",
+ "dataset_manifest",
+ "dataset_msexports",
+ "dataset_msexports_gzip",
+ "dataset_msexports_parquet",
+ "pipeline_ToIngestion"
+ ],
+ "metadata": {
+ "description": "Queues the msexports_ETL_ingestion pipeline."
+ }
+ },
+ "pipeline_ToIngestion": {
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ETL_{1}', variables('safeExportContainerName'), variables('safeIngestionContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Get Existing Parquet Files",
+ "description": "Get the previously ingested files so we can remove any older data. This is necessary to avoid data duplication in reports.",
+ "type": "GetMetadata",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "dataset": {
+ "referenceName": "[format('{0}_files', variables('safeIngestionContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "folderPath": "@pipeline().parameters.destinationFolder"
+ }
+ },
+ "fieldList": [
+ "childItems"
+ ],
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "ParquetReadSettings"
+ }
+ }
+ },
+ {
+ "name": "Filter Out Current Exports",
+ "description": "Remove existing files from the current export so those files do not get deleted.",
+ "type": "Filter",
+ "dependsOn": [
+ {
+ "activity": "Get Existing Parquet Files",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@if(contains(activity('Get Existing Parquet Files').output, 'childItems'), activity('Get Existing Parquet Files').output.childItems, json('[]'))",
+ "type": "Expression"
+ },
+ "condition": {
+ "value": "[format('@and(endswith(item().name, ''.parquet''), not(startswith(item().name, concat(pipeline().parameters.ingestionId, ''{0}''))))', variables('ingestionIdFileNameSeparator'))]",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Load Schema Mappings",
+ "description": "Get schema mapping file to use for the CSV to parquet conversion.",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": {
+ "value": "@toLower(pipeline().parameters.schemaFile)",
+ "type": "Expression"
+ },
+ "folderPath": "[format('{0}/schemas', parameters('configContainerName'))]"
+ }
+ }
+ }
+ },
+ {
+ "name": "Failed to Load Schema",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Load Schema Mappings",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Unable to load the ', pipeline().parameters.schemaFile, ' schema file. Please confirm the schema and version are supported for FinOps hubs ingestion. Unsupported files will remain in the msexports container.')",
+ "type": "Expression"
+ },
+ "errorCode": "SchemaLoadFailed"
+ }
+ },
+ {
+ "name": "Set Additional Columns",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Load Schema Mappings",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "additionalColumns",
+ "value": {
+ "value": "@intersection(array(json(concat('[{\"name\":\"x_SourceProvider\",\"value\":\"Microsoft\"},{\"name\":\"x_SourceName\",\"value\":\"Cost Management\"},{\"name\":\"x_SourceType\",\"value\":\"', pipeline().parameters.exportDatasetVersion, '\"},{\"name\":\"x_SourceVersion\",\"value\":\"', pipeline().parameters.exportDatasetVersion, '\"}'))), activity('Load Schema Mappings').output.firstRow.additionalColumns)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "For Each Old File",
+ "description": "Loop thru each of the existing files from previous exports.",
+ "type": "ForEach",
+ "dependsOn": [
+ {
+ "activity": "Convert to Parquet",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Filter Out Current Exports",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@activity('Filter Out Current Exports').output.Value",
+ "type": "Expression"
+ },
+ "activities": [
+ {
+ "name": "Delete Old Ingested File",
+ "description": "Delete the previously ingested files from older exports.",
+ "type": "Delete",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "dataset": {
+ "referenceName": "[variables('safeIngestionContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@concat(pipeline().parameters.destinationFolder, '/', item().name)",
+ "type": "Expression"
+ }
+ }
+ },
+ "enableLogging": false,
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": false,
+ "enablePartitionDiscovery": false
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "Set Destination Path",
+ "type": "SetVariable",
+ "dependsOn": [],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "destinationPath",
+ "value": {
+ "value": "[format('@concat(pipeline().parameters.destinationFolder, ''/'', pipeline().parameters.ingestionId, ''{0}'', pipeline().parameters.destinationFile)', variables('ingestionIdFileNameSeparator'))]",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Convert to Parquet",
+ "description": "[format('Convert CSV to parquet and move the file to the {0} container.', parameters('ingestionContainerName'))]",
+ "type": "Switch",
+ "dependsOn": [
+ {
+ "activity": "Set Destination Path",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Load Schema Mappings",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Additional Columns",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "on": {
+ "value": "@last(array(split(pipeline().parameters.blobPath, '.')))",
+ "type": "Expression"
+ },
+ "cases": [
+ {
+ "value": "csv",
+ "activities": [
+ {
+ "name": "Convert CSV File",
+ "type": "Copy",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:10:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "DelimitedTextSource",
+ "additionalColumns": {
+ "value": "@variables('additionalColumns')",
+ "type": "Expression"
+ },
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "DelimitedTextReadSettings"
+ }
+ },
+ "sink": {
+ "type": "ParquetSink",
+ "storeSettings": {
+ "type": "AzureBlobFSWriteSettings"
+ },
+ "formatSettings": {
+ "type": "ParquetWriteSettings",
+ "fileExtension": ".parquet"
+ }
+ },
+ "enableStaging": false,
+ "parallelCopies": 1,
+ "validateDataConsistency": false,
+ "translator": {
+ "value": "@activity('Load Schema Mappings').output.firstRow.translator",
+ "type": "Expression"
+ }
+ },
+ "inputs": [
+ {
+ "referenceName": "[variables('safeExportContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@pipeline().parameters.blobPath",
+ "type": "Expression"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "referenceName": "[variables('safeIngestionContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@variables('destinationPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "value": "gz",
+ "activities": [
+ {
+ "name": "Convert GZip CSV File",
+ "type": "Copy",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:10:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "DelimitedTextSource",
+ "additionalColumns": {
+ "value": "@variables('additionalColumns')",
+ "type": "Expression"
+ },
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "DelimitedTextReadSettings"
+ }
+ },
+ "sink": {
+ "type": "ParquetSink",
+ "storeSettings": {
+ "type": "AzureBlobFSWriteSettings"
+ },
+ "formatSettings": {
+ "type": "ParquetWriteSettings",
+ "fileExtension": ".parquet"
+ }
+ },
+ "enableStaging": false,
+ "parallelCopies": 1,
+ "validateDataConsistency": false,
+ "translator": {
+ "value": "@activity('Load Schema Mappings').output.firstRow.translator",
+ "type": "Expression"
+ }
+ },
+ "inputs": [
+ {
+ "referenceName": "[format('{0}_gzip', variables('safeExportContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@pipeline().parameters.blobPath",
+ "type": "Expression"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "referenceName": "[variables('safeIngestionContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@variables('destinationPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "value": "parquet",
+ "activities": [
+ {
+ "name": "Move Parquet File",
+ "type": "Copy",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.00:05:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "ParquetSource",
+ "additionalColumns": {
+ "value": "@variables('additionalColumns')",
+ "type": "Expression"
+ },
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "ParquetReadSettings"
+ }
+ },
+ "sink": {
+ "type": "ParquetSink",
+ "storeSettings": {
+ "type": "AzureBlobFSWriteSettings"
+ },
+ "formatSettings": {
+ "type": "ParquetWriteSettings",
+ "fileExtension": ".parquet"
+ }
+ },
+ "enableStaging": false,
+ "parallelCopies": 1,
+ "validateDataConsistency": false
+ },
+ "inputs": [
+ {
+ "referenceName": "[format('{0}_parquet', variables('safeExportContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@pipeline().parameters.blobPath",
+ "type": "Expression"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "referenceName": "[variables('safeIngestionContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@variables('destinationPath')",
+ "type": "Expression"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "defaultActivities": [
+ {
+ "name": "Unsupported File Type",
+ "type": "Fail",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Unable to ingest the specified export file because the file type is not supported. File: ', pipeline().parameters.blobPath)",
+ "type": "Expression"
+ },
+ "errorCode": "UnsupportedExportFileType"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "Read Hub Config",
+ "description": "Read the hub config to determine if the export should be retained.",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": false,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": "settings.json",
+ "folderPath": "[parameters('configContainerName')]"
+ }
+ }
+ }
+ },
+ {
+ "name": "If Not Retaining Exports",
+ "description": "If the msexports retention period <= 0, delete the source file. The main reason to keep the source file is to allow for troubleshooting and reprocessing in the future.",
+ "type": "IfCondition",
+ "dependsOn": [
+ {
+ "activity": "Convert to Parquet",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Read Hub Config",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@lessOrEquals(coalesce(activity('Read Hub Config').output.firstRow.retention.msexports.days, 0), 0)",
+ "type": "Expression"
+ },
+ "ifTrueActivities": [
+ {
+ "name": "Delete Source File",
+ "description": "Delete the exported data file to keep storage costs down. This file is not referenced by any reporting systems.",
+ "type": "Delete",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "dataset": {
+ "referenceName": "[format('{0}_parquet', variables('safeExportContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "blobPath": {
+ "value": "@pipeline().parameters.blobPath",
+ "type": "Expression"
+ }
+ }
+ },
+ "enableLogging": false,
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": true,
+ "enablePartitionDiscovery": false
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "parameters": {
+ "blobPath": {
+ "type": "String"
+ },
+ "destinationFile": {
+ "type": "string"
+ },
+ "destinationFolder": {
+ "type": "string"
+ },
+ "ingestionId": {
+ "type": "string"
+ },
+ "schemaFile": {
+ "type": "string"
+ },
+ "exportDatasetType": {
+ "type": "string"
+ },
+ "exportDatasetVersion": {
+ "type": "string"
+ }
+ },
+ "variables": {
+ "additionalColumns": {
+ "type": "Array"
+ },
+ "destinationPath": {
+ "type": "String"
+ }
+ },
+ "annotations": []
+ },
+ "dependsOn": [
+ "dataset_config",
+ "dataset_ingestion",
+ "dataset_ingestion_files",
+ "dataset_msexports",
+ "dataset_msexports_gzip",
+ "dataset_msexports_parquet"
+ ],
+ "metadata": {
+ "description": "Transforms CSV data to a standard schema and converts to Parquet."
+ }
+ },
+ "pipeline_ToDataExplorer": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ETL_dataExplorer', variables('safeIngestionContainerName')))]",
+ "properties": {
+ "activities": [
+ {
+ "name": "Read Hub Config",
+ "description": "Read the hub config to determine how long data should be retained.",
+ "type": "Lookup",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "source": {
+ "type": "JsonSource",
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "recursive": false,
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "JsonReadSettings"
+ }
+ },
+ "dataset": {
+ "referenceName": "[variables('safeConfigContainerName')]",
+ "type": "DatasetReference",
+ "parameters": {
+ "fileName": "settings.json",
+ "folderPath": "[parameters('configContainerName')]"
+ }
+ }
+ }
+ },
+ {
+ "name": "Set Final Retention Months",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Read Hub Config",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "finalRetentionMonths",
+ "value": {
+ "value": "@coalesce(activity('Read Hub Config').output.firstRow.retention.final.months, 999)",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Until Capacity Is Available",
+ "type": "Until",
+ "dependsOn": [
+ {
+ "activity": "Set Final Retention Months",
+ "dependencyConditions": [
+ "Completed",
+ "Skipped"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@equals(variables('tryAgain'), false)",
+ "type": "Expression"
+ },
+ "activities": [
+ {
+ "name": "Confirm Ingestion Capacity",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": ".show capacity | where Resource == 'Ingestions' | project Remaining",
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference"
+ }
+ },
+ {
+ "name": "If Has Capacity",
+ "type": "IfCondition",
+ "dependsOn": [
+ {
+ "activity": "Confirm Ingestion Capacity",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@or(equals(activity('Confirm Ingestion Capacity').output.count, 0), greater(activity('Confirm Ingestion Capacity').output.value[0].Remaining, 0))",
+ "type": "Expression"
+ },
+ "ifFalseActivities": [
+ {
+ "name": "Wait for Ingestion",
+ "type": "Wait",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "waitTimeInSeconds": 15
+ }
+ },
+ {
+ "name": "Try Again",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Wait for Ingestion",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": true
+ }
+ }
+ ],
+ "ifTrueActivities": [
+ {
+ "name": "Pre-Ingest Cleanup",
+ "description": "Cost Management exports include all month-to-date data from the previous export run. To ensure data is not double-reported, it must be dropped from the raw table before ingestion completes. Remove previous ingestions into the raw table for the month and any previous runs of the current ingestion month file in any table.",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "typeProperties": {
+ "command": {
+ "value": "@concat('.drop extents <| .show extents | where (TableName == \"', pipeline().parameters.table, '\" and Tags !has \"drop-by:', pipeline().parameters.ingestionId, '\" and Tags has \"drop-by:', pipeline().parameters.folderPath, '\") or (Tags has \"drop-by:', pipeline().parameters.ingestionId, '\" and Tags has \"drop-by:', pipeline().parameters.folderPath, '/', pipeline().parameters.originalFileName, '\")')",
+ "type": "Expression"
+ },
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Ingest Data",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Pre-Ingest Cleanup",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 3,
+ "retryIntervalInSeconds": 120,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "command": {
+ "value": "[format('@concat(''.ingest into table '', pipeline().parameters.table, '' (\"abfss://{0}@{1}.dfs.{2}/'', pipeline().parameters.folderPath, ''/'', pipeline().parameters.fileName, '';managed_identity=system\") with (format=\"parquet\", ingestionMappingReference=\"'', pipeline().parameters.table, ''_mapping\", tags=\"[\\\"drop-by:'', pipeline().parameters.ingestionId, ''\\\", \\\"drop-by:'', pipeline().parameters.folderPath, ''/'', pipeline().parameters.originalFileName, ''\\\", \\\"drop-by:ftk-version-{3}\\\"]\"); print Success = assert(iff(toscalar($command_results | project-keep HasErrors) == false, true, false), \"Ingestion Failed\")'')', parameters('ingestionContainerName'), parameters('storageAccountName'), environment().suffixes.storage, variables('ftkVersion'))]",
+ "type": "Expression"
+ },
+ "commandTimeout": "01:00:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Post-Ingest Cleanup",
+ "description": "Cost Management exports include all month-to-date data from the previous export run. To ensure data is not double-reported, it must be dropped after ingestion completes. Remove the current ingestion month file from raw and any old ingestions for the month from the final table.",
+ "type": "AzureDataExplorerCommand",
+ "dependsOn": [
+ {
+ "activity": "Ingest Data",
+ "dependencyConditions": [
+ "Completed"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "typeProperties": {
+ "command": {
+ "value": "@concat('.drop extents <| .show extents | extend isOldFinalData = (TableName startswith \"', replace(pipeline().parameters.table, '_raw', '_final_v'), '\" and Tags !has \"drop-by:', pipeline().parameters.ingestionId, '\" and Tags has \"drop-by:', pipeline().parameters.folderPath, '\") | extend isPastFinalRetention = (TableName startswith \"', replace(pipeline().parameters.table, '_raw', '_final_v'), '\" and todatetime(substring(strcat(replace_string(extract(\"drop-by:[A-Za-z]+/(\\\\d{4}/\\\\d{2}(/\\\\d{2})?)\", 1, Tags), \"/\", \"-\"), \"-01\"), 0, 10)) < datetime_add(\"month\", -', if(lessOrEquals(variables('finalRetentionMonths'), 0), 0, variables('finalRetentionMonths')), ', startofmonth(now()))) | where isOldFinalData or isPastFinalRetention')",
+ "type": "Expression"
+ },
+ "commandTimeout": "00:20:00"
+ },
+ "linkedServiceName": {
+ "referenceName": "[variables('hubDataExplorerName')]",
+ "type": "LinkedServiceReference",
+ "parameters": {
+ "database": "[parameters('dataExplorerIngestionDatabase')]"
+ }
+ }
+ },
+ {
+ "name": "Ingestion Complete",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Post-Ingest Cleanup",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": false
+ }
+ },
+ {
+ "name": "Abort On Ingestion Error",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Ingest Data",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": false
+ }
+ },
+ {
+ "name": "Ingestion Failed Error",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Abort On Ingestion Error",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Data Explorer ingestion into the ', pipeline().parameters.table, ' table failed. Please fix the error and rerun ingestion for the following folder path: \"', pipeline().parameters.folderPath, '\". File: ', pipeline().parameters.originalFileName, '. Error: ', if(greater(length(activity('Ingest Data').output.errors), 0), activity('Ingest Data').output.errors[0].Message, 'Unknown'), ' (Code: ', if(greater(length(activity('Ingest Data').output.errors), 0), activity('Ingest Data').output.errors[0].Code, 'None'), ')')",
+ "type": "Expression"
+ },
+ "errorCode": "DataExplorerIngestionFailed"
+ }
+ },
+ {
+ "name": "Abort On Pre-Ingest Drop Error",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Pre-Ingest Cleanup",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": false
+ }
+ },
+ {
+ "name": "Pre-Ingest Drop Failed Error",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Abort On Pre-Ingest Drop Error",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Data Explorer pre-ingestion cleanup (drop extents from raw table) for the ', pipeline().parameters.table, ' table failed. Ingestion was not completed. Please fix the error and rerun ingestion for the following folder path: \"', pipeline().parameters.folderPath, '\". File: ', pipeline().parameters.originalFileName, '. Error: ', if(greater(length(activity('Pre-Ingest Cleanup').output.errors), 0), activity('Pre-Ingest Cleanup').output.errors[0].Message, 'Unknown'), ' (Code: ', if(greater(length(activity('Pre-Ingest Cleanup').output.errors), 0), activity('Pre-Ingest Cleanup').output.errors[0].Code, 'None'), ')')",
+ "type": "Expression"
+ },
+ "errorCode": "DataExplorerPreIngestionDropFailed"
+ }
+ },
+ {
+ "name": "Abort On Post-Ingest Drop Error",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Post-Ingest Cleanup",
+ "dependencyConditions": [
+ "Failed"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "tryAgain",
+ "value": false
+ }
+ },
+ {
+ "name": "Post-Ingest Drop Failed Error",
+ "type": "Fail",
+ "dependsOn": [
+ {
+ "activity": "Abort On Post-Ingest Drop Error",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Data Explorer post-ingestion cleanup (drop extents from final tables) for the ', replace(pipeline().parameters.table, '_raw', '_final_*'), ' table failed. Please fix the error and rerun ingestion for the following folder path: \"', pipeline().parameters.folderPath, '\". File: ', pipeline().parameters.originalFileName, '. Error: ', if(greater(length(activity('Post-Ingest Cleanup').output.errors), 0), activity('Post-Ingest Cleanup').output.errors[0].Message, 'Unknown'), ' (Code: ', if(greater(length(activity('Post-Ingest Cleanup').output.errors), 0), activity('Post-Ingest Cleanup').output.errors[0].Code, 'None'), ')')",
+ "type": "Expression"
+ },
+ "errorCode": "DataExplorerPostIngestionDropFailed"
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "timeout": "0.02:00:00"
+ }
+ }
+ ],
+ "parameters": {
+ "folderPath": {
+ "type": "string"
+ },
+ "fileName": {
+ "type": "string"
+ },
+ "originalFileName": {
+ "type": "string"
+ },
+ "ingestionId": {
+ "type": "string"
+ },
+ "table": {
+ "type": "string"
+ }
+ },
+ "variables": {
+ "tryAgain": {
+ "type": "Boolean",
+ "defaultValue": true
+ },
+ "logRetentionDays": {
+ "type": "Integer",
+ "defaultValue": 0
+ },
+ "finalRetentionMonths": {
+ "type": "Integer",
+ "defaultValue": 999
+ }
+ },
+ "annotations": []
+ },
+ "dependsOn": [
+ "dataset_config",
+ "linkedService_dataExplorer"
+ ],
+ "metadata": {
+ "description": "Ingests parquet data into an Azure Data Explorer cluster."
+ }
+ },
+ "pipeline_ExecuteIngestionETL": {
+ "condition": "[variables('deployDataExplorer')]",
+ "type": "Microsoft.DataFactory/factories/pipelines",
+ "apiVersion": "2018-06-01",
+ "name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ExecuteETL', variables('safeIngestionContainerName')))]",
+ "properties": {
+ "concurrency": 1,
+ "activities": [
+ {
+ "name": "Wait",
+ "description": "Files may not be available immediately after being created.",
+ "type": "Wait",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "waitTimeInSeconds": 60
+ }
+ },
+ {
+ "name": "Set Container Folder Path",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Wait",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "containerFolderPath",
+ "value": {
+ "value": "@join(skip(array(split(pipeline().parameters.folderPath, '/')), 1), '/')",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Get Existing Parquet Files",
+ "description": "Get the previously ingested files so we can get file paths.",
+ "type": "GetMetadata",
+ "dependsOn": [
+ {
+ "activity": "Set Container Folder Path",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "timeout": "0.12:00:00",
+ "retry": 0,
+ "retryIntervalInSeconds": 30,
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "dataset": {
+ "referenceName": "[format('{0}_files', variables('safeIngestionContainerName'))]",
+ "type": "DatasetReference",
+ "parameters": {
+ "folderPath": "@variables('containerFolderPath')"
+ }
+ },
+ "fieldList": [
+ "childItems"
+ ],
+ "storeSettings": {
+ "type": "AzureBlobFSReadSettings",
+ "enablePartitionDiscovery": false
+ },
+ "formatSettings": {
+ "type": "ParquetReadSettings"
+ }
+ }
+ },
+ {
+ "name": "Filter Out Folders",
+ "description": "Remove any folders or manifest files.",
+ "type": "Filter",
+ "dependsOn": [
+ {
+ "activity": "Get Existing Parquet Files",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "items": {
+ "value": "@if(contains(activity('Get Existing Parquet Files').output, 'childItems'), activity('Get Existing Parquet Files').output.childItems, json('[]'))",
+ "type": "Expression"
+ },
+ "condition": {
+ "value": "@and(equals(item().type, 'File'), not(contains(toLower(item().name), 'manifest.json')))",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "Set Ingestion Timestamp",
+ "type": "SetVariable",
+ "dependsOn": [
+ {
+ "activity": "Wait",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "policy": {
+ "secureOutput": false,
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "variableName": "timestamp",
+ "value": {
+ "value": "@utcNow()",
+ "type": "Expression"
+ }
+ }
+ },
+ {
+ "name": "For Each Old File",
+ "description": "Loop thru each of the existing files.",
+ "type": "ForEach",
+ "dependsOn": [
+ {
+ "activity": "Filter Out Folders",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ },
+ {
+ "activity": "Set Ingestion Timestamp",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "batchCount": "[parameters('dataExplorerIngestionCapacity')]",
+ "items": {
+ "value": "@activity('Filter Out Folders').output.Value",
+ "type": "Expression"
+ },
+ "activities": [
+ {
+ "name": "Execute",
+ "description": "Run the ADX ETL pipeline.",
+ "type": "ExecutePipeline",
+ "dependsOn": [],
+ "policy": {
+ "secureInput": false
+ },
+ "userProperties": [],
+ "typeProperties": {
+ "pipeline": {
+ "referenceName": "[format('{0}_ETL_dataExplorer', variables('safeIngestionContainerName'))]",
+ "type": "PipelineReference"
+ },
+ "waitOnCompletion": true,
+ "parameters": {
+ "folderPath": {
+ "value": "@variables('containerFolderPath')",
+ "type": "Expression"
+ },
+ "fileName": {
+ "value": "@item().name",
+ "type": "Expression"
+ },
+ "originalFileName": {
+ "value": "[format('@last(array(split(item().name, ''{0}'')))', variables('ingestionIdFileNameSeparator'))]",
+ "type": "Expression"
+ },
+ "ingestionId": {
+ "value": "[format('@concat(first(array(split(item().name, ''{0}''))), ''_'', variables(''timestamp''))', variables('ingestionIdFileNameSeparator'))]",
+ "type": "Expression"
+ },
+ "table": {
+ "value": "@concat(first(array(split(variables('containerFolderPath'), '/'))), '_raw')",
+ "type": "Expression"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "name": "If No Files",
+ "description": "If there are no files found, fail the pipeline.",
+ "type": "IfCondition",
+ "dependsOn": [
+ {
+ "activity": "Filter Out Folders",
+ "dependencyConditions": [
+ "Succeeded"
+ ]
+ }
+ ],
+ "userProperties": [],
+ "typeProperties": {
+ "expression": {
+ "value": "@equals(length(activity('Filter Out Folders').output.Value), 0)",
+ "type": "Expression"
+ },
+ "ifTrueActivities": [
+ {
+ "name": "Files Not Found",
+ "type": "Fail",
+ "dependsOn": [],
+ "userProperties": [],
+ "typeProperties": {
+ "message": {
+ "value": "@concat('Unable to locate parquet files to ingest from the ', pipeline().parameters.folderPath, ' path. Please confirm the folder path is the full path, including the \"ingestion\" container and not starting with or ending with a slash (\"/\").')",
+ "type": "Expression"
+ },
+ "errorCode": "IngestionFilesNotFound"
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "parameters": {
+ "folderPath": {
+ "type": "string"
+ }
+ },
+ "variables": {
+ "containerFolderPath": {
+ "type": "string"
+ },
+ "timestamp": {
+ "type": "string"
+ }
+ },
+ "annotations": [
+ "New ingestion"
+ ]
+ },
+ "dependsOn": [
+ "dataset_ingestion_files",
+ "pipeline_ToDataExplorer"
+ ],
+ "metadata": {
+ "description": "Queues the ingestion_ETL_dataExplorer pipeline to account for Data Factory pipeline trigger limits."
+ }
+ },
+ "startTriggers": {
+ "type": "Microsoft.Resources/deploymentScripts",
+ "apiVersion": "2020-10-01",
+ "name": "[format('{0}_startTriggers', parameters('dataFactoryName'))]",
+ "location": "[if(startsWith(parameters('location'), 'china'), 'chinaeast2', parameters('location'))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]",
+ "identity": {
+ "type": "UserAssigned",
+ "userAssignedIdentities": {
+ "[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName'))))]": {}
+ }
+ },
+ "kind": "AzurePowerShell",
+ "properties": {
+ "azPowerShellVersion": "8.0",
+ "retentionInterval": "PT1H",
+ "cleanupPreference": "OnSuccess",
+ "scriptContent": "[variables('$fxv#2')]",
+ "environmentVariables": [
+ {
+ "name": "DataFactorySubscriptionId",
+ "value": "[subscription().id]"
+ },
+ {
+ "name": "DataFactoryResourceGroup",
+ "value": "[resourceGroup().name]"
+ },
+ {
+ "name": "DataFactoryName",
+ "value": "[parameters('dataFactoryName')]"
+ },
+ {
+ "name": "Triggers",
+ "value": "[join(variables('allHubTriggers'), '|')]"
+ },
+ {
+ "name": "Pipelines",
+ "value": "[join(createArray(format('{0}_InitializeHub', variables('safeConfigContainerName'))), '|')]"
+ }
+ ]
+ },
+ "dependsOn": [
+ "pipeline_InitializeHub",
+ "trigger_DailySchedule",
+ "trigger_ExportManifestAdded",
+ "trigger_IngestionManifestAdded",
+ "trigger_MonthlySchedule",
+ "trigger_SettingsUpdated",
+ "triggerManagerIdentity",
+ "triggerManagerRoleAssignments"
+ ]
+ },
+ "azuretimezones": {
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "azuretimezones",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "location": {
+ "value": "[parameters('location')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "246200639922867735"
+ }
+ },
+ "parameters": {
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. The location to use for the managed identity and deployment script to auto-start triggers. Default = (resource group location)."
+ }
+ },
+ "timezoneobject": {
+ "type": "object",
+ "defaultValue": {
+ "australiaeast": "AUS Eastern Standard Time",
+ "australiacentral": "AUS Eastern Standard Time",
+ "australiacentral2": "AUS Eastern Standard Time",
+ "australiasoutheast": "AUS Eastern Standard Time",
+ "brazilsouth": "E. South America Standard Time",
+ "canadacentral": "Central Standard Time",
+ "canadaeast": "Eastern Standard Time",
+ "centralindia": "India Standard Time",
+ "centralus": "Central Standard Time",
+ "eastasia": "China Standard Time",
+ "eastus": "Eastern Standard Time",
+ "eastus2": "Eastern Standard Time",
+ "francecentral": "W. Europe Standard Time",
+ "germanynorth": "W. Europe Standard Time",
+ "germanywestcentral": "W. Europe Standard Time",
+ "japaneast": "Japan Standard Time",
+ "japanwest": "Japan Standard Time",
+ "koreacentral": "Korea Standard Time",
+ "koreasouth": "Korea Standard Time",
+ "northcentralus": "Central Standard Time",
+ "northeurope": "GMT Standard Time",
+ "norwayeast": "W. Europe Standard Time",
+ "norwaywest": "W. Europe Standard Time",
+ "southcentralus": "Central Standard Time",
+ "southindia": "India Standard Time",
+ "southeastasia": "Singapore Standard Time",
+ "switzerlandnorth": "W. Europe Standard Time",
+ "switzerlandwest": "W. Europe Standard Time",
+ "uksouth": "GMT Standard Time",
+ "ukwest": "GMT Standard Time",
+ "westcentralus": "Central Standard Time",
+ "westeurope": "W. Europe Standard Time",
+ "westindia": "India Standard Time",
+ "westus": "Pacific Standard Time",
+ "westus2": "Pacific Standard Time"
+ }
+ },
+ "utchrs": {
+ "type": "string",
+ "defaultValue": "[utcNow('hh')]"
+ },
+ "utcmins": {
+ "type": "string",
+ "defaultValue": "[utcNow('mm')]"
+ },
+ "utcsecs": {
+ "type": "string",
+ "defaultValue": "[utcNow('ss')]"
+ }
+ },
+ "variables": {
+ "loc": "[toLower(replace(parameters('location'), ' ', ''))]",
+ "timezone": "[coalesce(tryGet(parameters('timezoneobject'), variables('loc')), 'Universal Coordinated Time')]"
+ },
+ "resources": [],
+ "outputs": {
+ "AzureRegion": {
+ "type": "string",
+ "value": "[parameters('location')]"
+ },
+ "Timezone": {
+ "type": "string",
+ "value": "[variables('timezone')]"
+ },
+ "UtcHours": {
+ "type": "string",
+ "value": "[parameters('utchrs')]"
+ },
+ "UtcMinutes": {
+ "type": "string",
+ "value": "[parameters('utcmins')]"
+ },
+ "UtcSeconds": {
+ "type": "string",
+ "value": "[parameters('utcsecs')]"
+ }
+ }
+ }
+ }
+ },
+ "getStoragePrivateEndpointConnections": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "GetStoragePrivateEndpointConnections",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "storageAccountName": {
+ "value": "[parameters('storageAccountName')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "6596647335910944068"
+ }
+ },
+ "parameters": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of private endpoint connections. Pending ones will be approved."
+ }
+ },
+ "storageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the storage account."
+ }
+ }
+ },
+ "resources": [
+ {
+ "copy": {
+ "name": "privateEndpointConnection",
+ "count": "[length(parameters('privateEndpointConnections'))]"
+ },
+ "condition": "[equals(parameters('privateEndpointConnections')[copyIndex()].properties.privateLinkServiceConnectionState.status, 'Pending')]",
+ "type": "Microsoft.Storage/storageAccounts/privateEndpointConnections",
+ "apiVersion": "2023-04-01",
+ "name": "[format('{0}/{1}', parameters('storageAccountName'), last(array(split(parameters('privateEndpointConnections')[copyIndex()].id, '/'))))]",
+ "properties": {
+ "privateLinkServiceConnectionState": {
+ "status": "Approved",
+ "description": "Approved-by-pipeline",
+ "actionRequired": "None"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2023-04-01').privateEndpointConnections]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "storageManagedPrivateEndpoint"
+ ]
+ },
+ "approveStoragePrivateEndpointConnections": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "ApproveStoragePrivateEndpointConnections",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "storageAccountName": {
+ "value": "[parameters('storageAccountName')]"
+ },
+ "privateEndpointConnections": {
+ "value": "[reference('getStoragePrivateEndpointConnections').outputs.privateEndpointConnections.value]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "6596647335910944068"
+ }
+ },
+ "parameters": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of private endpoint connections. Pending ones will be approved."
+ }
+ },
+ "storageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the storage account."
+ }
+ }
+ },
+ "resources": [
+ {
+ "copy": {
+ "name": "privateEndpointConnection",
+ "count": "[length(parameters('privateEndpointConnections'))]"
+ },
+ "condition": "[equals(parameters('privateEndpointConnections')[copyIndex()].properties.privateLinkServiceConnectionState.status, 'Pending')]",
+ "type": "Microsoft.Storage/storageAccounts/privateEndpointConnections",
+ "apiVersion": "2023-04-01",
+ "name": "[format('{0}/{1}', parameters('storageAccountName'), last(array(split(parameters('privateEndpointConnections')[copyIndex()].id, '/'))))]",
+ "properties": {
+ "privateLinkServiceConnectionState": {
+ "status": "Approved",
+ "description": "Approved-by-pipeline",
+ "actionRequired": "None"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2023-04-01').privateEndpointConnections]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "getStoragePrivateEndpointConnections"
+ ]
+ },
+ "getKeyVaultPrivateEndpointConnections": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "GetKeyVaultPrivateEndpointConnections",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "keyVaultName": {
+ "value": "[parameters('keyVaultName')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "1305728532573520518"
+ }
+ },
+ "parameters": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of private endpoint connections. Pending ones will be approved."
+ }
+ },
+ "keyVaultName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the KeyVault."
+ }
+ }
+ },
+ "resources": [
+ {
+ "copy": {
+ "name": "privateEndpointConnection",
+ "count": "[length(parameters('privateEndpointConnections'))]"
+ },
+ "condition": "[equals(parameters('privateEndpointConnections')[copyIndex()].properties.privateLinkServiceConnectionState.status, 'Pending')]",
+ "type": "Microsoft.KeyVault/vaults/privateEndpointConnections",
+ "apiVersion": "2023-07-01",
+ "name": "[format('{0}/{1}', parameters('keyVaultName'), last(array(split(parameters('privateEndpointConnections')[copyIndex()].id, '/'))))]",
+ "properties": {
+ "privateLinkServiceConnectionState": {
+ "status": "Approved",
+ "description": "Approved-by-pipeline"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName')), '2023-07-01').privateEndpointConnections]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "keyVaultManagedPrivateEndpoint"
+ ]
+ },
+ "approveKeyVaultPrivateEndpointConnections": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "ApproveKeyVaultPrivateEndpointConnections",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "keyVaultName": {
+ "value": "[parameters('keyVaultName')]"
+ },
+ "privateEndpointConnections": {
+ "value": "[reference('getKeyVaultPrivateEndpointConnections').outputs.privateEndpointConnections.value]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "1305728532573520518"
+ }
+ },
+ "parameters": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of private endpoint connections. Pending ones will be approved."
+ }
+ },
+ "keyVaultName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the KeyVault."
+ }
+ }
+ },
+ "resources": [
+ {
+ "copy": {
+ "name": "privateEndpointConnection",
+ "count": "[length(parameters('privateEndpointConnections'))]"
+ },
+ "condition": "[equals(parameters('privateEndpointConnections')[copyIndex()].properties.privateLinkServiceConnectionState.status, 'Pending')]",
+ "type": "Microsoft.KeyVault/vaults/privateEndpointConnections",
+ "apiVersion": "2023-07-01",
+ "name": "[format('{0}/{1}', parameters('keyVaultName'), last(array(split(parameters('privateEndpointConnections')[copyIndex()].id, '/'))))]",
+ "properties": {
+ "privateLinkServiceConnectionState": {
+ "status": "Approved",
+ "description": "Approved-by-pipeline"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName')), '2023-07-01').privateEndpointConnections]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "getKeyVaultPrivateEndpointConnections"
+ ]
+ },
+ "getDataExplorerPrivateEndpointConnections": {
+ "condition": "[and(variables('deployDataExplorer'), not(parameters('enablePublicAccess')))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "GetDataExplorerPrivateEndpointConnections",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "dataExplorerName": {
+ "value": "[parameters('dataExplorerName')]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "12156003319680015068"
+ }
+ },
+ "parameters": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of private endpoint connections. Pending ones will be approved."
+ }
+ },
+ "dataExplorerName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the ADX cluster."
+ }
+ }
+ },
+ "resources": [
+ {
+ "copy": {
+ "name": "privateEndpointConnection",
+ "count": "[length(parameters('privateEndpointConnections'))]"
+ },
+ "condition": "[equals(parameters('privateEndpointConnections')[copyIndex()].properties.privateLinkServiceConnectionState.status, 'Pending')]",
+ "type": "Microsoft.Kusto/clusters/privateEndpointConnections",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}', parameters('dataExplorerName'), last(array(split(parameters('privateEndpointConnections')[copyIndex()].id, '/'))))]",
+ "properties": {
+ "privateLinkServiceConnectionState": {
+ "status": "Approved",
+ "description": "Approved-by-pipeline"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('dataExplorerName')), '2023-08-15').privateEndpointConnections]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "dataExplorerManagedPrivateEndpoint"
+ ]
+ },
+ "approveDataExplorerPrivateEndpointConnections": {
+ "condition": "[and(variables('deployDataExplorer'), not(parameters('enablePublicAccess')))]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "ApproveDataExplorerPrivateEndpointConnections",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "dataExplorerName": {
+ "value": "[parameters('dataExplorerName')]"
+ },
+ "privateEndpointConnections": {
+ "value": "[reference('getDataExplorerPrivateEndpointConnections').outputs.privateEndpointConnections.value]"
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "12156003319680015068"
+ }
+ },
+ "parameters": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of private endpoint connections. Pending ones will be approved."
+ }
+ },
+ "dataExplorerName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the ADX cluster."
+ }
+ }
+ },
+ "resources": [
+ {
+ "copy": {
+ "name": "privateEndpointConnection",
+ "count": "[length(parameters('privateEndpointConnections'))]"
+ },
+ "condition": "[equals(parameters('privateEndpointConnections')[copyIndex()].properties.privateLinkServiceConnectionState.status, 'Pending')]",
+ "type": "Microsoft.Kusto/clusters/privateEndpointConnections",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}', parameters('dataExplorerName'), last(array(split(parameters('privateEndpointConnections')[copyIndex()].id, '/'))))]",
+ "properties": {
+ "privateLinkServiceConnectionState": {
+ "status": "Approved",
+ "description": "Approved-by-pipeline"
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "privateEndpointConnections": {
+ "type": "array",
+ "value": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('dataExplorerName')), '2023-08-15').privateEndpointConnections]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "getDataExplorerPrivateEndpointConnections"
+ ]
+ }
+ },
+ "outputs": {
+ "resourceId": {
+ "type": "string",
+ "metadata": {
+ "description": "The Resource ID of the Data factory."
+ },
+ "value": "[resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName'))]"
+ },
+ "name": {
+ "type": "string",
+ "metadata": {
+ "description": "The Name of the Azure Data Factory instance."
+ },
+ "value": "[parameters('dataFactoryName')]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "dataExplorer",
+ "dataFactory",
+ "keyVault",
+ "storage"
+ ]
+ },
+ "keyVault": {
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "keyVault",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "hubName": {
+ "value": "[parameters('hubName')]"
+ },
+ "uniqueSuffix": {
+ "value": "[variables('uniqueSuffix')]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "tagsByResource": {
+ "value": "[parameters('tagsByResource')]"
+ },
+ "storageAccountKey": {
+ "value": "[parameters('remoteHubStorageKey')]"
+ },
+ "enablePublicAccess": {
+ "value": "[parameters('enablePublicAccess')]"
+ },
+ "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.vNetId.value))]",
+ "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.finopsHubSubnetId.value))]",
+ "accessPolicies": {
+ "value": [
+ {
+ "objectId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]",
+ "tenantId": "[subscription().tenantId]",
+ "permissions": {
+ "secrets": [
+ "get"
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "1357795720924997394"
+ }
+ },
+ "parameters": {
+ "hubName": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Name of the hub. Used to ensure unique resource names."
+ }
+ },
+ "uniqueSuffix": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Suffix to add to the KeyVault instance name to ensure uniqueness."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Location for all resources."
+ }
+ },
+ "accessPolicies": {
+ "type": "array",
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of access policies object."
+ }
+ },
+ "storageAccountKey": {
+ "type": "securestring",
+ "metadata": {
+ "description": "Optional. Create and store a key for a remote storage account."
+ }
+ },
+ "sku": {
+ "type": "string",
+ "defaultValue": "premium",
+ "allowedValues": [
+ "premium",
+ "standard"
+ ],
+ "metadata": {
+ "description": "Optional. Specifies the SKU for the vault."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Resource tags."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "virtualNetworkId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Resource ID of the virtual network for private endpoints."
+ }
+ },
+ "privateEndpointSubnetId": {
+ "type": "string",
+ "metadata": {
+ "description": "Required. Resource ID of the subnet for private endpoints."
+ }
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "metadata": {
+ "description": "Optional. Enable public access to the data lake. Default: false."
+ }
+ }
+ },
+ "variables": {
+ "copy": [
+ {
+ "name": "formattedAccessPolicies",
+ "count": "[length(parameters('accessPolicies'))]",
+ "input": {
+ "applicationId": "[coalesce(tryGet(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'applicationId'), '')]",
+ "objectId": "[coalesce(tryGet(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'objectId'), '')]",
+ "permissions": "[parameters('accessPolicies')[copyIndex('formattedAccessPolicies')].permissions]",
+ "tenantId": "[coalesce(tryGet(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'tenantId'), tenant().tenantId)]"
+ }
+ }
+ ],
+ "keyVaultPrefix": "[format('{0}-vault', replace(parameters('hubName'), '_', '-'))]",
+ "keyVaultSuffix": "[format('-{0}', parameters('uniqueSuffix'))]",
+ "keyVaultName": "[replace(format('{0}{1}', take(variables('keyVaultPrefix'), sub(24, length(variables('keyVaultSuffix')))), variables('keyVaultSuffix')), '--', '-')]",
+ "keyVaultSecretName": "[format('{0}-storage-key', toLower(parameters('hubName')))]",
+ "keyVaultPrivateDnsZoneName": "[format('privatelink{0}', replace(environment().suffixes.keyvaultDns, 'vault', 'vaultcore'))]"
+ },
+ "resources": [
+ {
+ "type": "Microsoft.KeyVault/vaults",
+ "apiVersion": "2023-02-01",
+ "name": "[variables('keyVaultName')]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.KeyVault/vaults'), createObject()))]",
+ "properties": {
+ "enabledForDeployment": true,
+ "enabledForTemplateDeployment": true,
+ "enabledForDiskEncryption": true,
+ "enableSoftDelete": true,
+ "softDeleteRetentionInDays": 90,
+ "enableRbacAuthorization": false,
+ "createMode": "default",
+ "tenantId": "[subscription().tenantId]",
+ "accessPolicies": "[variables('formattedAccessPolicies')]",
+ "sku": {
+ "name": "[if(startsWith(parameters('location'), 'china'), 'standard', parameters('sku'))]",
+ "family": "A"
+ },
+ "networkAcls": {
+ "bypass": "AzureServices",
+ "defaultAction": "[if(parameters('enablePublicAccess'), 'Allow', 'Deny')]"
+ }
+ }
+ },
+ {
+ "condition": "[not(empty(parameters('accessPolicies')))]",
+ "type": "Microsoft.KeyVault/vaults/accessPolicies",
+ "apiVersion": "2023-02-01",
+ "name": "[format('{0}/{1}', variables('keyVaultName'), 'add')]",
+ "properties": {
+ "accessPolicies": "[variables('formattedAccessPolicies')]"
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]"
+ ]
+ },
+ {
+ "condition": "[not(empty(parameters('storageAccountKey')))]",
+ "type": "Microsoft.KeyVault/vaults/secrets",
+ "apiVersion": "2023-02-01",
+ "name": "[format('{0}/{1}', variables('keyVaultName'), variables('keyVaultSecretName'))]",
+ "properties": {
+ "attributes": {
+ "enabled": true,
+ "exp": 1702648632,
+ "nbf": 10000
+ },
+ "value": "[parameters('storageAccountKey')]"
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[variables('keyVaultPrivateDnsZoneName')]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.KeyVault/privateDnsZones'), createObject()))]",
+ "properties": {}
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "apiVersion": "2024-06-01",
+ "name": "[format('{0}/{1}', variables('keyVaultPrivateDnsZoneName'), format('{0}-link', replace(variables('keyVaultPrivateDnsZoneName'), '.', '-')))]",
+ "location": "global",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
+ "properties": {
+ "virtualNetwork": {
+ "id": "[parameters('virtualNetworkId')]"
+ },
+ "registrationEnabled": false
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateDnsZones', variables('keyVaultPrivateDnsZoneName'))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}-ep', variables('keyVaultName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
+ "properties": {
+ "subnet": {
+ "id": "[parameters('privateEndpointSubnetId')]"
+ },
+ "privateLinkServiceConnections": [
+ {
+ "name": "keyVaultLink",
+ "properties": {
+ "privateLinkServiceId": "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]",
+ "groupIds": [
+ "vault"
+ ]
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]"
+ ]
+ },
+ {
+ "condition": "[not(parameters('enablePublicAccess'))]",
+ "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
+ "apiVersion": "2023-11-01",
+ "name": "[format('{0}/{1}', format('{0}-ep', variables('keyVaultName')), 'keyvault-endpoint-zone')]",
+ "properties": {
+ "privateDnsZoneConfigs": [
+ {
+ "name": "[variables('keyVaultPrivateDnsZoneName')]",
+ "properties": {
+ "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', variables('keyVaultPrivateDnsZoneName'))]"
+ }
+ }
+ ]
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-ep', variables('keyVaultName')))]",
+ "[resourceId('Microsoft.Network/privateDnsZones', variables('keyVaultPrivateDnsZoneName'))]"
+ ]
+ }
+ ],
+ "outputs": {
+ "resourceId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the key vault."
+ },
+ "value": "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]"
+ },
+ "name": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the key vault."
+ },
+ "value": "[variables('keyVaultName')]"
+ },
+ "uri": {
+ "type": "string",
+ "metadata": {
+ "description": "The URI of the key vault."
+ },
+ "value": "[reference(resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName')), '2023-02-01').vaultUri]"
+ }
+ }
+ }
+ },
+ "dependsOn": [
+ "dataFactory",
+ "vnet"
+ ]
+ }
+ },
+ "outputs": {
+ "name": {
+ "type": "string",
+ "metadata": {
+ "description": "Name of the deployed hub instance."
+ },
+ "value": "[parameters('hubName')]"
+ },
+ "location": {
+ "type": "string",
+ "metadata": {
+ "description": "Azure resource location resources were deployed to."
+ },
+ "value": "[parameters('location')]"
+ },
+ "dataFactoryName": {
+ "type": "string",
+ "metadata": {
+ "description": "Name of the Data Factory."
+ },
+ "value": "[variables('dataFactoryName')]"
+ },
+ "storageAccountId": {
+ "type": "string",
+ "metadata": {
+ "description": "Resource ID of the storage account created for the hub instance. This must be used when creating the Cost Management export."
+ },
+ "value": "[reference('storage').outputs.resourceId.value]"
+ },
+ "storageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "Name of the storage account created for the hub instance. This must be used when connecting FinOps toolkit Power BI reports to your data."
+ },
+ "value": "[reference('storage').outputs.name.value]"
+ },
+ "storageUrlForPowerBI": {
+ "type": "string",
+ "metadata": {
+ "description": "URL to use when connecting custom Power BI reports to your data."
+ },
+ "value": "[format('https://{0}.dfs.{1}/{2}', reference('storage').outputs.name.value, environment().suffixes.storage, reference('storage').outputs.ingestionContainer.value)]"
+ },
+ "clusterId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the Data Explorer cluster."
+ },
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.clusterId.value)]"
+ },
+ "clusterUri": {
+ "type": "string",
+ "metadata": {
+ "description": "The URI of the Data Explorer cluster."
+ },
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.clusterUri.value)]"
+ },
+ "ingestionDbName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the Data Explorer database used for ingesting data."
+ },
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.ingestionDbName.value)]"
+ },
+ "hubDbName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the Data Explorer database used for querying data."
+ },
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.hubDbName.value)]"
+ },
+ "managedIdentityId": {
+ "type": "string",
+ "metadata": {
+ "description": "Object ID of the Data Factory managed identity. This will be needed when configuring managed exports."
+ },
+ "value": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]"
+ },
+ "managedIdentityTenantId": {
+ "type": "string",
+ "metadata": {
+ "description": "Azure AD tenant ID. This will be needed when configuring managed exports."
+ },
+ "value": "[tenant().tenantId]"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "name": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the resource group."
+ },
+ "value": "[parameters('hubName')]"
+ },
+ "location": {
+ "type": "string",
+ "metadata": {
+ "description": "The location the resources wer deployed to."
+ },
+ "value": "[parameters('location')]"
+ },
+ "dataFactoryName": {
+ "type": "string",
+ "metadata": {
+ "description": "Name of the Data Factory."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.dataFactoryName.value]"
+ },
+ "storageAccountId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the deployed storage account."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.storageAccountId.value]"
+ },
+ "storageAccountName": {
+ "type": "string",
+ "metadata": {
+ "description": "Name of the storage account created for the hub instance. This must be used when connecting FinOps toolkit Power BI reports to your data."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.storageAccountName.value]"
+ },
+ "storageUrlForPowerBI": {
+ "type": "string",
+ "metadata": {
+ "description": "URL to use when connecting custom Power BI reports to your data."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.storageUrlForPowerBI.value]"
+ },
+ "clusterId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the Data Explorer cluster."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.clusterId.value]"
+ },
+ "clusterUri": {
+ "type": "string",
+ "metadata": {
+ "description": "The URI of the Data Explorer cluster."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.clusterUri.value]"
+ },
+ "ingestionDbName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the Data Explorer database used for ingesting data."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.ingestionDbName.value]"
+ },
+ "hubDbName": {
+ "type": "string",
+ "metadata": {
+ "description": "The name of the Data Explorer database used for querying data."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.hubDbName.value]"
+ },
+ "managedIdentityId": {
+ "type": "string",
+ "metadata": {
+ "description": "Object ID of the Data Factory managed identity. This will be needed when configuring managed exports."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.managedIdentityId.value]"
+ },
+ "managedIdentityTenantId": {
+ "type": "string",
+ "metadata": {
+ "description": "Azure AD tenant ID. This will be needed when configuring managed exports."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.managedIdentityTenantId.value]"
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/deploy/finops-hub-0.8.ui.json b/docs/deploy/finops-hub-0.8.ui.json
new file mode 100644
index 000000000..3b92b3ba0
--- /dev/null
+++ b/docs/deploy/finops-hub-0.8.ui.json
@@ -0,0 +1,667 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
+ "handler": "Microsoft.Azure.CreateUIDef",
+ "version": "0.1.2-preview",
+ "parameters": {
+ "config": {
+ "basics": {
+ "description": "FinOps hubs are a reliable, trustworthy platform for cost analytics, insights, and optimization. Connect your hub to one or more billing accounts and subscriptions and build custom reports in Power BI or other tools. [Learn more](https://aka.ms/finops/hubs)",
+ "location": {
+ "label": "Location",
+ "resourceTypes": [
+ "Microsoft.DataFactory/factories",
+ "Microsoft.KeyVault/vaults",
+ "Microsoft.Kusto/clusters",
+ "Microsoft.ManagedIdentity/userAssignedIdentities",
+ "Microsoft.Network/privateDnsZones",
+ "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "Microsoft.Network/privateEndpoints",
+ "Microsoft.Resources/deploymentScripts",
+ "Microsoft.Storage/storageAccounts"
+ ]
+ }
+ }
+ },
+ "resourceTypes": [
+ "Microsoft.DataFactory/factories",
+ "Microsoft.KeyVault/vaults",
+ "Microsoft.Kusto/clusters",
+ "Microsoft.ManagedIdentity/userAssignedIdentities",
+ "Microsoft.Network/privateDnsZones",
+ "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "Microsoft.Network/privateEndpoints",
+ "Microsoft.Resources/deploymentScripts",
+ "Microsoft.Storage/storageAccounts"
+ ],
+ "basics": [
+ {
+ "name": "hubName",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Hub name",
+ "defaultValue": "finops-hub",
+ "toolTip": "Name of the FinOps hub instance. Used to ensure unique resource names.",
+ "constraints": {
+ "required": true,
+ "regex": "^[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]$",
+ "validationMessage": "Name must be between 3 and 63 characters long and can contain only lowercase letters, numbers, and hyphens. The first and last characters in the name must be alphanumeric."
+ },
+ "visible": true
+ },
+ {
+ "name": "dataExplorer",
+ "type": "Microsoft.Common.Section",
+ "label": "Azure Data Explorer (optional)",
+ "elements": [
+ {
+ "name": "dataExplorerIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Azure Data Explorer is a fast, scalable service for advanced, big data analytics. Data Explorer is optional but recommended when monitoring more than $1 million in spend. FinOps hubs with Data Explorer starts at $120 for a single node cluster plus $10 per million in monitored spend (<0.02% of annual spend)."
+ }
+ },
+ {
+ "name": "dataExplorerName",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Cluster name",
+ "toolTip": "Name of the Azure Data Explorer cluster, if desired. If not specified, Data Explorer will not be deployed.",
+ "constraints": {
+ "required": false,
+ "regex": "^[a-zA-Z0-9][a-zA-Z0-9\\-]{0,20}[a-z0-9]$",
+ "validationMessage": "Name must be between 4 and 22 characters long and can contain only lowercase letters, numbers, and hyphens. The first and last characters in the name must be alphanumeric."
+ },
+ "visible": true
+ }
+ ],
+ "visible": true
+ }
+ ],
+ "steps": [
+ {
+ "name": "pricing",
+ "label": "Pricing",
+ "elements": [
+ {
+ "name": "pricingIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Estimated costs below are based on list prices for the default settings. Refer to the Azure pricing calculator for the most accurate pricing based on your discounts. Learn more @ https://aka.ms/finops/hubs/calculator"
+ }
+ },
+ {
+ "name": "storage",
+ "type": "Microsoft.Common.Section",
+ "label": "Data Factory + storage",
+ "elements": [
+ {
+ "name": "storagePricingIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "FinOps hubs utilize Azure Data Factory for data processing and Azure Data Lake Storage Gen2 for staging during data ingestion."
+ }
+ },
+ {
+ "name": "storageEstimate",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Estimated cost: Starts at ~$5/mo per million in monitored spend*."
+ }
+ },
+ {
+ "name": "storageSku",
+ "type": "Microsoft.Common.DropDown",
+ "label": "Storage redundancy",
+ "defaultValue": "Locally-redundant (LRS) - Lowest cost",
+ "toolTip": "The data in your storage account is always replicated to ensure durability and high availability. Choose a replication strategy that matches your durability requirements. [Learn more](https://go.microsoft.com/fwlink/?linkid=2163103)",
+ "constraints": {
+ "required": false,
+ "allowedValues": [
+ {
+ "label": "Locally-redundant (LRS) - Lowest cost",
+ "value": "Premium_LRS"
+ },
+ {
+ "label": "Zone-redundant (ZRS) - High availability",
+ "value": "Premium_ZRS"
+ }
+ ]
+ },
+ "visible": true
+ }
+ ],
+ "visible": true
+ },
+ {
+ "name": "dataExplorer",
+ "type": "Microsoft.Common.Section",
+ "label": "Data Explorer (optional)",
+ "elements": [
+ {
+ "name": "dataExplorerPricingIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Azure Data Explorer is optional. If a cluster name is not specified on the Basics tab, this setting is ignored."
+ }
+ },
+ {
+ "name": "dataExplorerEstimate",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Added cost: Starts at $120/mo plus another ~$5/mo per million in monitored spend* (<0.02% of annual spend)."
+ }
+ },
+ {
+ "name": "dataExplorerSku",
+ "type": "Microsoft.Common.DropDown",
+ "label": "Data Explorer SKU",
+ "defaultValue": "Dev/test: D11_v2 (no SLA) - Extra small, 78GB cache (~$121/mo)",
+ "toolTip": "Select an Azure Data Explorer SKU based on your needs. Consider how many accounts and datasets that are required for your needs. We recommend starting small and scaling up based on performance. [Learn more](https://learn.microsoft.com/azure/data-explorer/manage-cluster-choose-sku)",
+ "constraints": {
+ "required": false,
+ "allowedValues": [
+ {
+ "label": "Dev/test: E2a_v4 (no SLA) - Extra small, 24GB cache (~$110/mo)",
+ "value": "Dev(No SLA)_Standard_E2a_v4"
+ },
+ {
+ "label": "Dev/test: D11_v2 (no SLA) - Extra small, 78GB cache (~$121/mo)",
+ "value": "Dev(No SLA)_Standard_D11_v2"
+ },
+ {
+ "label": "D11_v2 - Extra small, 78GB cache (~$245/mo)",
+ "value": "Standard_D11_v2"
+ },
+ {
+ "label": "D12_v2 - Small, 162GB cache",
+ "value": "Standard_D12_v2"
+ },
+ {
+ "label": "D13_v2 - Medium, 335GB cache",
+ "value": "Standard_D13_v2"
+ },
+ {
+ "label": "D14_v2 - Large, 680GB cache",
+ "value": "Standard_D14_v2"
+ },
+ {
+ "label": "D16d_v5 - Large, 485GB cache",
+ "value": "Standard_D16d_v5"
+ },
+ {
+ "label": "D32d_v4 - Extra large, 976GB cache",
+ "value": "Standard_D32d_v4"
+ },
+ {
+ "label": "D32d_v5 - Extra large, 976GB cache",
+ "value": "Standard_D32d_v5"
+ },
+ {
+ "label": "DS13_v2+1TB_PS - Medium",
+ "value": "Standard_DS13_v2+1TB_PS"
+ },
+ {
+ "label": "DS13_v2+2TB_PS - Medium",
+ "value": "Standard_DS13_v2+2TB_PS"
+ },
+ {
+ "label": "DS14_v2+3TB_PS - Large",
+ "value": "Standard_DS14_v2+3TB_PS"
+ },
+ {
+ "label": "DS14_v2+4TB_PS - Large",
+ "value": "Standard_DS14_v2+4TB_PS"
+ },
+ {
+ "label": "E2a_v4 - Extra small, 30GB cache (~$220/mo)",
+ "value": "Standard_E2a_v4"
+ },
+ {
+ "label": "E2ads_v5 - Extra small",
+ "value": "Standard_E2ads_v5"
+ },
+ {
+ "label": "E2d_v4 - Extra small",
+ "value": "Standard_E2d_v4"
+ },
+ {
+ "label": "E2d_v5 - Extra small",
+ "value": "Standard_E2d_v5"
+ },
+ {
+ "label": "E4a_v4 - Small",
+ "value": "Standard_E4a_v4"
+ },
+ {
+ "label": "E4ads_v5 - Small",
+ "value": "Standard_E4ads_v5"
+ },
+ {
+ "label": "E4d_v4 - Small",
+ "value": "Standard_E4d_v4"
+ },
+ {
+ "label": "E4d_v5 - Small",
+ "value": "Standard_E4d_v5"
+ },
+ {
+ "label": "E8a_v4 - Medium",
+ "value": "Standard_E8a_v4"
+ },
+ {
+ "label": "E8ads_v5 - Medium",
+ "value": "Standard_E8ads_v5"
+ },
+ {
+ "label": "E8as_v4+1TB_PS - Medium",
+ "value": "Standard_E8as_v4+1TB_PS"
+ },
+ {
+ "label": "E8as_v4+2TB_PS - Medium",
+ "value": "Standard_E8as_v4+2TB_PS"
+ },
+ {
+ "label": "E8as_v5+1TB_PS - Medium",
+ "value": "Standard_E8as_v5+1TB_PS"
+ },
+ {
+ "label": "E8as_v5+2TB_PS - Medium",
+ "value": "Standard_E8as_v5+2TB_PS"
+ },
+ {
+ "label": "E8d_v4 - Medium",
+ "value": "Standard_E8d_v4"
+ },
+ {
+ "label": "E8d_v5 - Medium",
+ "value": "Standard_E8d_v5"
+ },
+ {
+ "label": "E8s_v4+1TB_PS - Medium",
+ "value": "Standard_E8s_v4+1TB_PS"
+ },
+ {
+ "label": "E8s_v4+2TB_PS - Medium",
+ "value": "Standard_E8s_v4+2TB_PS"
+ },
+ {
+ "label": "E8s_v5+1TB_PS - Medium",
+ "value": "Standard_E8s_v5+1TB_PS"
+ },
+ {
+ "label": "E8s_v5+2TB_PS - Medium",
+ "value": "Standard_E8s_v5+2TB_PS"
+ },
+ {
+ "label": "E16a_v4 - Large",
+ "value": "Standard_E16a_v4"
+ },
+ {
+ "label": "E16ads_v5 - Large",
+ "value": "Standard_E16ads_v5"
+ },
+ {
+ "label": "E16as_v4+3TB_PS - Large",
+ "value": "Standard_E16as_v4+3TB_PS"
+ },
+ {
+ "label": "E16as_v4+4TB_PS - Large",
+ "value": "Standard_E16as_v4+4TB_PS"
+ },
+ {
+ "label": "E16as_v5+3TB_PS - Large",
+ "value": "Standard_E16as_v5+3TB_PS"
+ },
+ {
+ "label": "E16as_v5+4TB_PS - Large",
+ "value": "Standard_E16as_v5+4TB_PS"
+ },
+ {
+ "label": "E16d_v4 - Large",
+ "value": "Standard_E16d_v4"
+ },
+ {
+ "label": "E16d_v5 - Large",
+ "value": "Standard_E16d_v5"
+ },
+ {
+ "label": "E16s_v4+3TB_PS - Large",
+ "value": "Standard_E16s_v4+3TB_PS"
+ },
+ {
+ "label": "E16s_v4+4TB_PS - Large",
+ "value": "Standard_E16s_v4+4TB_PS"
+ },
+ {
+ "label": "E16s_v5+3TB_PS - Large",
+ "value": "Standard_E16s_v5+3TB_PS"
+ },
+ {
+ "label": "E16s_v5+4TB_PS - Large",
+ "value": "Standard_E16s_v5+4TB_PS"
+ },
+ {
+ "label": "E64i_v3 - Extra large",
+ "value": "Standard_E64i_v3"
+ },
+ {
+ "label": "E80ids_v4 - Extra large",
+ "value": "Standard_E80ids_v4"
+ },
+ {
+ "label": "EC8ads_v5 - Medium",
+ "value": "Standard_EC8ads_v5"
+ },
+ {
+ "label": "EC8as_v5+1TB_PS - Medium",
+ "value": "Standard_EC8as_v5+1TB_PS"
+ },
+ {
+ "label": "EC8as_v5+2TB_PS - Medium",
+ "value": "Standard_EC8as_v5+2TB_PS"
+ },
+ {
+ "label": "EC16ads_v5 - Large",
+ "value": "Standard_EC16ads_v5"
+ },
+ {
+ "label": "EC16as_v5+3TB_PS - Large",
+ "value": "Standard_EC16as_v5+3TB_PS"
+ },
+ {
+ "label": "EC16as_v5+4TB_PS - Large",
+ "value": "Standard_EC16as_v5+4TB_PS"
+ },
+ {
+ "label": "L4s - Small",
+ "value": "Standard_L4s"
+ },
+ {
+ "label": "L8as_v3 - Medium",
+ "value": "Standard_L8as_v3"
+ },
+ {
+ "label": "L8s - Medium",
+ "value": "Standard_L8s"
+ },
+ {
+ "label": "L8s_v2 - Medium",
+ "value": "Standard_L8s_v2"
+ },
+ {
+ "label": "L8s_v3 - Medium",
+ "value": "Standard_L8s_v3"
+ },
+ {
+ "label": "L16as_v3 - Large",
+ "value": "Standard_L16as_v3"
+ },
+ {
+ "label": "L16s - Large",
+ "value": "Standard_L16s"
+ },
+ {
+ "label": "L16s_v2 - Large",
+ "value": "Standard_L16s_v2"
+ },
+ {
+ "label": "L16s_v3 - Large",
+ "value": "Standard_L16s_v3"
+ },
+ {
+ "label": "L32as_v3 - Extra large",
+ "value": "Standard_L32as_v3"
+ },
+ {
+ "label": "L32s_v3 - Extra large",
+ "value": "Standard_L32s_v3"
+ }
+ ]
+ },
+ "visible": true
+ }
+ ],
+ "visible": true
+ },
+ {
+ "name": "spacer",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": ""
+ }
+ },
+ {
+ "name": "monitoredSpendNote",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "* Monitored spend refers to how much cost data is stored based on desired retention. For instance, $1 million per month in spend for 13 months is $13 million in monitored spend. The basic deployment with Data Explorer would be $250/mo - $120/mo for a single node cluster plus $10 times 13 for Data Factory and storage costs."
+ }
+ }
+ ]
+ },
+ {
+ "name": "retention",
+ "label": "Data retention",
+ "elements": [
+ {
+ "name": "retentionIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Data retention settings indicate how long to keep data available for reporting or additional processing. Retained data contributes to monitored spend and the total storage costs for the hub instance."
+ }
+ },
+ {
+ "name": "storage",
+ "type": "Microsoft.Common.Section",
+ "label": "Storage",
+ "visible": false,
+ "elements": [
+ {
+ "name": "storageIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Storage retention is not implemented yet. You can set the retention period but files will not be automatically removed."
+ }
+ },
+ {
+ "name": "msexportsDays",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Export retention (days)",
+ "defaultValue": "0",
+ "toolTip": "Indicates how many days Cost Management exports are kept in the msexports container. If 0, exported data will be deleted after ingestion. Manifest files are always retained for troubleshooting. If set to any higher value, exported data will be retained indefinitely. This retention setting has not been implemented yet.",
+ "constraints": {
+ "required": false,
+ "regex": "^[0-9]{1,4}$",
+ "validationMessage": "Number of days must be between 0 and 9999."
+ },
+ "visible": true
+ },
+ {
+ "name": "ingestionMonths",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Ingestion retention (months)",
+ "defaultValue": "13",
+ "toolTip": "Indicates how many months exported data is kept in the ingestion container. This retention setting has not been implemented yet.",
+ "constraints": {
+ "required": false,
+ "regex": "^[0-9]{1,2}$",
+ "validationMessage": "Number of months must be between 0 and 99."
+ },
+ "visible": true
+ }
+ ]
+ },
+ {
+ "name": "dataExplorer",
+ "type": "Microsoft.Common.Section",
+ "label": "Data Explorer (optional)",
+ "visible": true,
+ "elements": [
+ {
+ "name": "dataExplorerIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Azure Data Explorer is optional. If a cluster name is not specified on the Basics tab, this setting is ignored."
+ }
+ },
+ {
+ "name": "rawDays",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Raw data retention (days)",
+ "defaultValue": "0",
+ "toolTip": "Indicates how many days ingested data should be retained in 'raw' tables. If 0, ingested data is deleted immediately after ingested into 'final' (normalized) tables.",
+ "constraints": {
+ "required": false,
+ "regex": "^[0-9]{1,4}$",
+ "validationMessage": "Number of days must be between 0 and 9999."
+ },
+ "visible": true
+ },
+ {
+ "name": "finalMonths",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Normalized data retention (months)",
+ "defaultValue": "13",
+ "toolTip": "Indicates how many closed (complete) months data should be retained in 'final' (normalized) tables. If 0, ingested data is deleted on the first of the next month. This retention setting is only enforced when new data is ingested. If data ingestion stops, historical data will be retained indefinitely.",
+ "constraints": {
+ "required": false,
+ "regex": "^[0-9]{1,2}$",
+ "validationMessage": "Number of months must be between 0 and 99."
+ },
+ "visible": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "advanced",
+ "label": "Advanced",
+ "elements": [
+ {
+ "name": "storage",
+ "type": "Microsoft.Common.Section",
+ "label": "Infrastructure encryption",
+ "elements": [
+ {
+ "name": "infraEncryptionIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "Infrastructure encryption can be enabled for the entire storage account. To enable infrastructure encryption for this storage account, you must check this box at the time that you deploy this template. Learn more . To learn about pricing for encryption scopes, see Blob Storage pricing ."
+ }
+ },
+ {
+ "name": "enableInfrastructureEncryption",
+ "type": "Microsoft.Common.CheckBox",
+ "label": "Enable Infrastructure Encryption",
+ "toolTip": "Infrastructure encryption is recommended for scenarios where doubly encrypting data is necessary for compliance requirements. For most other scenarios, Azure Storage encryption provides a sufficiently powerful encryption algorithm, and there is unlikely to be a benefit to using infrastructure encryption unless for compliance requirements."
+ }
+ ],
+ "visible": true
+ },
+ {
+ "name": "networking",
+ "type": "Microsoft.Common.Section",
+ "label": "Networking",
+ "elements": [
+ {
+ "name": "infraEncryptionIntro",
+ "type": "Microsoft.Common.TextBlock",
+ "visible": true,
+ "options": {
+ "text": "For enhanced security, consider blocking external access to your FinOps hub instance to enable secure, private connectivity to your cloud resources by eliminating exposure to the public internet. Private endpoints can incur significant additional cost. Please understand the cost impact before selecting this option."
+ }
+ },
+ {
+ "name": "enablePublicAccess",
+ "type": "Microsoft.Common.DropDown",
+ "label": "Access",
+ "toolTip": "Indicate whether FinOps hubs resources should be accessible by the internet or not. If set to private, all resources will be hidden behind a virtual network private endpoint. This will incur additional costs for data crossing virtual network boundaries and for virtual network peering, if configured.",
+ "defaultValue": "Public",
+ "multiLine": true,
+ "constraints": {
+ "allowedValues": [
+ {
+ "label": "Public",
+ "description": "Allow external access to storage and Data Explorer.",
+ "value": true
+ },
+ {
+ "label": "Private",
+ "description": "Block all external access. This will incur additional charges.",
+ "value": false
+ }
+ ]
+ }
+ },
+ {
+ "name": "virtualNetworkAddressPrefix",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Address prefix",
+ "toolTip": "Address space for the workload. A /26 is required for the workload.",
+ "defaultValue": "10.20.30.0/26",
+ "constraints": {
+ "validations": [
+ {
+ "regex": "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\/26$",
+ "message": "Address prefix must be a valid IPv4 address in the format 'XXX.XXX.XXX.XXX/26'. The '/26' is required."
+ }
+ ]
+ }
+ }
+ ],
+ "visible": true
+ }
+ ]
+ },
+ {
+ "name": "tags",
+ "label": "Tags",
+ "elements": [
+ {
+ "name": "tagsByResource",
+ "label": "Tags",
+ "toolTip": "Tags to apply to resources.",
+ "type": "Microsoft.Common.TagsByResource",
+ "resources": [
+ "Microsoft.DataFactory/factories",
+ "Microsoft.KeyVault/vaults",
+ "Microsoft.Kusto/clusters",
+ "Microsoft.ManagedIdentity/userAssignedIdentities",
+ "Microsoft.Network/privateDnsZones",
+ "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
+ "Microsoft.Network/privateEndpoints",
+ "Microsoft.Resources/deploymentScripts",
+ "Microsoft.Storage/storageAccounts"
+ ]
+ }
+ ]
+ }
+ ],
+ "outputs": {
+ "hubName": "[basics('hubName')]",
+ "location": "[location()]",
+ "storageSku": "[steps('pricing').storage.storageSku]",
+ "dataExplorerName": "[basics('dataExplorer').dataExplorerName]",
+ "enableInfrastructureEncryption": "[steps('advanced').storage.enableInfrastructureEncryption]",
+ "enablePublicAccess": "[steps('advanced').networking.enablePublicAccess]",
+ "virtualNetworkAddressPrefix": "[steps('advanced').networking.virtualNetworkAddressPrefix]",
+ "dataExplorerSku": "[steps('pricing').dataExplorer.dataExplorerSku]",
+ "exportRetentionInDays": "[steps('retention').storage.msexportsDays]",
+ "ingestionRetentionInMonths": "[steps('retention').storage.ingestionMonths]",
+ "dataExplorerRawRetentionInDays": "[steps('retention').dataExplorer.rawDays]",
+ "dataExplorerFinalRetentionInMonths": "[steps('retention').dataExplorer.finalMonths]",
+ "tagsByResource": "[steps('tags').tagsByResource]"
+ }
+ }
+}
diff --git a/docs/deploy/finops-hub-latest.json b/docs/deploy/finops-hub-latest.json
index 5e767e413..a80c857f4 100644
--- a/docs/deploy/finops-hub-latest.json
+++ b/docs/deploy/finops-hub-latest.json
@@ -4,8 +4,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "17613145791432772933"
+ "version": "0.33.93.31351",
+ "templateHash": "13598346182779466463"
}
},
"parameters": {
@@ -275,12 +275,13 @@
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "8625046668927457222"
+ "version": "0.33.93.31351",
+ "templateHash": "4218126733130950078"
}
},
"parameters": {
@@ -418,6 +419,16 @@
"description": "Optional. Number of nodes to use in the cluster. Allowed values: 1 for the Basic SKU tier and 2-1000 for Standard. Default: 1 for dev/test SKUs, 2 for standard SKUs."
}
},
+ "dataExplorerTrustedExternalTenants": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access)."
+ }
+ },
"tags": {
"type": "object",
"defaultValue": {},
@@ -434,6 +445,7 @@
},
"scopesToMonitor": {
"type": "array",
+ "defaultValue": [],
"metadata": {
"description": "Optional. List of scope IDs to monitor and ingest cost for."
}
@@ -489,7 +501,8 @@
}
},
"variables": {
- "finOpsToolkitVersion": "0.7",
+ "$fxv#0": "0.8",
+ "finOpsToolkitVersion": "0.8",
"resourceTags": "[union(parameters('tags'), createObject('cm-resource-parent', format('{0}/providers/Microsoft.Cloud/hubs/{1}', resourceGroup().id, parameters('hubName')), 'ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', 'FinOps hubs'))]",
"uniqueSuffix": "[uniqueString(parameters('hubName'), resourceGroup().id)]",
"dataFactoryPrefix": "[format('{0}-engine', replace(parameters('hubName'), '_', '-'))]",
@@ -498,8 +511,8 @@
"deployDataExplorer": "[not(empty(parameters('dataExplorerName')))]",
"telemetryId": "00f120b5-2007-6120-0000-40b000000000"
},
- "resources": [
- {
+ "resources": {
+ "defaultTelemetry": {
"condition": "[parameters('enableDefaultTelemetry')]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -512,19 +525,19 @@
"metadata": {
"_generator": {
"name": "FinOps toolkit",
- "version": "[variables('finOpsToolkitVersion')]"
+ "version": "[variables('$fxv#0')]"
}
},
"resources": []
}
}
},
- {
+ "dataFactory": {
"type": "Microsoft.DataFactory/factories",
"apiVersion": "2018-06-01",
"name": "[variables('dataFactoryName')]",
"location": "[parameters('location')]",
- "tags": "[union(variables('resourceTags'), if(contains(parameters('tagsByResource'), 'Microsoft.DataFactory/factories'), parameters('tagsByResource')['Microsoft.DataFactory/factories'], createObject()))]",
+ "tags": "[union(variables('resourceTags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.DataFactory/factories'), createObject()))]",
"identity": {
"type": "SystemAssigned"
},
@@ -534,7 +547,8 @@
}
}
},
- {
+ "vnet": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "vnet",
@@ -566,8 +580,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "6928837763288466791"
+ "version": "0.33.93.31351",
+ "templateHash": "981936302292714375"
}
},
"parameters": {
@@ -664,7 +678,7 @@
"apiVersion": "2023-11-01",
"name": "[variables('nsgName')]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/networkSecurityGroups'), parameters('tagsByResource')['Microsoft.Storage/networkSecurityGroups'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/networkSecurityGroups'), createObject()))]",
"properties": {
"securityRules": [
{
@@ -753,7 +767,7 @@
"apiVersion": "2023-11-01",
"name": "[variables('vNetName')]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/virtualNetworks'), parameters('tagsByResource')['Microsoft.Storage/virtualNetworks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/virtualNetworks'), createObject()))]",
"properties": {
"addressSpace": {
"addressPrefixes": [
@@ -800,7 +814,7 @@
}
}
},
- {
+ "storage": {
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "storage",
@@ -846,15 +860,9 @@
"finalRetentionInMonths": {
"value": "[parameters('dataExplorerFinalRetentionInMonths')]"
},
- "virtualNetworkId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value]"
- },
- "privateEndpointSubnetId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.finopsHubSubnetId.value]"
- },
- "scriptSubnetId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.scriptSubnetId.value]"
- },
+ "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.vNetId.value))]",
+ "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.finopsHubSubnetId.value))]",
+ "scriptSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.scriptSubnetId.value))]",
"enablePublicAccess": {
"value": "[parameters('enablePublicAccess')]"
}
@@ -865,8 +873,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "11825572491650981768"
+ "version": "0.33.93.31351",
+ "templateHash": "5620729023118426614"
}
},
"parameters": {
@@ -983,7 +991,7 @@
"variables": {
"$fxv#0": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"BilledCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BilledCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeClass\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeClass\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountStatus\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountStatus\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ConsumedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ConsumedUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"EffectiveCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceIssuerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceIssuerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"PricingQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProviderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProviderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PublisherName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PublisherName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuPriceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuPriceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Tags\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Tags\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountOwnerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountOwnerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRateDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRateDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ContractedCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ContractedCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostAllocationRuleName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostAllocationRuleName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceIssuerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceIssuerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ListCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ListCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditApplied\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditApplied\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditRate\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingBlockSize\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PricingBlockSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingUnitDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingUnitDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceGroupName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceGroupName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDetails\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDetails\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuIsCreditEligible\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_SkuIsCreditEligible\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOfferId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOfferId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuPartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuPartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTerm\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTerm\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTier\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTier\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
"$fxv#1": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"BilledCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BilledCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeClass\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeClass\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountStatus\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountStatus\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ConsumedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ConsumedUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ConsumedUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ContractedUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ContractedUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"EffectiveCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceIssuerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceIssuerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"PricingQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProviderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProviderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PublisherName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PublisherName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"RegionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"RegionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuPriceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuPriceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Tags\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Tags\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountOwnerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountOwnerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRateDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRateDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ContractedCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ContractedCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostAllocationRuleName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostAllocationRuleName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceIssuerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceIssuerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ListCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_ListCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditApplied\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditApplied\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditRate\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingBlockSize\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PricingBlockSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingUnitDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingUnitDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceGroupName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceGroupName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDetails\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDetails\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuIsCreditEligible\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_SkuIsCreditEligible\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOfferId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOfferId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuPartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuPartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTerm\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTerm\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTier\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTier\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
- "$fxv#10": "0.7",
+ "$fxv#10": "0.8",
"$fxv#11": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nWrite-Output \"Updating settings.json file...\"\r\nWrite-Output \" Storage account: $env:storageAccountName\"\r\nWrite-Output \" Container: $env:containerName\"\r\n\r\n$validateScopes = { $_.Length -gt 45 }\r\n\r\n# Initialize variables\r\n$fileName = 'settings.json'\r\n$filePath = Join-Path -Path . -ChildPath $fileName\r\n$newScopes = $env:scopes.Split('|') | Where-Object $validateScopes | ForEach-Object { @{ scope = $_ } }\r\n\r\n# Get storage context\r\n$storageContext = @{\r\n Context = New-AzStorageContext -StorageAccountName $env:storageAccountName -UseConnectedAccount\r\n Container = $env:containerName\r\n}\r\n\r\n# Download existing settings, if they exist\r\n$blob = Get-AzStorageBlobContent @storageContext -Blob $fileName -Destination $filePath -Force\r\nif ($blob)\r\n{\r\n $text = Get-Content $filePath -Raw\r\n Write-Output \"---------\"\r\n Write-Output $text\r\n Write-Output \"---------\"\r\n $json = $text | ConvertFrom-Json\r\n Write-Output \"Existing settings.json file found. Updating...\"\r\n # Rename exportScopes to scopes + convert to object array\r\n if ($json.exportScopes)\r\n {\r\n Write-Output \" Updating exportScopes...\"\r\n if ($json.exportScopes[0] -is [string])\r\n {\r\n Write-Output \" Converting string array to object array...\"\r\n $json.exportScopes = $json.exportScopes | Where-Object $validateScopes | ForEach-Object { @{ scope = $_ } }\r\n if (-not ($json.exportScopes -is [array]))\r\n {\r\n Write-Output \" Converting single object to object array...\"\r\n $json.exportScopes = @($json.exportScopes)\r\n }\r\n }\r\n\r\n Write-Output \" Renaming to 'scopes'...\"\r\n $json | Add-Member -MemberType NoteProperty -Name scopes -Value $json.exportScopes\r\n $json.PSObject.Properties.Remove('exportScopes')\r\n }\r\n}\r\n\r\n# Set default if not found\r\nif (!$json)\r\n{\r\n Write-Output \"No existing settings.json file found. Creating new file...\"\r\n $json = [ordered]@{\r\n '$schema' = 'https://aka.ms/finops/hubs/settings-schema'\r\n type = 'HubInstance'\r\n version = ''\r\n learnMore = 'https://aka.ms/finops/hubs'\r\n scopes = @()\r\n retention = @{\r\n 'msexports' = @{\r\n days = 0\r\n }\r\n 'ingestion' = @{\r\n months = 13\r\n }\r\n 'raw' = @{\r\n days = 0\r\n }\r\n 'final' = @{\r\n months = 13\r\n }\r\n }\r\n }\r\n\r\n $text = $json | ConvertTo-Json\r\n Write-Output \"---------\"\r\n Write-Output $text\r\n Write-Output \"---------\"\r\n}\r\n\r\n# Set values from inputs\r\n$json.scopes = $env:scopes.Split('|') | ForEach-Object { @{ 'scope' = $_ } }\r\nif (!($json.retention))\r\n{\r\n # In case the retention object is not present in the settings.json file (versions before 0.4), add it with default values\r\n $retention = @\"\r\n {\r\n \"msexports\": {\r\n \"days\": 0\r\n },\r\n \"ingestion\": {\r\n \"months\": 13\r\n },\r\n \"raw\": {\r\n \"days\": 0\r\n },\r\n \"final\": {\r\n \"months\": 13\r\n }\r\n }\r\n\"@\r\n $json | Add-Member -Name retention -Value (ConvertFrom-Json $retention) -MemberType NoteProperty\r\n}\r\n\r\n# Set or update msexports retention\r\nif (!($json.retention.msexports))\r\n{\r\n $json.retention | Add-Member -Name msexports -Value (ConvertFrom-Json \"{\"\"days\"\":$($env:msexportRetentionInDays)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.msexports.days = [Int32]::Parse($env:msexportRetentionInDays)\r\n}\r\n\r\n# Set or update ingestion retention\r\nif (!($json.retention.ingestion))\r\n{\r\n $json.retention | Add-Member -Name ingestion -Value (ConvertFrom-Json \"{\"\"months\"\":$($env:ingestionRetentionInMonths)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.ingestion.months = [Int32]::Parse($env:ingestionRetentionInMonths)\r\n}\r\n\r\n# Set or update raw retention\r\nif (!($json.retention.raw))\r\n{\r\n $json.retention | Add-Member -Name raw -Value (ConvertFrom-Json \"{\"\"days\"\":$($env:rawRetentionInDays)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.raw.days = [Int32]::Parse($env:rawRetentionInDays)\r\n}\r\n\r\n# Set or update final retention\r\nif (!($json.retention.final))\r\n{\r\n $json.retention | Add-Member -Name final -Value (ConvertFrom-Json \"{\"\"months\"\":$($env:finalRetentionInMonths)}\") -MemberType NoteProperty\r\n}\r\nelse\r\n{\r\n $json.retention.final.months = [Int32]::Parse($env:finalRetentionInMonths)\r\n}\r\n\r\n# Updating settings\r\nWrite-Output \"Updating version to $env:ftkVersion...\"\r\n$json.version = $env:ftkVersion\r\nif ($newScopes)\r\n{\r\n Write-Output \"Merging $($newScopes.Count) scopes...\"\r\n $json.scopes = Compare-Object -ReferenceObject $json.scopes -DifferenceObject $newScopes -Property scope -PassThru -IncludeEqual\r\n\r\n # Remove the SideIndicator property from the Compare-Object output\r\n $json.scopes | ForEach-Object { $_.PSObject.Properties.Remove('SideIndicator') } | ConvertTo-Json\r\n\r\n if (-not ($json.scopes -is [array]))\r\n {\r\n $json.scopes = @($json.scopes)\r\n }\r\n Write-Output \"$($json.scopes.Count) scopes found.\"\r\n}\r\n$text = $json | ConvertTo-Json\r\nWrite-Output \"---------\"\r\nWrite-Output $text\r\nWrite-Output \"---------\"\r\n$text | Out-File $filePath\r\n\r\n# Upload new/updated settings\r\nWrite-Output \"Uploading settings.json file...\"\r\nSet-AzStorageBlobContent @storageContext -File $filePath -Force | Out-Null\r\n\r\n# Save focusSchemaFile file to storage\r\n$schemaFiles = $env:schemaFiles | ConvertFrom-Json -Depth 10\r\nWrite-Output \"Uploading ${$schemaFiles.PSObject.Properties.Count} schema files...\"\r\n$schemaFiles.PSObject.Properties | ForEach-Object {\r\n $fileName = \"$($_.Name).json\"\r\n $tempPath = \"./$fileName\"\r\n Write-Output \" Uploading $($_.Name).json...\"\r\n $_.Value | Out-File $tempPath\r\n Set-AzStorageBlobContent @storageContext -File $tempPath -Blob \"schemas/$fileName\" -Force | Out-Null\r\n}\r\n",
"$fxv#2": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"AvailabilityZone\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"AvailabilityZone\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BilledCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BilledCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"BillingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BillingPeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"BillingPeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeFrequency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeFrequency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"ChargePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ChargeSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ChargeSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CommitmentDiscountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CommitmentDiscountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"EffectiveCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"InvoiceIssuerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"InvoiceIssuerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ListUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"ListUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"PricingQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PricingUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PricingUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProviderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProviderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PublisherName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PublisherName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Region\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Region\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuPriceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuPriceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SubAccountType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SubAccountType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Tags\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Tags\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UsageQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"UsageQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UsageUnit\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"UsageUnit\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_AccountOwnerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_AccountOwnerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BilledUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BilledUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingAccountName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingAccountName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingExchangeRateDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_BillingExchangeRateDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_BillingProfileName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_BillingProfileName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ChargeId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ChargeId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostAllocationRuleName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostAllocationRuleName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CostCenter\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CostCenter\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_CustomerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_CustomerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_EffectiveUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_EffectiveUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceIssuerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceIssuerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_InvoiceSectionName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_InvoiceSectionName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_OnDemandCost\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_OnDemandCost\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_OnDemandCostInUsd\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_OnDemandCostInUsd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_OnDemandUnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_OnDemandUnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditApplied\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditApplied\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PartnerCreditRate\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PartnerCreditRate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingBlockSize\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"x_PricingBlockSize\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingCurrency\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingCurrency\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PricingUnitDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PricingUnitDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_PublisherId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_PublisherId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResellerName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResellerName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceGroupName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceGroupName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ResourceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_ResourceType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodEnd\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodEnd\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_ServicePeriodStart\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"x_ServicePeriodStart\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDescription\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDescription\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuDetails\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuDetails\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuIsCreditEligible\", \"type\": \"Boolean\" },\r\n \"sink\": { \"name\": \"x_SkuIsCreditEligible\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuMeterSubcategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuMeterSubcategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOfferId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOfferId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderId\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderId\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuOrderName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuOrderName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuPartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuPartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTerm\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTerm\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"x_SkuTier\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"x_SkuTier\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
"$fxv#3": "{\r\n \"additionalColumns\": [],\r\n \"translator\": {\r\n \"type\": \"TabularTranslator\",\r\n \"mappings\": [\r\n {\r\n \"source\": { \"name\": \"EnrollmentNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"EnrollmentNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterName\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterName\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterType\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterSubCategory\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterSubCategory\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ServiceFamily\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ServiceFamily\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Product\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Product\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"SkuID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"SkuID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"ProductID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"ProductID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MeterRegion\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"MeterRegion\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UnitOfMeasure\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"UnitOfMeasure\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PartNumber\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PartNumber\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveStartDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EffectiveStartDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"EffectiveEndDate\", \"type\": \"DateTimeOffset\" },\r\n \"sink\": { \"name\": \"EffectiveEndDate\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"UnitPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"UnitPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"BasePrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"BasePrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"MarketPrice\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"MarketPrice\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"CurrencyCode\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"CurrencyCode\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"IncludedQuantity\", \"type\": \"Decimal\" },\r\n \"sink\": { \"name\": \"IncludedQuantity\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"OfferID\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"OfferID\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"Term\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"Term\" }\r\n },\r\n {\r\n \"source\": { \"name\": \"PriceType\", \"type\": \"String\" },\r\n \"sink\": { \"name\": \"PriceType\" }\r\n }\r\n ]\r\n }\r\n}\r\n",
@@ -1025,10 +1033,11 @@
"name": "[parameters('sku')]"
},
"kind": "BlockBlobStorage",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/storageAccounts'), parameters('tagsByResource')['Microsoft.Storage/storageAccounts'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/storageAccounts'), createObject()))]",
"properties": "[union(if(not(parameters('enableInfrastructureEncryption')), createObject(), createObject('encryption', createObject('keySource', 'Microsoft.Storage', 'requireInfrastructureEncryption', parameters('enableInfrastructureEncryption')))), createObject('supportsHttpsTrafficOnly', true(), 'allowSharedKeyAccess', true(), 'isHnsEnabled', true(), 'minimumTlsVersion', 'TLS1_2', 'allowBlobPublicAccess', false(), 'publicNetworkAccess', 'Enabled', 'networkAcls', createObject('bypass', 'AzureServices', 'defaultAction', if(parameters('enablePublicAccess'), 'Allow', 'Deny'))))]"
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('scriptStorageAccountName')]",
@@ -1037,7 +1046,7 @@
"name": "Standard_LRS"
},
"kind": "StorageV2",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/storageAccounts'), parameters('tagsByResource')['Microsoft.Storage/storageAccounts'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/storageAccounts'), createObject()))]",
"properties": {
"supportsHttpsTrafficOnly": true,
"allowSharedKeyAccess": true,
@@ -1058,43 +1067,48 @@
}
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2024-06-01",
"name": "[format('privatelink.blob.{0}', environment().suffixes.storage)]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), parameters('tagsByResource')['Microsoft.Storage/privateDnsZones'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
"properties": {}
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2024-06-01",
"name": "[format('privatelink.dfs.{0}', environment().suffixes.storage)]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), parameters('tagsByResource')['Microsoft.Storage/privateDnsZones'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
"properties": {}
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2024-06-01",
"name": "[format('privatelink.queue.{0}', environment().suffixes.storage)]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), parameters('tagsByResource')['Microsoft.Storage/privateDnsZones'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
"properties": {}
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2024-06-01",
"name": "[format('privatelink.table.{0}', environment().suffixes.storage)]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), parameters('tagsByResource')['Microsoft.Storage/privateDnsZones'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Storage/privateDnsZones'), createObject()))]",
"properties": {}
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2024-06-01",
"name": "[format('{0}/{1}', format('privatelink.blob.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.blob.{0}', environment().suffixes.storage), '.', '-')))]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones/virtualNetworkLinks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
"properties": {
"registrationEnabled": false,
"virtualNetwork": {
@@ -1106,11 +1120,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2024-06-01",
"name": "[format('{0}/{1}', format('privatelink.dfs.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.dfs.{0}', environment().suffixes.storage), '.', '-')))]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones/virtualNetworkLinks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
"properties": {
"registrationEnabled": false,
"virtualNetwork": {
@@ -1122,11 +1137,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2024-06-01",
"name": "[format('{0}/{1}', format('privatelink.queue.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.queue.{0}', environment().suffixes.storage), '.', '-')))]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones/virtualNetworkLinks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
"properties": {
"registrationEnabled": false,
"virtualNetwork": {
@@ -1138,11 +1154,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2024-06-01",
"name": "[format('{0}/{1}', format('privatelink.table.{0}', environment().suffixes.storage), format('{0}-link', replace(format('privatelink.table.{0}', environment().suffixes.storage), '.', '-')))]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones/virtualNetworkLinks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
"properties": {
"registrationEnabled": false,
"virtualNetwork": {
@@ -1154,11 +1171,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2023-11-01",
"name": "[format('{0}-blob-ep', variables('storageAccountName'))]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), parameters('tagsByResource')['Microsoft.Network/privateEndpoints'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
"properties": {
"subnet": {
"id": "[parameters('privateEndpointSubnetId')]"
@@ -1180,11 +1198,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2023-11-01",
"name": "[format('{0}-blob-ep', variables('scriptStorageAccountName'))]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), parameters('tagsByResource')['Microsoft.Network/privateEndpoints'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
"properties": {
"subnet": {
"id": "[parameters('privateEndpointSubnetId')]"
@@ -1206,11 +1225,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2023-11-01",
"name": "[format('{0}-dfs-ep', variables('storageAccountName'))]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), parameters('tagsByResource')['Microsoft.Network/privateEndpoints'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
"properties": {
"subnet": {
"id": "[parameters('privateEndpointSubnetId')]"
@@ -1232,6 +1252,7 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2023-11-01",
"name": "[format('{0}/{1}', format('{0}-blob-ep', variables('storageAccountName')), 'storage-endpoint-zone')]",
@@ -1251,6 +1272,7 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2023-11-01",
"name": "[format('{0}/{1}', format('{0}-dfs-ep', variables('storageAccountName')), 'dfs-endpoint-zone')]",
@@ -1270,6 +1292,7 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2023-11-01",
"name": "[format('{0}/{1}', format('{0}-blob-ep', variables('scriptStorageAccountName')), 'blob-endpoint-zone')]",
@@ -1336,7 +1359,7 @@
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2023-01-31",
"name": "[format('{0}_blobManager', variables('storageAccountName'))]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), parameters('tagsByResource')['Microsoft.ManagedIdentity/userAssignedIdentities'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), createObject()))]",
"location": "[parameters('location')]"
},
{
@@ -1363,67 +1386,14 @@
"name": "[format('{0}_uploadSettings', variables('storageAccountName'))]",
"kind": "AzurePowerShell",
"location": "[if(startsWith(parameters('location'), 'china'), 'chinaeast2', parameters('location'))]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), parameters('tagsByResource')['Microsoft.Resources/deploymentScripts'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_blobManager', variables('storageAccountName'))))]": {}
}
},
- "properties": {
- "azPowerShellVersion": "9.0",
- "retentionInterval": "PT1H",
- "environmentVariables": [
- {
- "name": "ftkVersion",
- "value": "[variables('$fxv#10')]"
- },
- {
- "name": "scopes",
- "value": "[join(parameters('scopesToMonitor'), '|')]"
- },
- {
- "name": "msexportRetentionInDays",
- "value": "[string(parameters('msexportRetentionInDays'))]"
- },
- {
- "name": "ingestionRetentionInMonths",
- "value": "[string(parameters('ingestionRetentionInMonths'))]"
- },
- {
- "name": "rawRetentionInDays",
- "value": "[string(parameters('rawRetentionInDays'))]"
- },
- {
- "name": "finalRetentionInMonths",
- "value": "[string(parameters('finalRetentionInMonths'))]"
- },
- {
- "name": "storageAccountName",
- "value": "[variables('storageAccountName')]"
- },
- {
- "name": "containerName",
- "value": "config"
- },
- {
- "name": "schemaFiles",
- "value": "[string(variables('schemaFiles'))]"
- }
- ],
- "scriptContent": "[variables('$fxv#11')]",
- "storageAccountSettings": {
- "storageAccountName": "[variables('scriptStorageAccountName')]"
- },
- "containerSettings": {
- "containerGroupName": "[format('{0}cg', variables('scriptStorageAccountName'))]",
- "subnetIds": [
- {
- "id": "[parameters('scriptSubnetId')]"
- }
- ]
- }
- },
+ "properties": "[union(if(parameters('enablePublicAccess'), createObject(), createObject('storageAccountSettings', createObject('storageAccountName', variables('scriptStorageAccountName')), 'containerSettings', createObject('containerGroupName', format('{0}cg', variables('scriptStorageAccountName')), 'subnetIds', createArray(createObject('id', parameters('scriptSubnetId')))))), createObject('azPowerShellVersion', '9.0', 'retentionInterval', 'PT1H', 'environmentVariables', createArray(createObject('name', 'ftkVersion', 'value', variables('$fxv#10')), createObject('name', 'scopes', 'value', join(parameters('scopesToMonitor'), '|')), createObject('name', 'msexportRetentionInDays', 'value', string(parameters('msexportRetentionInDays'))), createObject('name', 'ingestionRetentionInMonths', 'value', string(parameters('ingestionRetentionInMonths'))), createObject('name', 'rawRetentionInDays', 'value', string(parameters('rawRetentionInDays'))), createObject('name', 'finalRetentionInMonths', 'value', string(parameters('finalRetentionInMonths'))), createObject('name', 'storageAccountName', 'value', variables('storageAccountName')), createObject('name', 'containerName', 'value', 'config'), createObject('name', 'schemaFiles', 'value', string(variables('schemaFiles')))), 'scriptContent', variables('$fxv#11')))]",
"dependsOn": [
"[resourceId('Microsoft.Network/privateEndpoints', format('{0}-blob-ep', variables('storageAccountName')))]",
"[resourceId('Microsoft.Network/privateEndpoints/privateDnsZoneGroups', format('{0}-blob-ep', variables('storageAccountName')), 'storage-endpoint-zone')]",
@@ -1490,10 +1460,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'vnet')]"
+ "vnet"
]
},
- {
+ "dataExplorer": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -1513,6 +1483,9 @@
"clusterCapacity": {
"value": "[parameters('dataExplorerCapacity')]"
},
+ "clusterTrustedExternalTenants": {
+ "value": "[parameters('dataExplorerTrustedExternalTenants')]"
+ },
"location": {
"value": "[parameters('location')]"
},
@@ -1528,27 +1501,24 @@
"rawRetentionInDays": {
"value": "[parameters('dataExplorerRawRetentionInDays')]"
},
- "virtualNetworkId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value]"
- },
- "privateEndpointSubnetId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.dataExplorerSubnetId.value]"
- },
+ "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.vNetId.value))]",
+ "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.dataExplorerSubnetId.value))]",
"enablePublicAccess": {
"value": "[parameters('enablePublicAccess')]"
},
"storageAccountName": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.value]"
+ "value": "[reference('storage').outputs.name.value]"
}
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "17413093305589876592"
+ "version": "0.33.93.31351",
+ "templateHash": "4937657351857252728"
}
},
"parameters": {
@@ -1641,6 +1611,16 @@
"description": "Optional. Number of nodes to use in the cluster. Allowed values: 1 for the Basic SKU tier and 2-1000 for Standard. Default: 1 for dev/test SKUs, 2 for standard SKUs."
}
},
+ "clusterTrustedExternalTenants": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "defaultValue": [],
+ "metadata": {
+ "description": "Optional. Array of external tenant IDs that should have access to the cluster. Default: empty (no external access)."
+ }
+ },
"forceUpdateTag": {
"type": "string",
"defaultValue": "[utcNow()]",
@@ -1715,11 +1695,16 @@
}
},
"variables": {
- "$fxv#0": "0.7",
- "$fxv#1": "//======================================================================================================================\r\n// Common utility functions\r\n//\r\n// TIP: Use Ctrl+K,Ctrl+0 to collapse all regions in VS Code\r\n//======================================================================================================================\r\n\r\n\r\n//===| Date functions |=================================================================================================\r\n\r\n// daterange\r\n.create-or-alter function \r\nwith (docstring = @'Converts 2 dates into a simple, user-friendly date range (e.g. Jan 1-Jan 3)', folder =@'Common') \r\ndaterange(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n let month = (d: datetime) { let mo = toint(substring(d, 5, 2)) - 1; dynamic(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[mo] };\r\n let day = (d: datetime) { toint(substring(d, 8, 2)) };\r\n let endDate = iff(end == datetime('0001-01-01'), start, end);\r\n let sameDay = startofday(start) == startofday(endDate);\r\n let sameMonth = startofmonth(start) == startofmonth(endDate);\r\n strcat(month(start), ' ', day(start), iff(sameDay, '', strcat('-', iff(sameMonth, '', strcat(month(endDate), ' ')), day(endDate))))\r\n}\r\n\r\n// monthsago\r\n.create-or-alter function \r\nwith (docstring = 'Gets the date that is the specified number of months ago', folder = 'Common')\r\nmonthsago(months: int)\r\n{\r\n datetime_add('month', -months, startofmonth(now()))\r\n}\r\n\r\n\r\n//===| Number comparisons |=============================================================================================\r\n// NOTE: Must be defined before string converters\r\n\r\n// delta\r\n.create-or-alter function \r\nwith (docstring = @'Compares 2 values and returns the percentage change from oldval to newval', folder =@'Common') \r\ndelta(oldval: double, newval: double)\r\n{\r\n (newval - todouble(oldval))/oldval\r\n}\r\n\r\n// percentOfTotal\r\n// NOTE: Must be before percent() function\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercentOfTotal(t: (Count: long), tot: long)\r\n{\r\n let total = todouble(tot);\r\n t \r\n | extend Percent = round(Count / total * 100, 3) \r\n | order by Count desc\r\n}\r\n\r\n// percent\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercent(t: (Count: long))\r\n{\r\n let total = todouble(toscalar(t | summarize sum(Count)));\r\n percentOfTotal(t, total)\r\n}\r\n\r\n// plusminus\r\n.create-or-alter function \r\nwith (docstring = 'Shows a +/- sign based on the direction of the number', folder = 'Common')\r\nplusminus(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, val, strcat('+', val))\r\n}\r\n\r\n// updown\r\n.create-or-alter function \r\nwith (docstring = 'Shows an up/down arrow based on the direction of the number', folder = 'Common')\r\nupdown(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, strcat('β', substring(val, 1)), strcat('β', val))\r\n}\r\n\r\n\r\n//===| String comparisons |=============================================================================================\r\n\r\n// percentstring\r\n// NOTE: Must be defined before deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a percentage and render as a string', folder = 'Common')\r\npercentstring(num: double, total: double = 1.0, places: int = 9)\r\n{\r\n let value = 1.0 * num / total * 100;\r\n strcat(case(\r\n places != 9, round(value, places),\r\n value < 10, round(value, 2),\r\n round(value, 1)\r\n ), '%')\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// arraystring\r\n.create-or-alter function \r\nwith (docstring = 'Convert an array to a comma-delimited string', folder = 'Common')\r\narraystring(arr: dynamic)\r\n{\r\n replace_string(replace_regex(replace_regex(replace_regex(replace_regex(replace_regex(\r\n tostring(arr)\r\n , @'^\\[\"', '')\r\n , @'\"\\]$', '')\r\n , @'^, ', '')\r\n , @', $', '')\r\n , @'^\\[]$', '')\r\n , '\",\"', ', ')\r\n}\r\n\r\n// deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a delta percentage and render as a string', folder = 'Common')\r\ndeltastring(oldval: double, newval: double, places: int = 1, useArrows: bool = false)\r\n{\r\n let d = delta(oldval, newval);\r\n strcat(case(useArrows and d > 0, 'β', useArrows and d < 0, 'β', d < 0, '-', ''), percentstring(abs(d), 1, places))\r\n}\r\n\r\n// diffstring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate the difference and render as a string', folder = 'Common')\r\ndiffstring(oldval: double, newval: double, places: int = 1)\r\n{\r\n plusminus(round(newval - oldval, places))\r\n}\r\n\r\n// numberstring\r\n.create-or-alter function \r\nwith (docstring = 'Convert a number to a string', folder = 'Common')\r\nnumberstring(num: long, abbrev: bool = true)\r\n{\r\n case(\r\n num >= 10000000000000, strcat(round(1.0 * num / 1000000000000, 1), 'T'),\r\n num >= 1000000000000, strcat(round(1.0 * num / 1000000000000, 2), 'T'),\r\n num >= 10000000000, strcat(round(1.0 * num / 1000000000, 1), 'B'),\r\n num >= 1000000000, strcat(round(1.0 * num / 1000000000, 2), 'B'),\r\n num >= 10000000, strcat(round(1.0 * num / 1000000, 1), 'M'),\r\n num >= 1000000, strcat(round(1.0 * num / 1000000, 2), 'M'),\r\n num >= 10000, strcat(round(1.0 * num / 1000, 1), 'K'),\r\n // Kusto doesn't support back-refs yet -- num > 1000, replace_regex(tostring(num), @'(\\d)(?=(\\d{3})+\\.)', @'\\1,'), // See https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/re2-library\r\n num > 1000, replace_regex(tostring(num), @'([0-9]{3})$', @',\\1'), //num / 1000, ',', substring(tostring(num), 0) - (num / 1000 * 1000)),\r\n tostring(num))\r\n}\r\n\r\n\r\n//===| Other |==========================================================================================================\r\n\r\n// ifempty\r\n.create-or-alter function \r\nwith (docstring = 'Replaces an empty value with the specified default value', folder = 'Common')\r\nifempty(val: dynamic, defaultVal: dynamic)\r\n{\r\n iff(isempty(val), defaultVal, val)\r\n}\r\n",
- "$fxv#2": "//======================================================================================================================\r\n// Ingestion database\r\n// Used for data ingestion, normalization, and cleansing.\r\n//\r\n// Data ingestion workflow:\r\n// - All data is ingested into tables named \"*_raw\". These tables have a union schema to support multiple sources and versions.\r\n// - All data is transformed to the latest FOCUS schema using an update policy into a table named after the version (e.g., \"1.0\" = \"_v1_0\").\r\n// - Data ingestion from previous version of hubs will remain in the versioned tables.\r\n// - Data is read from versioned functions in the Hub database. See HubSetup.kql for details.\r\n//\r\n// To add a new FOCUS versions:\r\n// 1. Add new columns to the *_raw tables per dataset\r\n// 2. Add new *_final_vX_Y tables per dataset\r\n// 3. Add new *_transform_vX_Y functions per dataset\r\n// 4. Change the update policy for the *_raw tables to use the new transform functions\r\n// 5. Update HubSetup.kql to read from the new *_final_vX_Y tables\r\n//======================================================================================================================\r\n\r\n// For allowed commands, see https://learn.microsoft.com/azure/data-explorer/database-script\r\n\r\n//===| Settings |=======================================================================================================\r\n\r\n.create-merge table HubSettingsLog (\r\n version: string,\r\n scopes: dynamic,\r\n retention: dynamic\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// HubSettings function\r\n.create-or-alter function\r\nwith (docstring='Gets the latest version of hub settings.', folder='Settings')\r\nHubSettings()\r\n{\r\n HubSettingsLog\r\n | extend timestamp = ingestion_time()\r\n | summarize arg_max(timestamp, *)\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// HubScopes function\r\n.create-or-alter function\r\nwith (docstring='Gets the currently configured scopes.', folder='Settings')\r\nHubScopes()\r\n{\r\n HubSettings\r\n | project scopes\r\n | mv-expand scopes\r\n}\r\n\r\n\r\n//===| Open data |======================================================================================================\r\n\r\n// PricingUnits\r\n.create-merge table PricingUnits ( \r\n x_PricingUnitDescription: string,\r\n x_PricingBlockSize: decimal,\r\n PricingUnit: string\r\n)\r\n\r\n// Regions\r\n.create-merge table Regions(\r\n ResourceLocation: string,\r\n RegionId: string,\r\n RegionName: string\r\n)\r\n\r\n// ResourceTypes\r\n.create-merge table ResourceTypes(\r\n x_ResourceType: string,\r\n SingularDisplayName: string,\r\n PluralDisplayName: string,\r\n LowerSingularDisplayName: string,\r\n LowerPluralDisplayName: string,\r\n IsPreview: bool,\r\n Description: string,\r\n IconUri: string\r\n)\r\n\r\n// Services\r\n.create-merge table Services(\r\n x_ConsumedService: string,\r\n x_ResourceType: string,\r\n ServiceName: string,\r\n ServiceCategory: string,\r\n ServiceSubcategory: string,\r\n PublisherName: string,\r\n x_PublisherCategory: string,\r\n x_Environment: string,\r\n x_ServiceModel: string\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// parse_resourceid\r\n.create-or-alter function \r\nwith (docstring = 'Parses an Azure resource ID to extract resource attributes like the name, type, resource group, and subaccount ID.', folder = 'Common')\r\nparse_resourceid(resourceId: string) {\r\n let ResourceId = tolower(resourceId);\r\n // let ResourceId = tolower('/providers/Microsoft.BillingBenefits/savingsPlanOrders/2d2e284b-0638-427e-b8c6-1b874d4f17c8/sp/xxx');\r\n let SubAccountId = tostring(extract('/subscriptions/[^/]+', 1, ResourceId));\r\n let x_ResourceGroupName = tostring(extract('/resourcegroups/[^/]+', 1, ResourceId));\r\n let providerPath = iff(ResourceId !contains '/providers/', '', split(iff(ResourceId startswith '/subscriptions/', strcat('/providers/microsoft.resources/', ResourceId), ResourceId), '/providers/')[-1]);\r\n let x_ResourceProvider = iff(isempty(providerPath), '', split(providerPath, '/')[0]);\r\n let tmp_ResourceProviderPath = iff(isempty(providerPath), '', substring(providerPath, strlen(x_ResourceProvider) + 1));\r\n let segments = split(tmp_ResourceProviderPath, '/');\r\n let ResourceName = trim(@'/+', replace_string(strcat_array(array_iff(\r\n dynamic([false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]),\r\n segments, dynamic([])), '/'), '//', '/'));\r\n let x_ResourceTypePath = trim(@'/+', replace_string(strcat_array(array_iff(\r\n dynamic([true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false]),\r\n segments, dynamic([])), '/'), '//', '/'));\r\n let xRT = iff(isempty(x_ResourceProvider) or isempty(x_ResourceTypePath), '', strcat(x_ResourceProvider, '/', x_ResourceTypePath));\r\n let types = split(toscalar(database('Ingestion').ResourceTypes | summarize types = make_set(strcat(x_ResourceType, '=', SingularDisplayName)) | extend types = strcat('||', strcat_array(types, '||')), '||'), strcat('||', xRT, '='));\r\n let ResourceType = iff(array_length(types) < 2, '', split(types[1], '||')[0]);\r\n bag_pack('ResourceId', ResourceId, 'ResourceName', ResourceName, 'ResourceType', coalesce(ResourceType, xRT), 'SubAccountId', SubAccountId, 'x_ResourceGroupName', x_ResourceGroupName, 'x_ResourceProvider', x_ResourceProvider, 'x_ResourceType', xRT)\r\n}\r\n\r\n\r\n//===| Prices |=========================================================================================================\r\n// NOTE: Must be before cost details.\r\n//\r\n// Supported versions:\r\n// - MS EA 2023-05-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/price-sheet-ea\r\n// - MS MCA 2023-05-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/price-sheet-mca\r\n//======================================================================================================================\r\n\r\n// Prices_raw table\r\n.create-merge table Prices_raw (\r\n BasePrice: decimal, // Azure EA + MCA\r\n BillingAccountId: string, // Azure MCA\r\n BillingAccountName: string, // Azure MCA\r\n BillingCurrency: string, // Azure MCA\r\n BillingProfileId: string, // Azure MCA\r\n BillingProfileName: string, // Azure MCA\r\n Currency: string, // Azure MCA\r\n CurrencyCode: string, // Azure EA \r\n EffectiveEndDate: datetime, // Azure MCA\r\n EffectiveStartDate: datetime, // Azure EA + MCA\r\n EnrollmentNumber: string, // Azure EA \r\n IncludedQuantity: decimal, // Azure EA \r\n MarketPrice: decimal, // Azure EA + MCA\r\n MeterCategory: string, // Azure EA + MCA\r\n MeterId: string, // Azure MCA\r\n MeterID: string, // Azure EA \r\n MeterName: string, // Azure EA + MCA\r\n MeterRegion: string, // Azure EA + MCA\r\n MeterSubCategory: string, // Azure EA + MCA\r\n MeterType: string, // Azure EA + MCA\r\n OfferID: string, // Azure EA \r\n PartNumber: string, // Azure EA\r\n PriceType: string, // Azure EA + MCA\r\n Product: string, // Azure EA + MCA\r\n ProductId: string, // Azure MCA\r\n ProductID: string, // Azure EA \r\n ServiceFamily: string, // Azure EA + MCA\r\n SkuId: string, // Azure MCA\r\n SkuID: string, // Azure EA\r\n Term: string, // Azure EA + MCA\r\n TierMinimumUnits: decimal, // Azure MCA\r\n UnitOfMeasure: string, // Azure EA + MCA\r\n UnitPrice: decimal, // Azure EA + MCA\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Prices_raw ingestion mapping\r\n.create-or-alter table Prices_raw ingestion parquet mapping \"Prices_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"BasePrice\", \"Properties\": { \"Field\": \"BasePrice\" } },\r\n { \"Column\": \"BillingAccountId\", \"Properties\": { \"Field\": \"BillingAccountId\" } },\r\n { \"Column\": \"BillingAccountName\", \"Properties\": { \"Field\": \"BillingAccountName\" } },\r\n { \"Column\": \"BillingCurrency\", \"Properties\": { \"Field\": \"BillingCurrency\" } },\r\n { \"Column\": \"BillingProfileId\", \"Properties\": { \"Field\": \"BillingProfileId\" } },\r\n { \"Column\": \"BillingProfileName\", \"Properties\": { \"Field\": \"BillingProfileName\" } },\r\n { \"Column\": \"Currency\", \"Properties\": { \"Field\": \"Currency\" } },\r\n { \"Column\": \"CurrencyCode\", \"Properties\": { \"Field\": \"CurrencyCode\" } },\r\n { \"Column\": \"EffectiveEndDate\", \"Properties\": { \"Field\": \"EffectiveEndDate\" } },\r\n { \"Column\": \"EffectiveStartDate\", \"Properties\": { \"Field\": \"EffectiveStartDate\" } },\r\n { \"Column\": \"EnrollmentNumber\", \"Properties\": { \"Field\": \"EnrollmentNumber\" } },\r\n { \"Column\": \"IncludedQuantity\", \"Properties\": { \"Field\": \"IncludedQuantity\" } },\r\n { \"Column\": \"MarketPrice\", \"Properties\": { \"Field\": \"MarketPrice\" } },\r\n { \"Column\": \"MeterCategory\", \"Properties\": { \"Field\": \"MeterCategory\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"MeterID\", \"Properties\": { \"Field\": \"MeterID\" } },\r\n { \"Column\": \"MeterName\", \"Properties\": { \"Field\": \"MeterName\" } },\r\n { \"Column\": \"MeterRegion\", \"Properties\": { \"Field\": \"MeterRegion\" } },\r\n { \"Column\": \"MeterSubCategory\", \"Properties\": { \"Field\": \"MeterSubCategory\" } },\r\n { \"Column\": \"MeterType\", \"Properties\": { \"Field\": \"MeterType\" } },\r\n { \"Column\": \"OfferID\", \"Properties\": { \"Field\": \"OfferID\" } },\r\n { \"Column\": \"PartNumber\", \"Properties\": { \"Field\": \"PartNumber\" } },\r\n { \"Column\": \"PriceType\", \"Properties\": { \"Field\": \"PriceType\" } },\r\n { \"Column\": \"Product\", \"Properties\": { \"Field\": \"Product\" } },\r\n { \"Column\": \"ProductId\", \"Properties\": { \"Field\": \"ProductId\" } },\r\n { \"Column\": \"ProductID\", \"Properties\": { \"Field\": \"ProductID\" } },\r\n { \"Column\": \"ServiceFamily\", \"Properties\": { \"Field\": \"ServiceFamily\" } },\r\n { \"Column\": \"SkuId\", \"Properties\": { \"Field\": \"SkuId\" } },\r\n { \"Column\": \"SkuID\", \"Properties\": { \"Field\": \"SkuID\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TierMinimumUnits\", \"Properties\": { \"Field\": \"TierMinimumUnits\" } },\r\n { \"Column\": \"UnitOfMeasure\", \"Properties\": { \"Field\": \"UnitOfMeasure\" } },\r\n { \"Column\": \"UnitPrice\", \"Properties\": { \"Field\": \"UnitPrice\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Prices_raw retention policy\r\n.alter-merge table Prices_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Prices_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='Transforms Prices_raw into FOCUS 1.0.', folder='Prices')\r\nPrices_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n let prices = materialize(\r\n Prices_raw\r\n | extend x_SkuId = coalesce(SkuId, SkuID)\r\n | extend x_SkuMeterId = coalesce(MeterId, MeterID)\r\n | extend x_SkuProductId = coalesce(ProductId, ProductID)\r\n | extend x_SkuTerm = isoMonths(Term)\r\n | project-rename\r\n x_BaseUnitPrice = BasePrice,\r\n x_EffectivePeriodEnd = EffectiveEndDate,\r\n x_EffectivePeriodStart = EffectiveStartDate,\r\n x_PricingUnitDescription = UnitOfMeasure,\r\n x_SkuIncludedQuantity = IncludedQuantity,\r\n x_SkuMeterCategory = MeterCategory,\r\n x_SkuMeterName = MeterName,\r\n x_SkuMeterSubcategory = MeterSubCategory,\r\n x_SkuMeterType = MeterType,\r\n x_SkuOfferId = OfferID,\r\n x_SkuPartNumber = PartNumber,\r\n x_SkuPriceType = PriceType,\r\n x_SkuRegion = MeterRegion,\r\n x_SkuServiceFamily = ServiceFamily,\r\n x_SkuTier = TierMinimumUnits\r\n | extend ContractedUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', UnitPrice, todecimal('')) // UnitPrice for savings plan is not the on-demand unit price\r\n | extend ListUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', MarketPrice, todecimal('')) // MarketPrice for savings plan is not the list price\r\n | extend ChargeCategory = case(\r\n x_SkuPriceType == 'Consumption', 'Usage',\r\n x_SkuPriceType == 'ReservedInstance', 'Purchase',\r\n x_SkuPriceType == 'SavingsPlan', 'Usage', // Savings plan prices are for committed usage, not the purchase\r\n ''\r\n )\r\n | extend SkuPriceIdv2 = strcat(case(x_SkuPriceType == 'Consumption', 'OD', x_SkuPriceType == 'ReservedInstance', 'RI', x_SkuPriceType == 'SavingsPlan', 'SP', 'XX'), substring(ChargeCategory, 0, 1), x_SkuTerm, '_', x_SkuProductId, '_', x_SkuId, '_', x_SkuMeterType, '_', x_SkuTier, x_SkuOfferId)\r\n | extend x_BillingAccountId = iff(BillingAccountId startswith '/', split(BillingAccountId, '/')[-1], coalesce(BillingAccountId, EnrollmentNumber))\r\n | extend x_BillingProfileId = iff(BillingProfileId startswith '/', split(BillingProfileId, '/')[-1], coalesce(BillingProfileId, EnrollmentNumber))\r\n | extend tmp_SavingsPlanKey = strcat(x_SkuMeterId, x_SkuProductId, x_SkuId, x_SkuTier, x_SkuOfferId)\r\n //\r\n // Get latest ingested row based on the unique ID\r\n | extend x_IngestionTime = ingestion_time()\r\n );\r\n //\r\n // Meters for reservations and savings plans to identify commitment eligibility\r\n let riMeters = prices | where x_SkuPriceType == 'ReservedInstance' | distinct x_SkuMeterId;\r\n let spMeters = prices | where x_SkuPriceType == 'SavingsPlan' | distinct x_SkuMeterId;\r\n // \r\n // Copy list/base/contracted prices from on-demand SKUs\r\n prices\r\n | where x_SkuPriceType == 'SavingsPlan'\r\n // If we use join, specify the shuffle key\r\n // TODO: Compare join vs. lookup perf -- | join kind=leftouter hint.strategy=shuffle (prices | where x_SkuPriceType == 'Consumption' | where x_SkuMeterId in (spMeters) | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey\r\n | lookup kind=leftouter (prices | where x_SkuPriceType == 'Consumption' | where x_SkuMeterId in (spMeters) | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey\r\n | extend ListUnitPrice = coalesce(ListUnitPrice, ListUnitPrice1)\r\n | extend ContractedUnitPrice = coalesce(ContractedUnitPrice, ContractedUnitPrice1)\r\n | extend x_BaseUnitPrice = coalesce(x_BaseUnitPrice, x_BaseUnitPrice1)\r\n | project-away ListUnitPrice1, ContractedUnitPrice1, x_BaseUnitPrice1, tmp_SavingsPlanKey\r\n | union ((prices | where x_SkuPriceType != 'SavingsPlan'))\r\n //\r\n // Calculate commitment discount elgibility\r\n // TODO: Would a join be faster?\r\n | extend x_CommitmentDiscountSpendEligibility = iff(x_SkuMeterId in (riMeters) and x_SkuPriceType != 'ReservedInstance', 'Eligible', 'Not Eligible')\r\n | extend x_CommitmentDiscountUsageEligibility = iff(x_SkuMeterId in (spMeters), 'Eligible', 'Not Eligible')\r\n //\r\n // Add PricingUnit and x_PricingBlockSize\r\n // TODO: Compare join vs. lookup perf -- | join kind=leftouter (PricingUnits) on x_PricingUnitDescription | project-away x_PricingUnitDescription1\r\n | lookup kind=leftouter (PricingUnits) on x_PricingUnitDescription\r\n //\r\n | extend x_EffectiveUnitPrice = iff(x_SkuPriceType == 'SavingsPlan', UnitPrice, todecimal('')) // Savings plan prices are for the effective price, not the contracted price\r\n | extend x_EffectiveUnitPriceDiscount = ContractedUnitPrice - x_EffectiveUnitPrice\r\n | extend x_ContractedUnitPriceDiscount = ListUnitPrice - ContractedUnitPrice\r\n | extend x_TotalUnitPriceDiscount = ListUnitPrice - x_EffectiveUnitPrice\r\n | project\r\n BillingAccountId = case(\r\n BillingProfileId startswith '/', BillingProfileId,\r\n BillingAccountId startswith '/', BillingAccountId,\r\n strcat('/providers/Microsoft.Billing/billingAccounts/', x_BillingAccountId, iff(x_BillingProfileId != x_BillingAccountId, '', strcat('/billingProfiles/', x_BillingProfileId)))\r\n ),\r\n BillingAccountName = coalesce(BillingProfileName, BillingAccountName, x_BillingProfileId),\r\n BillingCurrency = coalesce(BillingCurrency, CurrencyCode, Currency), // Currency last as a fallback only\r\n ChargeCategory,\r\n CommitmentDiscountCategory = case(\r\n x_SkuPriceType == 'ReservedInstance', 'Usage',\r\n x_SkuPriceType == 'SavingsPlan', 'Spend',\r\n ''\r\n ),\r\n CommitmentDiscountType = case(\r\n x_SkuPriceType == 'ReservedInstance', 'Reservation',\r\n x_SkuPriceType == 'SavingsPlan', 'Savings plan',\r\n ''\r\n ),\r\n ContractedUnitPrice,\r\n ListUnitPrice,\r\n PricingCategory = case(\r\n x_SkuPriceType == 'Consumption', 'Standard',\r\n x_SkuPriceType == 'ReservedInstance', 'Standard', // Reservation purchases are tracked as \"Standard\"\r\n x_SkuPriceType == 'SavingsPlan', 'Committed',\r\n ''\r\n ),\r\n PricingUnit,\r\n SkuId = coalesce(ProductId, ProductID),\r\n SkuPriceId = strcat(x_SkuProductId, '_', x_SkuId, '_', x_SkuMeterType),\r\n SkuPriceIdv2,\r\n x_BaseUnitPrice,\r\n x_BillingAccountAgreement = case(\r\n strlen(x_BillingAccountId) > 32, 'MCA',\r\n strlen(x_BillingAccountId) < 32, 'EA',\r\n 'Unknown'\r\n ),\r\n x_BillingAccountId,\r\n x_BillingProfileId,\r\n x_CommitmentDiscountSpendEligibility,\r\n x_CommitmentDiscountUsageEligibility,\r\n x_ContractedUnitPriceDiscount,\r\n x_ContractedUnitPriceDiscountPercent = 1.0 * x_ContractedUnitPriceDiscount / ListUnitPrice * 100,\r\n x_EffectivePeriodEnd = startofmonth(x_EffectivePeriodEnd + 1h),\r\n x_EffectivePeriodStart,\r\n x_EffectiveUnitPrice,\r\n x_EffectiveUnitPriceDiscount,\r\n x_EffectiveUnitPriceDiscountPercent = 1.0 * x_EffectiveUnitPriceDiscount / ContractedUnitPrice * 100,\r\n x_IngestionTime,\r\n x_PricingBlockSize,\r\n x_PricingCurrency = coalesce(Currency, CurrencyCode), // CurrencyCode last as a fallback only\r\n x_PricingSubcategory = case(\r\n x_SkuPriceType == 'Consumption' and (x_SkuIncludedQuantity > 0 or x_SkuTier > 0), 'Tiered',\r\n x_SkuPriceType == 'Consumption', 'Standard',\r\n x_SkuPriceType == 'ReservedInstance', 'Standard', // Reservation purchases are tracked as \"Standard\"\r\n x_SkuPriceType == 'SavingsPlan', 'Committed Spend',\r\n ''\r\n ),\r\n x_PricingUnitDescription,\r\n x_SkuDescription = Product,\r\n x_SkuId,\r\n x_SkuIncludedQuantity,\r\n x_SkuMeterCategory,\r\n x_SkuMeterId,\r\n x_SkuMeterName,\r\n x_SkuMeterSubcategory,\r\n x_SkuMeterType,\r\n x_SkuPriceType,\r\n x_SkuProductId,\r\n x_SkuRegion,\r\n x_SkuServiceFamily,\r\n x_SkuOfferId,\r\n x_SkuPartNumber,\r\n x_SkuTerm,\r\n x_SkuTier,\r\n x_SourceName = coalesce(x_SourceName, 'Cost Management'),\r\n x_SourceProvider = coalesce(x_SourceProvider, 'Microsoft'),\r\n x_SourceType = coalesce(x_SourceType, 'PriceSheet'),\r\n x_SourceVersion = coalesce(x_SourceVersion, '2023-05-01'),\r\n x_TotalUnitPriceDiscount,\r\n x_TotalUnitPriceDiscountPercent = 1.0 * x_TotalUnitPriceDiscount / ListUnitPrice * 100\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Prices_final_v1_0 table\r\n// FOCUS 1.0 version of the price sheet that covers everything defined in Prices_raw.\r\n.create-merge table Prices_final_v1_0 (\r\n BillingAccountId: string,\r\n BillingAccountName: string,\r\n BillingCurrency: string,\r\n ChargeCategory: string,\r\n CommitmentDiscountCategory: string,\r\n CommitmentDiscountType: string,\r\n ContractedUnitPrice: decimal,\r\n ListUnitPrice: decimal,\r\n PricingCategory: string,\r\n PricingUnit: string,\r\n SkuId: string,\r\n SkuPriceId: string,\r\n SkuPriceIdv2: string, // Hubs add-on\r\n x_BaseUnitPrice: decimal, // Azure\r\n x_BillingAccountAgreement: string, // Hubs add-on\r\n x_BillingAccountId: string, // Azure MCA\r\n x_BillingProfileId: string, // Azure MCA\r\n x_CommitmentDiscountSpendEligibility: string, // Hubs add-on\r\n x_CommitmentDiscountUsageEligibility: string, // Hubs add-on\r\n x_ContractedUnitPriceDiscount: decimal, // Hubs add-on\r\n x_ContractedUnitPriceDiscountPercent: decimal, // Hubs add-on\r\n x_EffectivePeriodEnd: datetime, // Azure\r\n x_EffectivePeriodStart: datetime, // Azure\r\n x_EffectiveUnitPrice: decimal, // Azure\r\n x_EffectiveUnitPriceDiscount: decimal, // Hubs add-on\r\n x_EffectiveUnitPriceDiscountPercent: decimal, // Hubs add-on\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_PricingBlockSize: decimal, // Hubs add-on\r\n x_PricingCurrency: string, // Azure\r\n x_PricingSubcategory: string, // Hubs add-on\r\n x_PricingUnitDescription: string, // Azure\r\n x_SkuDescription: string, // Azure\r\n x_SkuId: string, // Azure\r\n x_SkuIncludedQuantity: decimal, // Azure EA\r\n x_SkuMeterCategory: string, // Azure\r\n x_SkuMeterId: string, // Azure\r\n x_SkuMeterName: string, // Azure\r\n x_SkuMeterSubcategory: string, // Azure\r\n x_SkuMeterType: string, // Azure\r\n x_SkuPriceType: string, // Azure\r\n x_SkuProductId: string, // Azure\r\n x_SkuRegion: string, // Azure\r\n x_SkuServiceFamily: string, // Azure\r\n x_SkuOfferId: string, // Azure EA\r\n x_SkuPartNumber: string, // Azure EA\r\n x_SkuTerm: int, // Azure\r\n x_SkuTier: decimal, // Azure MCA\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_TotalUnitPriceDiscount: decimal, // Hubs add-on\r\n x_TotalUnitPriceDiscountPercent: decimal // Hubs add-on\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Prices_raw -> Prices_final_v1_0\r\n// NOTE: Must be after transform function is defined\r\n.alter table Prices_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Prices_raw\",\r\n \"Query\": \"Prices_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Cost and usage |=================================================================================================\r\n// Supported versions:\r\n// - MS: 1.0, 1.0-preview(v1) -- See https://aka.ms/costmgmt/exports/focus\r\n// - AWS: 1.0 -- See https://docs.aws.amazon.com/cur/latest/userguide/table-dictionary-focus-1-0-aws-columns.html\r\n// - GCP: Jan-Jun 2024 -- See https://cloud.google.com/resources/google-cloud-focus?e=48754805&hl=en\r\n// Links to (Aug 2024): https://services.google.com/fh/files/misc/focus_guide_v1.pdf\r\n// See also:\r\n// - https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/standard-usage\r\n// - https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/detailed-usage\r\n// - OCI: 1.0 -- See https://docs.oracle.com/iaas/Content/Billing/Concepts/costusagereportsoverview.htm#costreports__focus-cost-report-schema\r\n//\r\n// Support for non-Azure data is limited to ingestion only. Data is not transformed across versions.\r\n//======================================================================================================================\r\n\r\n// Costs_raw table\r\n.create-merge table Costs_raw (\r\n AvailabilityZone: string, // FOCUS 0.5+\r\n BilledCost: decimal, // FOCUS 0.5+\r\n BillingAccountId: string, // FOCUS 0.5+\r\n BillingAccountName: string, // FOCUS 0.5+\r\n BillingAccountType: string, // Azure 1.0-preview(v1)+\r\n BillingCurrency: string, // FOCUS 0.5+\r\n BillingPeriodEnd: datetime, // FOCUS 0.5+\r\n BillingPeriodStart: datetime, // FOCUS 0.5+\r\n ChargeCategory: string, // FOCUS 1.0-preview+\r\n ChargeClass: string, // FOCUS 1.0+\r\n ChargeDescription: string, // FOCUS 1.0+\r\n ChargeFrequency: string, // FOCUS 1.0+\r\n ChargePeriodEnd: datetime, // FOCUS 0.5+\r\n ChargePeriodStart: datetime, // FOCUS 0.5+\r\n ChargeSubcategory: string, // FOCUS 1.0-preview only\r\n CommitmentDiscountCategory: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountId: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountName: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountStatus: string, // FOCUS 1.0+\r\n CommitmentDiscountType: string, // FOCUS 1.0-preview+\r\n ConsumedQuantity: decimal, // FOCUS 1.0+\r\n ConsumedUnit: string, // FOCUS 1.0+\r\n ContractedCost: decimal, // FOCUS 1.0+\r\n ContractedUnitPrice: decimal, // FOCUS 1.0+\r\n EffectiveCost: decimal, // FOCUS 1.0-preview+\r\n InvoiceIssuerName: string, // FOCUS 0.5+\r\n ListCost: decimal, // FOCUS 1.0-preview+\r\n ListUnitPrice: decimal, // FOCUS 1.0-preview+\r\n PricingCategory: string, // FOCUS 1.0-preview+\r\n PricingQuantity: decimal, // FOCUS 1.0-preview+\r\n PricingUnit: string, // FOCUS 1.0-preview+\r\n ProviderName: string, // FOCUS 0.5+\r\n PublisherName: string, // FOCUS 0.5+\r\n Region: string, // FOCUS 0.5-1.0-preview (deprecated)\r\n RegionId: string, // FOCUS 1.0+\r\n RegionName: string, // FOCUS 1.0+\r\n ResourceId: string, // FOCUS 0.5+\r\n ResourceName: string, // FOCUS 0.5+\r\n ResourceType: string, // FOCUS 1.0-preview+\r\n ServiceCategory: string, // FOCUS 0.5+\r\n ServiceName: string, // FOCUS 0.5+\r\n SkuId: string, // FOCUS 1.0-preview+\r\n SkuPriceId: string, // FOCUS 1.0-preview+\r\n SubAccountId: string, // FOCUS 0.5+\r\n SubAccountName: string, // FOCUS 0.5+\r\n SubAccountType: string, // Azure 1.0-preview(v1)+\r\n Tags: string, // FOCUS 1.0-preview+\r\n UsageAmount: decimal, // GCP Jan 2024 -- Removed Mar 2024 (UsageQuantity)\r\n UsageQuantity: decimal, // FOCUS 1.0-preview only\r\n UsageUnit: string, // FOCUS 1.0-preview only\r\n x_AccountId: string, // Azure 1.0-preview(v1)+\r\n x_AccountName: string, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId: string, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingAccountId: string, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName: string, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate: datetime, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId: string, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName: string, // Azure 1.0-preview(v1)+\r\n x_ChargeId: string, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd: decimal, // Azure 1.0+\r\n x_Cost: decimal, // GCP Jan 2024 -- Removed Jun 2024 (ContractedCost)\r\n x_CostAllocationRuleName: string, // Azure 1.0-preview(v1)+\r\n x_CostCategories: string, // AWS 1.0 (JSON)\r\n x_CostCenter: string, // Azure 1.0-preview(v1)+\r\n x_Credits: string, // GCP Jan 2024\r\n x_CostType: string, // GCP Jan 2024\r\n x_CurrencyConversionRate: decimal, // GCP Jun 2024\r\n x_CustomerId: string, // Azure 1.0-preview(v1)+\r\n x_CustomerName: string, // Azure 1.0-preview(v1)+\r\n x_Discount: string, // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_ExportTime: datetime, // GCP Jan 2024\r\n x_InvoiceId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName: string, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_Location: string, // GCP Jan 2024\r\n x_OnDemandCost: decimal, // Azure 1.0-preview(v1) only\r\n x_OnDemandCostInUsd: decimal, // Azure 1.0-preview(v1) only\r\n x_OnDemandUnitPrice: decimal, // Azure 1.0-preview(v1) only\r\n x_Operation: string, // AWS 1.0\r\n x_PartnerCreditApplied: string, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate: string, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize: decimal, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency: string, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription: string, // Azure 1.0-preview(v1)+\r\n x_Project: string, // GCP Jan 2024\r\n x_PublisherCategory: string, // Azure 1.0-preview(v1)+\r\n x_PublisherId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceType: string, // Azure 1.0-preview(v1)+\r\n x_ServiceCode: string, // AWS 1.0\r\n x_ServiceId: string, // GCP Jan 2024\r\n x_ServicePeriodEnd: datetime, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart: datetime, // Azure 1.0-preview(v1)+\r\n x_SkuDescription: string, // Azure 1.0-preview(v1)+\r\n x_SkuDetails: string, // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible: bool, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName: string, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber: string, // Azure 1.0-preview(v1)+\r\n x_SkuRegion: string, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily: string, // Azure 1.0-preview(v1)+\r\n x_SkuTerm: int, // Azure 1.0-preview(v1)+\r\n x_SkuTier: string, // Azure 1.0-preview(v1)+ \r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_UsageType: string // AWS 1.0\r\n)\r\n\r\n// Costs_raw ingestion mapping\r\n.create-or-alter table Costs_raw ingestion parquet mapping \"Costs_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"AvailabilityZone\", \"Properties\": { \"Field\": \"AvailabilityZone\" } },\r\n { \"Column\": \"BilledCost\", \"Properties\": { \"Field\": \"BilledCost\" } },\r\n { \"Column\": \"BillingAccountId\", \"Properties\": { \"Field\": \"BillingAccountId\" } },\r\n { \"Column\": \"BillingAccountName\", \"Properties\": { \"Field\": \"BillingAccountName\" } },\r\n { \"Column\": \"BillingAccountType\", \"Properties\": { \"Field\": \"BillingAccountType\" } },\r\n { \"Column\": \"BillingCurrency\", \"Properties\": { \"Field\": \"BillingCurrency\" } },\r\n { \"Column\": \"BillingPeriodEnd\", \"Properties\": { \"Field\": \"BillingPeriodEnd\" } },\r\n { \"Column\": \"BillingPeriodStart\", \"Properties\": { \"Field\": \"BillingPeriodStart\" } },\r\n { \"Column\": \"ChargeCategory\", \"Properties\": { \"Field\": \"ChargeCategory\" } },\r\n { \"Column\": \"ChargeClass\", \"Properties\": { \"Field\": \"ChargeClass\" } },\r\n { \"Column\": \"ChargeDescription\", \"Properties\": { \"Field\": \"ChargeDescription\" } },\r\n { \"Column\": \"ChargeFrequency\", \"Properties\": { \"Field\": \"ChargeFrequency\" } },\r\n { \"Column\": \"ChargePeriodEnd\", \"Properties\": { \"Field\": \"ChargePeriodEnd\" } },\r\n { \"Column\": \"ChargePeriodStart\", \"Properties\": { \"Field\": \"ChargePeriodStart\" } },\r\n { \"Column\": \"ChargeSubcategory\", \"Properties\": { \"Field\": \"ChargeSubcategory\" } },\r\n { \"Column\": \"CommitmentDiscountCategory\", \"Properties\": { \"Field\": \"CommitmentDiscountCategory\" } },\r\n { \"Column\": \"CommitmentDiscountId\", \"Properties\": { \"Field\": \"CommitmentDiscountId\" } },\r\n { \"Column\": \"CommitmentDiscountName\", \"Properties\": { \"Field\": \"CommitmentDiscountName\" } },\r\n { \"Column\": \"CommitmentDiscountStatus\", \"Properties\": { \"Field\": \"CommitmentDiscountStatus\" } },\r\n { \"Column\": \"CommitmentDiscountType\", \"Properties\": { \"Field\": \"CommitmentDiscountType\" } },\r\n { \"Column\": \"ConsumedQuantity\", \"Properties\": { \"Field\": \"ConsumedQuantity\" } },\r\n { \"Column\": \"ConsumedUnit\", \"Properties\": { \"Field\": \"ConsumedUnit\" } },\r\n { \"Column\": \"ContractedCost\", \"Properties\": { \"Field\": \"ContractedCost\" } },\r\n { \"Column\": \"ContractedUnitPrice\", \"Properties\": { \"Field\": \"ContractedUnitPrice\" } },\r\n { \"Column\": \"EffectiveCost\", \"Properties\": { \"Field\": \"EffectiveCost\" } },\r\n { \"Column\": \"InvoiceIssuerName\", \"Properties\": { \"Field\": \"InvoiceIssuerName\" } },\r\n { \"Column\": \"ListCost\", \"Properties\": { \"Field\": \"ListCost\" } },\r\n { \"Column\": \"ListUnitPrice\", \"Properties\": { \"Field\": \"ListUnitPrice\" } },\r\n { \"Column\": \"PricingCategory\", \"Properties\": { \"Field\": \"PricingCategory\" } },\r\n { \"Column\": \"PricingQuantity\", \"Properties\": { \"Field\": \"PricingQuantity\" } },\r\n { \"Column\": \"PricingUnit\", \"Properties\": { \"Field\": \"PricingUnit\" } },\r\n { \"Column\": \"ProviderName\", \"Properties\": { \"Field\": \"ProviderName\" } },\r\n { \"Column\": \"PublisherName\", \"Properties\": { \"Field\": \"PublisherName\" } },\r\n { \"Column\": \"Region\", \"Properties\": { \"Field\": \"Region\" } },\r\n { \"Column\": \"RegionId\", \"Properties\": { \"Field\": \"RegionId\" } },\r\n { \"Column\": \"RegionName\", \"Properties\": { \"Field\": \"RegionName\" } },\r\n { \"Column\": \"ResourceId\", \"Properties\": { \"Field\": \"ResourceId\" } },\r\n { \"Column\": \"ResourceName\", \"Properties\": { \"Field\": \"ResourceName\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\r\n { \"Column\": \"ServiceCategory\", \"Properties\": { \"Field\": \"ServiceCategory\" } },\r\n { \"Column\": \"ServiceName\", \"Properties\": { \"Field\": \"ServiceName\" } },\r\n { \"Column\": \"SkuId\", \"Properties\": { \"Field\": \"SkuId\" } },\r\n { \"Column\": \"SkuPriceId\", \"Properties\": { \"Field\": \"SkuPriceId\" } },\r\n { \"Column\": \"SubAccountId\", \"Properties\": { \"Field\": \"SubAccountId\" } },\r\n { \"Column\": \"SubAccountName\", \"Properties\": { \"Field\": \"SubAccountName\" } },\r\n { \"Column\": \"SubAccountType\", \"Properties\": { \"Field\": \"SubAccountType\" } },\r\n { \"Column\": \"Tags\", \"Properties\": { \"Field\": \"Tags\" } },\r\n { \"Column\": \"UsageAmount\", \"Properties\": { \"Field\": \"UsageAmount\" } },\r\n { \"Column\": \"UsageQuantity\", \"Properties\": { \"Field\": \"UsageQuantity\" } },\r\n { \"Column\": \"UsageUnit\", \"Properties\": { \"Field\": \"UsageUnit\" } },\r\n { \"Column\": \"x_AccountId\", \"Properties\": { \"Field\": \"x_AccountId\" } },\r\n { \"Column\": \"x_AccountName\", \"Properties\": { \"Field\": \"x_AccountName\" } },\r\n { \"Column\": \"x_AccountOwnerId\", \"Properties\": { \"Field\": \"x_AccountOwnerId\" } },\r\n { \"Column\": \"x_BilledCostInUsd\", \"Properties\": { \"Field\": \"x_BilledCostInUsd\" } },\r\n { \"Column\": \"x_BilledUnitPrice\", \"Properties\": { \"Field\": \"x_BilledUnitPrice\" } },\r\n { \"Column\": \"x_BillingAccountId\", \"Properties\": { \"Field\": \"x_BillingAccountId\" } },\r\n { \"Column\": \"x_BillingAccountName\", \"Properties\": { \"Field\": \"x_BillingAccountName\" } },\r\n { \"Column\": \"x_BillingExchangeRate\", \"Properties\": { \"Field\": \"x_BillingExchangeRate\" } },\r\n { \"Column\": \"x_BillingExchangeRateDate\", \"Properties\": { \"Field\": \"x_BillingExchangeRateDate\" } },\r\n { \"Column\": \"x_BillingProfileId\", \"Properties\": { \"Field\": \"x_BillingProfileId\" } },\r\n { \"Column\": \"x_BillingProfileName\", \"Properties\": { \"Field\": \"x_BillingProfileName\" } },\r\n { \"Column\": \"x_ChargeId\", \"Properties\": { \"Field\": \"x_ChargeId\" } },\r\n { \"Column\": \"x_ContractedCostInUsd\", \"Properties\": { \"Field\": \"x_ContractedCostInUsd\" } },\r\n { \"Column\": \"x_Cost\", \"Properties\": { \"Field\": \"x_Cost\" } },\r\n { \"Column\": \"x_CostAllocationRuleName\", \"Properties\": { \"Field\": \"x_CostAllocationRuleName\" } },\r\n { \"Column\": \"x_CostCategories\", \"Properties\": { \"Field\": \"x_CostCategories\" } },\r\n { \"Column\": \"x_CostCenter\", \"Properties\": { \"Field\": \"x_CostCenter\" } },\r\n { \"Column\": \"x_Credits\", \"Properties\": { \"Field\": \"x_Credits\" } },\r\n { \"Column\": \"x_CostType\", \"Properties\": { \"Field\": \"x_CostType\" } },\r\n { \"Column\": \"x_CurrencyConversionRate\", \"Properties\": { \"Field\": \"x_CurrencyConversionRate\" } },\r\n { \"Column\": \"x_CustomerId\", \"Properties\": { \"Field\": \"x_CustomerId\" } },\r\n { \"Column\": \"x_CustomerName\", \"Properties\": { \"Field\": \"x_CustomerName\" } },\r\n { \"Column\": \"x_Discount\", \"Properties\": { \"Field\": \"x_Discount\" } },\r\n { \"Column\": \"x_EffectiveCostInUsd\", \"Properties\": { \"Field\": \"x_EffectiveCostInUsd\" } },\r\n { \"Column\": \"x_EffectiveUnitPrice\", \"Properties\": { \"Field\": \"x_EffectiveUnitPrice\" } },\r\n { \"Column\": \"x_ExportTime\", \"Properties\": { \"Field\": \"x_ExportTime\" } },\r\n { \"Column\": \"x_InvoiceId\", \"Properties\": { \"Field\": \"x_InvoiceId\" } },\r\n { \"Column\": \"x_InvoiceIssuerId\", \"Properties\": { \"Field\": \"x_InvoiceIssuerId\" } },\r\n { \"Column\": \"x_InvoiceSectionId\", \"Properties\": { \"Field\": \"x_InvoiceSectionId\" } },\r\n { \"Column\": \"x_InvoiceSectionName\", \"Properties\": { \"Field\": \"x_InvoiceSectionName\" } },\r\n { \"Column\": \"x_ListCostInUsd\", \"Properties\": { \"Field\": \"x_ListCostInUsd\" } },\r\n { \"Column\": \"x_Location\", \"Properties\": { \"Field\": \"x_Location\" } },\r\n { \"Column\": \"x_OnDemandCost\", \"Properties\": { \"Field\": \"x_OnDemandCost\" } },\r\n { \"Column\": \"x_OnDemandCostInUsd\", \"Properties\": { \"Field\": \"x_OnDemandCostInUsd\" } },\r\n { \"Column\": \"x_OnDemandUnitPrice\", \"Properties\": { \"Field\": \"x_OnDemandUnitPrice\" } },\r\n { \"Column\": \"x_Operation\", \"Properties\": { \"Field\": \"x_Operation\" } },\r\n { \"Column\": \"x_PartnerCreditApplied\", \"Properties\": { \"Field\": \"x_PartnerCreditApplied\" } },\r\n { \"Column\": \"x_PartnerCreditRate\", \"Properties\": { \"Field\": \"x_PartnerCreditRate\" } },\r\n { \"Column\": \"x_PricingBlockSize\", \"Properties\": { \"Field\": \"x_PricingBlockSize\" } },\r\n { \"Column\": \"x_PricingCurrency\", \"Properties\": { \"Field\": \"x_PricingCurrency\" } },\r\n { \"Column\": \"x_PricingSubcategory\", \"Properties\": { \"Field\": \"x_PricingSubcategory\" } },\r\n { \"Column\": \"x_PricingUnitDescription\", \"Properties\": { \"Field\": \"x_PricingUnitDescription\" } },\r\n { \"Column\": \"x_Project\", \"Properties\": { \"Field\": \"x_Project\" } },\r\n { \"Column\": \"x_PublisherCategory\", \"Properties\": { \"Field\": \"x_PublisherCategory\" } },\r\n { \"Column\": \"x_PublisherId\", \"Properties\": { \"Field\": \"x_PublisherId\" } },\r\n { \"Column\": \"x_ResellerId\", \"Properties\": { \"Field\": \"x_ResellerId\" } },\r\n { \"Column\": \"x_ResellerName\", \"Properties\": { \"Field\": \"x_ResellerName\" } },\r\n { \"Column\": \"x_ResourceGroupName\", \"Properties\": { \"Field\": \"x_ResourceGroupName\" } },\r\n { \"Column\": \"x_ResourceType\", \"Properties\": { \"Field\": \"x_ResourceType\" } },\r\n { \"Column\": \"x_ServiceCode\", \"Properties\": { \"Field\": \"x_ServiceCode\" } },\r\n { \"Column\": \"x_ServiceId\", \"Properties\": { \"Field\": \"x_ServiceId\" } },\r\n { \"Column\": \"x_ServicePeriodEnd\", \"Properties\": { \"Field\": \"x_ServicePeriodEnd\" } },\r\n { \"Column\": \"x_ServicePeriodStart\", \"Properties\": { \"Field\": \"x_ServicePeriodStart\" } },\r\n { \"Column\": \"x_SkuDescription\", \"Properties\": { \"Field\": \"x_SkuDescription\" } },\r\n { \"Column\": \"x_SkuDetails\", \"Properties\": { \"Field\": \"x_SkuDetails\" } },\r\n { \"Column\": \"x_SkuIsCreditEligible\", \"Properties\": { \"Field\": \"x_SkuIsCreditEligible\" } },\r\n { \"Column\": \"x_SkuMeterCategory\", \"Properties\": { \"Field\": \"x_SkuMeterCategory\" } },\r\n { \"Column\": \"x_SkuMeterId\", \"Properties\": { \"Field\": \"x_SkuMeterId\" } },\r\n { \"Column\": \"x_SkuMeterName\", \"Properties\": { \"Field\": \"x_SkuMeterName\" } },\r\n { \"Column\": \"x_SkuMeterSubcategory\", \"Properties\": { \"Field\": \"x_SkuMeterSubcategory\" } },\r\n { \"Column\": \"x_SkuOfferId\", \"Properties\": { \"Field\": \"x_SkuOfferId\" } },\r\n { \"Column\": \"x_SkuOrderId\", \"Properties\": { \"Field\": \"x_SkuOrderId\" } },\r\n { \"Column\": \"x_SkuOrderName\", \"Properties\": { \"Field\": \"x_SkuOrderName\" } },\r\n { \"Column\": \"x_SkuPartNumber\", \"Properties\": { \"Field\": \"x_SkuPartNumber\" } },\r\n { \"Column\": \"x_SkuRegion\", \"Properties\": { \"Field\": \"x_SkuRegion\" } },\r\n { \"Column\": \"x_SkuServiceFamily\", \"Properties\": { \"Field\": \"x_SkuServiceFamily\" } },\r\n { \"Column\": \"x_SkuTerm\", \"Properties\": { \"Field\": \"x_SkuTerm\" } },\r\n { \"Column\": \"x_SkuTier\", \"Properties\": { \"Field\": \"x_SkuTier\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } },\r\n { \"Column\": \"x_UsageType\", \"Properties\": { \"Field\": \"x_UsageType\" } }\r\n]\r\n```\r\n\r\n// Costs_raw retention policy\r\n.alter-merge table Costs_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Costs_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All costs transformed to FOCUS 1.0.', folder='Costs')\r\nCosts_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n Costs_raw\r\n //\r\n // Dedupe rows\r\n | extend x_IngestionTime = ingestion_time()\r\n | extend x_ChargeId = ''\r\n // TODO: Consider adding a unique charge ID per row\r\n // hash_sha256(strcat(\r\n // // DO NOT CHANGE COLUMNS OR COLUMN ORDER\r\n // // 1. Resource hierarchy (including resource name), highest to lowest\r\n // BillingAccountId,\r\n // x_InvoiceSectionId,\r\n // x_AccountOwnerId,\r\n // SubAccountId,\r\n // x_ResourceGroupName,\r\n // ResourceName,\r\n // // 2. Resource details\r\n // ResourceId,\r\n // RegionId,\r\n // Tags,\r\n // CommitmentDiscountId,\r\n // x_CostCenter,\r\n // // 4. Meter details\r\n // SkuPriceId,\r\n // x_SkuMeterId,\r\n // x_SkuPartNumber,\r\n // x_SkuOfferId,\r\n // x_SkuDetails,\r\n // // 5. Date\r\n // ChargePeriodStart\r\n // ))\r\n //\r\n // Identify data quality issues\r\n | extend x_SourceChanges = trim_end(',', strcat(\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and ChargeFrequency == 'Usage-Based', 'InvalidChargeFrequency,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and EffectiveCost > 0, 'InvalidEffectiveCost,', ''),\r\n iff((isempty(ContractedCost) or ContractedCost == 0) and EffectiveCost != 0, 'MissingContractedCost,', ''),\r\n iff((isempty(ContractedUnitPrice) or ContractedUnitPrice == 0) and x_EffectiveUnitPrice != 0, 'MissingContractedUnitPrice,', ''),\r\n iff((isempty(ListCost) or ListCost == 0) and (ContractedCost != 0 or EffectiveCost != 0), 'MissingListCost,', ''),\r\n iff((isempty(ListUnitPrice) or ListUnitPrice == 0) and (ContractedUnitPrice != 0 or x_EffectiveUnitPrice != 0), 'MissingListUnitPrice,', ''),\r\n iff(isempty(ProviderName), 'MissingProviderName,', ''),\r\n iff(isempty(PublisherName), 'MissingPublisherName,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceId), 'MissingResourceId,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceName), 'MissingResourceName,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceType), 'MissingResourceType,', ''),\r\n iff(BilledCost > 0 and x_BilledUnitPrice == 0, 'MissingXBilledUnitPrice,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(x_ResourceType), 'MissingXResourceType,', ''),\r\n iff(PricingCategory == 'Standard' and isnotempty(CommitmentDiscountId) and ChargeCategory == 'Usage', 'PricingCategoryShouldBeCommitted,', ''),\r\n iff(x_SkuTerm == '1Year' or x_SkuTerm == '3Years' or x_SkuTerm == '5Years', 'SkuTermShouldBeAnInteger,', '')\r\n ))\r\n //\r\n // Fix columns needed in other changes\r\n | extend ProviderName = case(\r\n isnotempty(ProviderName), ProviderName,\r\n isnotempty(coalesce(x_CostCategories, x_Discount, x_Operation, x_ServiceCode, x_UsageType)), 'AWS',\r\n isnotempty(coalesce(tostring(UsageAmount), tostring(x_Cost), x_Credits, x_CostType, tostring(x_CurrencyConversionRate), tostring(x_ExportTime), x_Project, x_ServiceId)), 'GCP',\r\n isnotempty(coalesce(x_BillingProfileId, x_InvoiceSectionId)), 'Microsoft',\r\n ''\r\n )\r\n //\r\n // Identify source\r\n | extend x_SourceName = coalesce(x_SourceName, iff(isnotempty(x_BillingProfileId), 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(isnotempty(x_BillingProfileId), 'FocusCost', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, case(\r\n isnotempty(coalesce(ChargeClass, CommitmentDiscountStatus, tostring(ConsumedQuantity), ConsumedUnit, tostring(ContractedCost), tostring(ContractedUnitPrice), RegionId, RegionName)), '1.0',\r\n isnotempty(coalesce(ChargeSubcategory, Region, tostring(UsageQuantity), UsageUnit)), iff(ProviderName == 'Microsoft', '1.0-preview(v1)', '1.0-preview'),\r\n ''\r\n ))\r\n // Append version check error code\r\n | extend x_SourceChanges = iff(x_SourceVersion == '1.0', x_SourceChanges,\r\n strcat(x_SourceChanges, iff(isempty(x_SourceChanges), '', ','), iff(x_SourceVersion == '', 'UnknownFocusVersion', 'LegacyFocusVersion'))\r\n )\r\n //\r\n // Populate missing prices -- mapping to on-demand prices requires meter ID and offer ID\r\n | extend tmp_MissingPrices = ProviderName == 'Microsoft'\r\n and (ListUnitPrice == 0 or ContractedUnitPrice == 0)\r\n and x_EffectiveUnitPrice != 0\r\n and not(CommitmentDiscountCategory == 'Spend' and CommitmentDiscountStatus == 'Unused')\r\n and isnotempty(strcat(x_SkuMeterId, x_SkuOfferId))\r\n | as allCosts\r\n | where tmp_MissingPrices\r\n | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(ChargePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)\r\n | as costsWithMissingPrices\r\n | join kind=leftouter (\r\n Prices_final_v1_0\r\n | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)\r\n | where x_SkuPriceType == 'Consumption' and tmp_ReservationPriceLookupKey in ((costsWithMissingPrices | summarize by tmp_ReservationPriceLookupKey))\r\n | summarize ListUnitPrice = min(ListUnitPrice), ContractedUnitPrice = min(ContractedUnitPrice) by tmp_ReservationPriceLookupKey, x_PricingBlockSize, PricingUnit\r\n ) on tmp_ReservationPriceLookupKey\r\n // Select the best price to use for each row\r\n | extend ContractedUnitPrice = case(\r\n // If price is already correct, keep that\r\n ContractedUnitPrice != 0 or x_EffectiveUnitPrice == 0, ContractedUnitPrice,\r\n // If both prices use the same scale, use the new one\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize == x_PricingBlockSize1, ContractedUnitPrice1 * x_BillingExchangeRate,\r\n // If prices are the same unit but not the same scale, use the new one but correct the scale\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize != x_PricingBlockSize1 and isnotempty(x_PricingBlockSize) and isnotempty(x_PricingBlockSize1), ContractedUnitPrice1 * x_BillingExchangeRate / x_PricingBlockSize1 * x_PricingBlockSize,\r\n // If billed price is available, assume the billed price is the same as contracted price to support aggregations\r\n isnotempty(x_BilledUnitPrice) and x_BilledUnitPrice != 0, x_EffectiveUnitPrice,\r\n // Otherwise, assume the effective price is the same as contracted price to support aggregations\r\n x_EffectiveUnitPrice\r\n )\r\n | extend ListUnitPrice = case(\r\n // If price is already correct, keep that\r\n ListUnitPrice != 0 or x_EffectiveUnitPrice == 0, ListUnitPrice,\r\n // If both prices use the same scale, use the new one\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize == x_PricingBlockSize1, ListUnitPrice1 * x_BillingExchangeRate,\r\n // If prices are the same unit but not the same scale, use the new one but correct the scale\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize != x_PricingBlockSize1 and isnotempty(x_PricingBlockSize) and isnotempty(x_PricingBlockSize1), ListUnitPrice1 * x_BillingExchangeRate / x_PricingBlockSize1 * x_PricingBlockSize,\r\n // Otherwise, assume the contracted price is the same as list price to support aggregations\r\n ContractedUnitPrice\r\n )\r\n // Calculate missing costs based on new prices -- If cost is already correct, keep that; if not and price is available, recalculate the cost; otherwise, keep the existing cost\r\n | extend ListCost = case(ListCost != 0 or EffectiveCost == 0, ListCost, ListUnitPrice != 0, ListUnitPrice * PricingQuantity, ListCost)\r\n | extend ContractedCost = case(ContractedCost != 0 or EffectiveCost == 0, ContractedCost, ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity, ContractedCost)\r\n // Merge the rest of the unmodified cost records and remove excess columns\r\n | union (allCosts | where not(tmp_MissingPrices))\r\n | project-away x_PricingBlockSize1, PricingUnit1, ListUnitPrice1, ContractedUnitPrice1, tmp_MissingPrices, tmp_ReservationPriceLookupKey, tmp_ReservationPriceLookupKey1\r\n //\r\n // BUG: Fix ContractedCost that has bad values\r\n | extend ContractedCost = iff(ProviderName == 'Microsoft' and isnotempty(PricingQuantity) and isnotempty(x_PricingBlockSize) and ContractedCost != ContractedUnitPrice * PricingQuantity, ContractedUnitPrice * PricingQuantity, ContractedCost)\r\n //\r\n // Handle FOCUS 1.0-preview UsageQuantity/Unit\r\n | extend ConsumedQuantity = iff(ChargeCategory == 'Usage', coalesce(ConsumedQuantity, UsageQuantity, UsageAmount), todecimal(''))\r\n | extend ConsumedUnit = iff(ChargeCategory == 'Usage' and isnotempty(ConsumedQuantity), coalesce(ConsumedUnit, UsageUnit, 'Units'), '')\r\n //\r\n // Convert IDs to lowercase for consistency\r\n | extend CommitmentDiscountId = tolower(CommitmentDiscountId)\r\n //\r\n // BUG: Remove EffectiveCost for commitment discount purchases\r\n | extend EffectiveCost = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), decimal(0), EffectiveCost)\r\n | extend x_EffectiveCostInUsd = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), decimal(0), x_EffectiveCostInUsd)\r\n //\r\n // Clean up resource columns\r\n | extend ResourceId = case(\r\n isnotempty(ResourceId), ResourceId,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), CommitmentDiscountId,\r\n ResourceId)\r\n | extend tmp_ResourceDetails = parse_resourceid(ResourceId)\r\n | extend ResourceName = tolower(case(\r\n isnotempty(ResourceName), ResourceName,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountName), CommitmentDiscountName,\r\n isnotempty(ResourceId), tmp_ResourceDetails.ResourceName,\r\n ResourceName))\r\n | extend ResourceType = case(\r\n isnotempty(ResourceType), ResourceType,\r\n isnotempty(ResourceId) and isnotempty(tmp_ResourceDetails.ResourceType), tmp_ResourceDetails.ResourceType,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountType), CommitmentDiscountType,\r\n ResourceType)\r\n | extend x_ResourceType = case(\r\n isnotempty(x_ResourceType), x_ResourceType,\r\n isnotempty(ResourceId) and isnotempty(tmp_ResourceDetails.x_ResourceType), tmp_ResourceDetails.x_ResourceType,\r\n x_ResourceType)\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n AvailabilityZone,\r\n BilledCost,\r\n BillingAccountId,\r\n BillingAccountName,\r\n BillingAccountType, // Azure 1.0-preview(v1)+\r\n BillingCurrency,\r\n BillingPeriodEnd,\r\n BillingPeriodStart,\r\n ChargeCategory = case(\r\n // Handle FOCUS 1.0-preview ChargeSubcategory\r\n ChargeSubcategory == 'Credit', 'Credit',\r\n ChargeSubcategory == 'Refund', 'Purchase', // We are assuming purchase refunds since we don't have data to indicate usage refunds\r\n ChargeCategory\r\n ),\r\n ChargeClass = case(ChargeSubcategory == 'Refund', 'Correction', ChargeClass),\r\n ChargeDescription,\r\n // BUG: ChargeFrequency shows \"Usage-Based\" for monthly recurring savings plan purchases\r\n ChargeFrequency = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and ChargeFrequency == 'Usage-Based' and ProviderName == 'Microsoft' and x_SourceVersion startswith '1.0', 'Recurring', ChargeFrequency),\r\n ChargePeriodEnd,\r\n ChargePeriodStart,\r\n CommitmentDiscountCategory,\r\n CommitmentDiscountId,\r\n CommitmentDiscountName,\r\n CommitmentDiscountStatus = case(\r\n // Handle FOCUS 1.0-preview ChargeSubcategory\r\n ChargeSubcategory == 'Used Commitment', 'Used',\r\n ChargeSubcategory == 'Unused Commitment', 'Unused',\r\n CommitmentDiscountStatus\r\n ),\r\n CommitmentDiscountType,\r\n ConsumedQuantity,\r\n ConsumedUnit,\r\n ContractedCost = coalesce(ContractedCost, x_OnDemandCost, x_Cost),\r\n ContractedUnitPrice = coalesce(ContractedUnitPrice, x_OnDemandUnitPrice),\r\n EffectiveCost,\r\n InvoiceIssuerName,\r\n ListCost,\r\n ListUnitPrice,\r\n PricingCategory = case(\r\n // Handle FOCUS 1.0-preview PricingCategory values\r\n PricingCategory == 'On-Demand', 'Standard',\r\n PricingCategory == 'Commitment-Based', 'Committed',\r\n PricingCategory\r\n ),\r\n PricingQuantity,\r\n PricingUnit,\r\n ProviderName,\r\n // Handle missing PublisherName values\r\n PublisherName = case(PublisherName == 'Microsoft Corporation', 'Microsoft', isnotempty(PublisherName), PublisherName, x_PublisherCategory == 'Cloud Provider', ProviderName, ''),\r\n // Handle FOCUS 1.0-preview Region column\r\n RegionId = coalesce(RegionId, iff(ProviderName == 'Microsoft', replace_string(tolower(Region), ' ', ''), Region)),\r\n RegionName = coalesce(RegionName, Region),\r\n ResourceId,\r\n ResourceName,\r\n ResourceType,\r\n ServiceCategory,\r\n ServiceName,\r\n SkuId,\r\n SkuPriceId,\r\n SubAccountId,\r\n SubAccountName,\r\n SubAccountType, // Azure 1.0-preview(v1)+\r\n Tags = parse_json(Tags),\r\n x_AccountId, // Azure 1.0-preview(v1)+\r\n x_AccountName, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice, // Azure 1.0-preview(v1)+\r\n x_BillingAccountAgreement = case(\r\n ProviderName == 'Microsoft' and x_BillingAccountId == x_BillingProfileId, 'EA',\r\n ProviderName == 'Microsoft' and x_BillingAccountId != x_BillingProfileId, 'MCA',\r\n ProviderName\r\n ), // Hubs add-on\r\n x_BillingAccountId, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName, // Azure 1.0-preview(v1)+\r\n x_ChargeId, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd = coalesce(x_ContractedCostInUsd, x_OnDemandCostInUsd), // Azure 1.0+\r\n x_CostAllocationRuleName, // Azure 1.0-preview(v1)+\r\n x_CostCategories = parse_json(x_CostCategories), // AWS 1.0 (JSON)\r\n x_CostCenter, // Azure 1.0-preview(v1)+\r\n x_Credits = parse_json(x_Credits), // GCP Jan 2024\r\n x_CostType, // GCP Jan 2024\r\n x_CurrencyConversionRate, // GCP Jun 2024\r\n x_CustomerId, // Azure 1.0-preview(v1)+\r\n x_CustomerName, // Azure 1.0-preview(v1)+\r\n x_Discount = parse_json(x_Discount), // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice, // Azure 1.0-preview(v1)+\r\n x_ExportTime, // GCP Jan 2024\r\n x_IngestionTime, // Hubs add-on\r\n x_InvoiceId, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd, // Azure 1.0-preview(v1)+\r\n x_Location, // GCP Jan 2024\r\n x_Operation, // AWS 1.0\r\n x_PartnerCreditApplied, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription, // Azure 1.0-preview(v1)+\r\n x_Project, // GCP Jan 2024\r\n x_PublisherCategory, // Azure 1.0-preview(v1)+\r\n x_PublisherId, // Azure 1.0-preview(v1)+\r\n x_ResellerId, // Azure 1.0-preview(v1)+\r\n x_ResellerName, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName = tolower(x_ResourceGroupName), // Azure 1.0-preview(v1)+\r\n x_ResourceType = tolower(case(\r\n isnotempty(ResourceType), ResourceType,\r\n ChargeCategory == 'Purchase' and CommitmentDiscountType == 'Reservation', '',\r\n ResourceType)), // Azure 1.0-preview(v1)+\r\n x_ServiceCode, // AWS 1.0\r\n x_ServiceId, // GCP Jan 2024\r\n x_ServicePeriodEnd, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart, // Azure 1.0-preview(v1)+\r\n x_SkuDescription, // Azure 1.0-preview(v1)+\r\n x_SkuDetails = parse_json(x_SkuDetails), // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber, // Azure 1.0-preview(v1)+\r\n x_SkuRegion, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily, // Azure 1.0-preview(v1)+\r\n x_SkuTerm, // Azure 1.0-preview(v1)+\r\n x_SkuTier, // Azure 1.0-preview(v1)+ \r\n x_SourceChanges, // Hubs add-on\r\n x_SourceName, // Hubs add-on\r\n x_SourceProvider, // Hubs add-on\r\n x_SourceType, // Hubs add-on\r\n x_SourceVersion, // Hubs add-on\r\n x_UsageType // AWS 1.0\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Costs_final_v1_0 table\r\n.create-merge table Costs_final_v1_0 (\r\n AvailabilityZone: string,\r\n BilledCost: decimal,\r\n BillingAccountId: string,\r\n BillingAccountName: string,\r\n BillingAccountType: string, // Azure 1.0-preview(v1)+\r\n BillingCurrency: string,\r\n BillingPeriodEnd: datetime,\r\n BillingPeriodStart: datetime,\r\n ChargeCategory: string,\r\n ChargeClass: string,\r\n ChargeDescription: string,\r\n ChargeFrequency: string,\r\n ChargePeriodEnd: datetime,\r\n ChargePeriodStart: datetime,\r\n CommitmentDiscountCategory: string, // FOCUS 1.0-preview only\r\n CommitmentDiscountId: string,\r\n CommitmentDiscountName: string,\r\n CommitmentDiscountStatus: string,\r\n CommitmentDiscountType: string,\r\n ConsumedQuantity: decimal,\r\n ConsumedUnit: string,\r\n ContractedCost: decimal,\r\n ContractedUnitPrice: decimal,\r\n EffectiveCost: decimal,\r\n InvoiceIssuerName: string,\r\n ListCost: decimal,\r\n ListUnitPrice: decimal,\r\n PricingCategory: string,\r\n PricingQuantity: decimal,\r\n PricingUnit: string,\r\n ProviderName: string,\r\n PublisherName: string,\r\n RegionId: string,\r\n RegionName: string,\r\n ResourceId: string,\r\n ResourceName: string,\r\n ResourceType: string,\r\n ServiceCategory: string,\r\n ServiceName: string,\r\n SkuId: string,\r\n SkuPriceId: string,\r\n SubAccountId: string,\r\n SubAccountName: string,\r\n SubAccountType: string,\r\n Tags: dynamic,\r\n x_AccountId: string, // Azure 1.0-preview(v1)+\r\n x_AccountName: string, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId: string, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingAccountAgreement: string, // Hubs add-on\r\n x_BillingAccountId: string, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName: string, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate: datetime, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId: string, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName: string, // Azure 1.0-preview(v1)+\r\n x_ChargeId: string, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd: decimal, // Azure 1.0+\r\n x_CostAllocationRuleName: string, // Azure 1.0-preview(v1)+\r\n x_CostCategories: dynamic, // AWS 1.0 (JSON)\r\n x_CostCenter: string, // Azure 1.0-preview(v1)+\r\n x_Credits: dynamic, // GCP Jan 2024\r\n x_CostType: string, // GCP Jan 2024\r\n x_CurrencyConversionRate: decimal, // GCP Jun 2024\r\n x_CustomerId: string, // Azure 1.0-preview(v1)+\r\n x_CustomerName: string, // Azure 1.0-preview(v1)+\r\n x_Discount: dynamic, // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_ExportTime: datetime, // GCP Jan 2024\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_InvoiceId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName: string, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_Location: string, // GCP Jan 2024\r\n x_Operation: string, // AWS 1.0\r\n x_PartnerCreditApplied: string, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate: string, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize: decimal, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency: string, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription: string, // Azure 1.0-preview(v1)+\r\n x_Project: string, // GCP Jan 2024\r\n x_PublisherCategory: string, // Azure 1.0-preview(v1)+\r\n x_PublisherId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceType: string, // Azure 1.0-preview(v1)+\r\n x_ServiceCode: string, // AWS 1.0\r\n x_ServiceId: string, // GCP Jan 2024\r\n x_ServicePeriodEnd: datetime, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart: datetime, // Azure 1.0-preview(v1)+\r\n x_SkuDescription: string, // Azure 1.0-preview(v1)+\r\n x_SkuDetails: dynamic, // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible: bool, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName: string, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber: string, // Azure 1.0-preview(v1)+\r\n x_SkuRegion: string, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily: string, // Azure 1.0-preview(v1)+\r\n x_SkuTerm: int, // Azure 1.0-preview(v1)+\r\n x_SkuTier: string, // Azure 1.0-preview(v1)+ \r\n x_SourceChanges: string, // Hubs add-on\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_UsageType: string // AWS 1.0\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Costs_raw -> Costs_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Costs_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Costs_raw\",\r\n \"Query\": \"Costs_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| CommitmentDiscountUsage |========================================================================================\r\n// Supported versions:\r\n// - MS EA reservation details: 2023-03-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/reservation-details-ea\r\n// - MS MCA reservation details: 2023-03-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/reservation-details-mca\r\n//======================================================================================================================\r\n\r\n// CommitmentDiscountUsage_raw table\r\n.create-merge table CommitmentDiscountUsage_raw (\r\n InstanceFlexibilityGroup: string,\r\n InstanceFlexibilityRatio: decimal,\r\n InstanceId: string,\r\n Kind: string,\r\n ReservationId: string,\r\n ReservationOrderId: string,\r\n ReservedHours: decimal,\r\n SkuName: string,\r\n TotalReservedQuantity: decimal,\r\n UsageDate: datetime,\r\n UsedHours: decimal,\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// CommitmentDiscountUsage_raw ingestion mapping\r\n.create-or-alter table CommitmentDiscountUsage_raw ingestion parquet mapping \"CommitmentDiscountUsage_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"InstanceId\", \"Properties\": { \"Field\": \"InstanceId\" } },\r\n { \"Column\": \"Kind\", \"Properties\": { \"Field\": \"Kind\" } },\r\n { \"Column\": \"ReservationId\", \"Properties\": { \"Field\": \"ReservationId\" } },\r\n { \"Column\": \"ReservationOrderId\", \"Properties\": { \"Field\": \"ReservationOrderId\" } },\r\n { \"Column\": \"ReservedHours\", \"Properties\": { \"Field\": \"ReservedHours\" } },\r\n { \"Column\": \"SkuName\", \"Properties\": { \"Field\": \"SkuName\" } },\r\n { \"Column\": \"TotalReservedQuantity\", \"Properties\": { \"Field\": \"TotalReservedQuantity\" } },\r\n { \"Column\": \"UsageDate\", \"Properties\": { \"Field\": \"UsageDate\" } },\r\n { \"Column\": \"UsedHours\", \"Properties\": { \"Field\": \"UsedHours\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// CommitmentDiscountUsage_raw retention policy\r\n.alter-merge table CommitmentDiscountUsage_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// CommitmentDiscountUsage_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All commitment discount usage transformed to FOCUS 1.0. This includes reservationdeatils_raw.', folder='Commitment discounts')\r\nCommitmentDiscountUsage_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n CommitmentDiscountUsage_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Handle resource columns\r\n | extend ResourceId = tolower(InstanceId)\r\n // TODO: Switch to use parse_resourceid()\r\n | parse ResourceId with \"/subscriptions/\" SubAccountId \"/resourcegroups/\" x_ResourceGroupName \"/providers/\" tmp_ResourceProvider \"/\" tmp_ResourceProviderPath\r\n | extend segments = split(tmp_ResourceProviderPath, '/')\r\n | mv-apply element = segments on (extend index = row_number() | where index % 2 == 0 | summarize ResourceName = strcat_array(make_list(element), '/'))\r\n | mv-apply element = segments on (extend index = row_number() | where index % 2 == 1 | summarize x_ResourceType = strcat_array(make_list(element), '/'))\r\n | extend x_ResourceType = strcat(tmp_ResourceProvider, '/', x_ResourceType)\r\n | lookup kind=leftouter (ResourceTypes | distinct x_ResourceType, ResourceType = SingularDisplayName) on x_ResourceType\r\n | lookup kind=leftouter (Services | distinct x_ResourceType, ServiceName, ServiceCategory, x_ServiceModel) on x_ResourceType\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n ChargePeriodEnd = UsageDate + 1d,\r\n ChargePeriodStart = UsageDate,\r\n CommitmentDiscountCategory = 'Usage',\r\n CommitmentDiscountId = tolower(strcat('/providers/microsoft.capacity/reservationorders/', ReservationOrderId, '/reservations/', ReservationId)),\r\n CommitmentDiscountType = 'Reservation',\r\n ConsumedQuantity = UsedHours,\r\n ProviderName,\r\n ResourceId,\r\n ResourceName,\r\n ResourceType,\r\n ServiceCategory,\r\n ServiceName,\r\n SubAccountId,\r\n x_CommitmentDiscountCommittedCount = TotalReservedQuantity,\r\n x_CommitmentDiscountCommittedAmount = ReservedHours,\r\n // TODO: Is this needed? -- x_CommitmentDiscountKind = Kind,\r\n x_CommitmentDiscountNormalizedGroup = iff(InstanceFlexibilityGroup == 'NA', '', InstanceFlexibilityGroup),\r\n x_CommitmentDiscountNormalizedRatio = InstanceFlexibilityRatio,\r\n x_CommitmentDiscountQuantity = UsedHours * InstanceFlexibilityRatio,\r\n x_IngestionTime = ingestion_time(), // Hubs add-on\r\n x_ResourceGroupName = extract('/resourcegroups/([^/]+)/', 1, ResourceId),\r\n x_ResourceType,\r\n // x_RowId = hash_sha256(strcat(\r\n // // DO NOT CHANGE COLUMNS OR COLUMN ORDER\r\n // CommitmentDiscountId,\r\n // ResourceId,\r\n // ChargePeriodStart\r\n // )),\r\n x_ServiceModel,\r\n x_SkuOrderId = ReservationOrderId,\r\n x_SkuSize = iff(SkuName == 'NA', '', SkuName),\r\n x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName)),\r\n x_SourceProvider = coalesce(x_SourceProvider, ProviderName),\r\n x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationDetails', '')),\r\n x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2024-03-01', ''))\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// CommitmentDiscountUsage_final_v1_0 table\r\n.create-merge table CommitmentDiscountUsage_final_v1_0 (\r\n ChargePeriodEnd: datetime, // Hubs add-on\r\n ChargePeriodStart: datetime, // MS 2023-03-01\r\n CommitmentDiscountCategory: string, // Hubs add-on\r\n CommitmentDiscountId: string, // MS 2023-03-01\r\n CommitmentDiscountType: string, // Hubs add-on\r\n ConsumedQuantity: decimal, // MS 2023-03-01\r\n ProviderName: string, // Hubs add-on\r\n ResourceId: string, // MS 2023-03-01\r\n ResourceName: string, // Hubs add-on\r\n ResourceType: string, // Hubs add-on\r\n ServiceCategory: string, // Hubs add-on\r\n ServiceName: string, // Hubs add-on\r\n SubAccountId: string, // Hubs add-on\r\n x_CommitmentDiscountCommittedCount: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountCommittedAmount: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountNormalizedGroup: string, // MS 2023-03-01\r\n x_CommitmentDiscountNormalizedRatio: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountQuantity: decimal, // MS 2023-03-01\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_ResourceGroupName: string, // Hubs add-on\r\n x_ResourceType: string, // Hubs add-on\r\n x_ServiceModel: string, // Hubs add-on\r\n x_SkuOrderId: string, // MS 2023-03-01\r\n x_SkuSize: string, // MS 2023-03-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for CommitmentDiscountUsage_raw -> CommitmentDiscountUsage_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table CommitmentDiscountUsage_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"CommitmentDiscountUsage_raw\",\r\n \"Query\": \"CommitmentDiscountUsage_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Recommendations |================================================================================================\r\n// Supported datasets/versions:\r\n// - MS CM EA reservation recommendations: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-recommendations-ea\r\n// - MS CM MCA reservation recommendations: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-recommendations-mca\r\n//======================================================================================================================\r\n\r\n// Recommendations_raw table\r\n.create-merge table Recommendations_raw (\r\n CostWithNoReservedInstances: decimal, // MS CM EA resv reco 2024-05-01\r\n CostWithNoReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n FirstUsageDate: datetime, // MS CM EA resv reco 2024-05-01\r\n FirstUsageDate2: datetime, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n InstanceFlexibilityGroup: string, // MS CM EA resv reco 2024-05-01\r\n InstanceFlexibilityGroup2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n InstanceFlexibilityRatio: decimal, // MS CM EA resv reco 2024-05-01\r\n InstanceFlexibilityRatio2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n Location: string, // MS CM EA+MCA resv reco 2024-05-01\r\n LookBackPeriod: string, // MS CM EA+MCA resv reco 2024-05-01\r\n MeterId: string, // MS CM EA resv reco 2024-05-01\r\n MeterID: string, // MS CM MCA resv reco 2024-05-01\r\n NetSavings: decimal, // MS CM EA resv reco 2024-05-01\r\n NetSavings2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n NormalizedSize: string, // MS CM EA resv reco 2024-05-01\r\n NormalizedSize2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n RecommendedQuantity: decimal, // MS CM EA resv reco 2024-05-01\r\n RecommendedQuantity2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n RecommendedQuantityNormalized: decimal, // MS CM EA resv reco 2024-05-01\r\n RecommendedQuantityNormalized2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n ResourceType: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Scope: string, // MS CM EA resv reco 2024-05-01\r\n scope: string, // MS CM MCA resv reco 2024-05-01\r\n SKU: string, // MS CM EA resv reco 2024-05-01\r\n SkuName: string, // MS CM MCA resv reco 2024-05-01\r\n SkuProperties: string, // MS CM EA resv reco 2024-05-01\r\n SkuProperties2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n SubscriptionId: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Term: string, // MS CM EA+MCA resv reco 2024-05-01\r\n TotalCostWithReservedInstances: decimal, // MS CM EA resv reco 2024-05-01\r\n TotalCostWithReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Recommendations_raw ingestion mapping\r\n.create-or-alter table Recommendations_raw ingestion parquet mapping \"Recommendations_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"CostWithNoReservedInstances\", \"Properties\": { \"Field\": \"CostWithNoReservedInstances\" } },\r\n { \"Column\": \"CostWithNoReservedInstances2\", \"Properties\": { \"Field\": \"Cost With No ReservedInstances\" } },\r\n { \"Column\": \"FirstUsageDate\", \"Properties\": { \"Field\": \"FirstUsageDate\" } },\r\n { \"Column\": \"FirstUsageDate2\", \"Properties\": { \"Field\": \"First UsageDate\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup2\", \"Properties\": { \"Field\": \"Instance Flexibility Group\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio2\", \"Properties\": { \"Field\": \"Instance Flexibility Ratio\" } },\r\n { \"Column\": \"Location\", \"Properties\": { \"Field\": \"Location\" } },\r\n { \"Column\": \"LookBackPeriod\", \"Properties\": { \"Field\": \"LookBackPeriod\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"MeterID\", \"Properties\": { \"Field\": \"MeterID\" } },\r\n { \"Column\": \"NetSavings\", \"Properties\": { \"Field\": \"NetSavings\" } },\r\n { \"Column\": \"NetSavings2\", \"Properties\": { \"Field\": \"Net Savings\" } },\r\n { \"Column\": \"NormalizedSize\", \"Properties\": { \"Field\": \"NormalizedSize\" } },\r\n { \"Column\": \"NormalizedSize2\", \"Properties\": { \"Field\": \"Normalized Size\" } },\r\n { \"Column\": \"RecommendedQuantity\", \"Properties\": { \"Field\": \"RecommendedQuantity\" } },\r\n { \"Column\": \"RecommendedQuantity2\", \"Properties\": { \"Field\": \"Recommended Quantity\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized\", \"Properties\": { \"Field\": \"RecommendedQuantityNormalized\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized2\", \"Properties\": { \"Field\": \"Recommended Quantity Normalized\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\r\n { \"Column\": \"Scope\", \"Properties\": { \"Field\": \"Scope\" } },\r\n { \"Column\": \"scope\", \"Properties\": { \"Field\": \"scope\" } },\r\n { \"Column\": \"SKU\", \"Properties\": { \"Field\": \"SKU\" } },\r\n { \"Column\": \"SkuName\", \"Properties\": { \"Field\": \"SkuName\" } },\r\n { \"Column\": \"SkuProperties\", \"Properties\": { \"Field\": \"SkuProperties\" } },\r\n { \"Column\": \"SkuProperties2\", \"Properties\": { \"Field\": \"Sku Properties\" } },\r\n { \"Column\": \"SubscriptionId\", \"Properties\": { \"Field\": \"SubscriptionId\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstances\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances2\", \"Properties\": { \"Field\": \"Total Cost With ReservedInstances\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Recommendations_raw retention policy\r\n.alter-merge table Recommendations_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Recommendations_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All recommendations transformed to FOCUS 1.0.', folder='Recommendations')\r\nRecommendations_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n Recommendations_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Set source columns\r\n | extend x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationRecommendations', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', ''))\r\n //\r\n // Handle duplicated columns with spaces\r\n | extend CostWithNoReservedInstances = coalesce(CostWithNoReservedInstances, CostWithNoReservedInstances2)\r\n | extend FirstUsageDate = coalesce(FirstUsageDate, FirstUsageDate2)\r\n | extend InstanceFlexibilityGroup = coalesce(InstanceFlexibilityGroup, InstanceFlexibilityGroup2)\r\n | extend InstanceFlexibilityRatio = coalesce(InstanceFlexibilityRatio, InstanceFlexibilityRatio2)\r\n | extend NetSavings = coalesce(NetSavings, NetSavings2)\r\n | extend NormalizedSize = coalesce(NormalizedSize, NormalizedSize2)\r\n | extend RecommendedQuantity = coalesce(RecommendedQuantity, RecommendedQuantity2)\r\n | extend RecommendedQuantityNormalized = coalesce(RecommendedQuantityNormalized, RecommendedQuantityNormalized2)\r\n | extend SkuProperties = coalesce(SkuProperties, SkuProperties2)\r\n | extend TotalCostWithReservedInstances = coalesce(TotalCostWithReservedInstances, TotalCostWithReservedInstances2)\r\n //\r\n // Build recommendation details\r\n | lookup kind=leftouter (database('Ingestion').Regions | distinct Location = RegionId, RegionName) on Location\r\n | extend x_RecommendationDetails = case(\r\n x_SourceType == 'ReservationRecommendations', bag_pack(\r\n 'CommitmentDiscountNormalizedGroup', InstanceFlexibilityGroup,\r\n 'CommitmentDiscountNormalizedRatio', InstanceFlexibilityRatio,\r\n 'CommitmentDiscountNormalizedSize', NormalizedSize,\r\n 'CommitmentDiscountResourceType', ResourceType,\r\n 'CommitmentDiscountScope', coalesce(Scope, scope),\r\n 'LookbackPeriodDuration', case(\r\n LookBackPeriod matches regex @'^Last([0-9]+)Days$', replace_regex(LookBackPeriod, @'^Last([0-9]+)Days$', @'P\\1D'),\r\n ''\r\n ),\r\n 'LookbackPeriodStart', FirstUsageDate,\r\n 'RecommendedQuantity', RecommendedQuantity,\r\n 'RecommendedQuantityNormalized', RecommendedQuantityNormalized,\r\n 'RegionId', Location,\r\n 'RegionName', RegionName,\r\n 'SkuMeterId', coalesce(MeterId, MeterID),\r\n 'SkuPriceDetails', SkuProperties,\r\n 'SkuSize', coalesce(SKU, SkuName),\r\n 'SkuTerm', isoMonths(Term)\r\n ),\r\n dynamic({})\r\n )\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n ProviderName,\r\n SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''),\r\n x_IngestionTime = ingestion_time(),\r\n x_EffectiveCostAfter = TotalCostWithReservedInstances,\r\n x_EffectiveCostBefore = CostWithNoReservedInstances,\r\n x_EffectiveCostSavings = NetSavings,\r\n x_RecommendationDate = FirstUsageDate + (toint(extract(@'^Last([0-9]+)Days$', 1, LookBackPeriod)) * 1d),\r\n x_RecommendationDetails,\r\n x_SourceName,\r\n x_SourceProvider,\r\n x_SourceType,\r\n x_SourceVersion\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Recommendations_final_v1_0 table\r\n.create-merge table Recommendations_final_v1_0 (\r\n ProviderName: string,\r\n SubAccountId: string,\r\n x_IngestionTime: datetime,\r\n x_EffectiveCostAfter: decimal,\r\n x_EffectiveCostBefore: decimal,\r\n x_EffectiveCostSavings: decimal,\r\n x_RecommendationDate: datetime,\r\n x_RecommendationDetails: dynamic,\r\n x_SourceName: string,\r\n x_SourceProvider: string,\r\n x_SourceType: string,\r\n x_SourceVersion: string\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Recommendations_raw -> Recommendations_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Recommendations_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Recommendations_raw\",\r\n \"Query\": \"Recommendations_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Transactions |===================================================================================================\r\n// Supported versions:\r\n// - MS CM EA reservation transactions: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-transactions-ea\r\n// - MS CM MCA reservation transactions: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-transactions-mca\r\n//======================================================================================================================\r\n\r\n// Transactions_raw table\r\n.create-merge table Transactions_raw (\r\n AccountName: string, // MS CM EA resv trans 2023-05-01\r\n AccountOwnerEmail: string, // MS CM EA resv trans 2023-05-01\r\n Amount: decimal, // MS CM EA+MCA resv trans 2023-05-01\r\n ArmSkuName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n BillingFrequency: string, // MS CM EA+MCA resv trans 2023-05-01\r\n BillingMonth: string, // MS CM EA resv trans 2023-05-01\r\n BillingProfileId: string, // MS CM MCA resv trans 2023-05-01\r\n BillingProfileName: string, // MS CM MCA resv trans 2023-05-01\r\n CostCenter: string, // MS CM EA resv trans 2023-05-01\r\n Currency: string, // MS CM EA+MCA resv trans 2023-05-01\r\n CurrentEnrollmentId: string, // MS CM EA resv trans 2023-05-01\r\n DepartmentName: string, // MS CM EA resv trans 2023-05-01\r\n Description: string, // MS CM EA+MCA resv trans 2023-05-01\r\n EventDate: datetime, // MS CM EA+MCA resv trans 2023-05-01\r\n EventType: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Invoice: string, // MS CM EA+MCA resv trans 2023-05-01\r\n InvoiceId: string, // MS CM EA+MCA resv trans 2023-05-01\r\n InvoiceSectionId: string, // MS CM MCA resv trans 2023-05-01\r\n InvoiceSectionName: string, // MS CM MCA resv trans 2023-05-01\r\n MonetaryCommitment: decimal, // MS CM EA resv trans 2023-05-01\r\n Overage: decimal, // MS CM EA resv trans 2023-05-01\r\n PurchasingEnrollment: string, // MS CM EA resv trans 2023-05-01\r\n PurchasingSubscriptionGuid: string, // MS CM EA+MCA resv trans 2023-05-01\r\n PurchasingSubscriptionName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Quantity: decimal, // MS CM EA+MCA resv trans 2023-05-01\r\n Region: string, // MS CM EA+MCA resv trans 2023-05-01\r\n ReservationOrderId: string, // MS CM EA+MCA resv trans 2023-05-01\r\n ReservationOrderName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Term: string, // MS CM EA+MCA resv trans 2023-05-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Transactions_raw ingestion mapping\r\n.create-or-alter table Transactions_raw ingestion parquet mapping \"Transactions_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"AccountName\", \"Properties\": { \"Field\": \"AccountName\" } },\r\n { \"Column\": \"AccountOwnerEmail\", \"Properties\": { \"Field\": \"AccountOwnerEmail\" } },\r\n { \"Column\": \"Amount\", \"Properties\": { \"Field\": \"Amount\" } },\r\n { \"Column\": \"ArmSkuName\", \"Properties\": { \"Field\": \"ArmSkuName\" } },\r\n { \"Column\": \"BillingFrequency\", \"Properties\": { \"Field\": \"BillingFrequency\" } },\r\n { \"Column\": \"BillingMonth\", \"Properties\": { \"Field\": \"BillingMonth\" } },\r\n { \"Column\": \"BillingProfileId\", \"Properties\": { \"Field\": \"BillingProfileId\" } },\r\n { \"Column\": \"BillingProfileName\", \"Properties\": { \"Field\": \"BillingProfileName\" } },\r\n { \"Column\": \"CostCenter\", \"Properties\": { \"Field\": \"CostCenter\" } },\r\n { \"Column\": \"Currency\", \"Properties\": { \"Field\": \"Currency\" } },\r\n { \"Column\": \"CurrentEnrollmentId\", \"Properties\": { \"Field\": \"CurrentEnrollmentId\" } },\r\n { \"Column\": \"DepartmentName\", \"Properties\": { \"Field\": \"DepartmentName\" } },\r\n { \"Column\": \"Description\", \"Properties\": { \"Field\": \"Description\" } },\r\n { \"Column\": \"EventDate\", \"Properties\": { \"Field\": \"EventDate\" } },\r\n { \"Column\": \"EventType\", \"Properties\": { \"Field\": \"EventType\" } },\r\n { \"Column\": \"Invoice\", \"Properties\": { \"Field\": \"Invoice\" } },\r\n { \"Column\": \"InvoiceId\", \"Properties\": { \"Field\": \"InvoiceId\" } },\r\n { \"Column\": \"InvoiceSectionId\", \"Properties\": { \"Field\": \"InvoiceSectionId\" } },\r\n { \"Column\": \"InvoiceSectionName\", \"Properties\": { \"Field\": \"InvoiceSectionName\" } },\r\n { \"Column\": \"MonetaryCommitment\", \"Properties\": { \"Field\": \"MonetaryCommitment\" } },\r\n { \"Column\": \"Overage\", \"Properties\": { \"Field\": \"Overage\" } },\r\n { \"Column\": \"PurchasingEnrollment\", \"Properties\": { \"Field\": \"PurchasingEnrollment\" } },\r\n { \"Column\": \"PurchasingSubscriptionGuid\", \"Properties\": { \"Field\": \"PurchasingSubscriptionGuid\" } },\r\n { \"Column\": \"PurchasingSubscriptionName\", \"Properties\": { \"Field\": \"PurchasingSubscriptionName\" } },\r\n { \"Column\": \"Quantity\", \"Properties\": { \"Field\": \"Quantity\" } },\r\n { \"Column\": \"Region\", \"Properties\": { \"Field\": \"Region\" } },\r\n { \"Column\": \"ReservationOrderId\", \"Properties\": { \"Field\": \"ReservationOrderId\" } },\r\n { \"Column\": \"ReservationOrderName\", \"Properties\": { \"Field\": \"ReservationOrderName\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Transactions_raw retention policy\r\n.alter-merge table Transactions_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Transactions_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All transactions transformed to FOCUS 1.0.', folder='Transactions')\r\nTransactions_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n Transactions_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Set source columns\r\n | extend x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationTransactions', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', ''))\r\n //\r\n // Handle BillingPeriodStart/End\r\n | extend BillingMonth = tostring(BillingMonth)\r\n | extend BillingPeriodStart = iff(isempty(BillingMonth), datetime(null), todatetime(strcat(substring(BillingMonth, 0, 4), \"-\", substring(BillingMonth, 4, 2), \"-\", substring(BillingMonth, 6, 2))))\r\n | extend BillingPeriodEnd = iff(isempty(BillingMonth), datetime(null), startofmonth(endofmonth(BillingPeriodStart) + 1d))\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n BilledCost = Amount,\r\n BillingAccountId = case(\r\n BillingProfileId startswith '/', BillingProfileId,\r\n isnotempty(CurrentEnrollmentId), strcat('/providers/Microsoft.Billing/billingAccounts/', CurrentEnrollmentId),\r\n isnotempty(BillingProfileId), strcat('/providers/Microsoft.Billing/billingProfiles/', BillingProfileId),\r\n ''\r\n ),\r\n BillingAccountName = coalesce(BillingProfileName, CurrentEnrollmentId),\r\n BillingCurrency = Currency,\r\n BillingPeriodEnd,\r\n BillingPeriodStart,\r\n ChargeCategory = case(\r\n EventType in ('Cancel', 'Purchase', 'Refund'), 'Purchase',\r\n 'Adjustment'\r\n ),\r\n ChargeClass = case(\r\n EventType == 'Cancel', 'Cancel', // FOCUS does not handle this scenario\r\n EventType == 'Refund', 'Correction',\r\n ''\r\n ),\r\n ChargeDescription = Description,\r\n ChargeFrequency = case(\r\n BillingFrequency == 'OneTime', 'One-Time',\r\n BillingFrequency == 'Recurring', 'Recurring',\r\n BillingFrequency\r\n ),\r\n ChargePeriodStart = EventDate,\r\n PricingQuantity = Quantity,\r\n PricingUnit = 'Reservations',\r\n ProviderName,\r\n RegionId = Region,\r\n RegionName = Region,\r\n SubAccountId = iff(isempty(PurchasingSubscriptionGuid), '', strcat('/subscriptions/', PurchasingSubscriptionGuid)),\r\n SubAccountName = iff(isempty(PurchasingSubscriptionGuid), '', PurchasingSubscriptionName),\r\n x_AccountName = AccountName,\r\n x_AccountOwnerId = AccountOwnerEmail,\r\n x_CostCenter = CostCenter,\r\n x_InvoiceId = InvoiceId,\r\n x_InvoiceNumber = Invoice,\r\n x_InvoiceSectionId = InvoiceSectionId,\r\n x_InvoiceSectionName = coalesce(InvoiceSectionName, DepartmentName),\r\n x_IngestionTime = ingestion_time(),\r\n x_MonetaryCommitment = MonetaryCommitment,\r\n x_Overage = Overage,\r\n x_PurchasingBillingAccountId = PurchasingEnrollment,\r\n x_SkuOrderId = ReservationOrderId,\r\n x_SkuOrderName = ReservationOrderName,\r\n x_SkuSize = ArmSkuName,\r\n x_SkuTerm = isoMonths(Term),\r\n x_SourceName,\r\n x_SourceProvider,\r\n x_SourceType,\r\n x_SourceVersion,\r\n x_SubscriptionId = PurchasingSubscriptionGuid,\r\n x_TransactionType = EventType\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Transactions_final_v1_0 table\r\n.create-merge table Transactions_final_v1_0 (\r\n BilledCost: decimal, // MS CM EA+MCA 2023-05-01\r\n BillingAccountId: string, // MS CM EA+MCA 2023-05-01\r\n BillingAccountName: string, // MS CM EA+MCA 2023-05-01\r\n BillingCurrency: string, // MS CM EA+MCA 2023-05-01\r\n BillingPeriodEnd: datetime, // MS CM EA+MCA 2023-05-01\r\n BillingPeriodStart: datetime, // MS CM EA+MCA 2023-05-01\r\n ChargeCategory: string, // Hubs add-on\r\n ChargeClass: string, // Hubs add-on\r\n ChargeDescription: string, // MS CM EA+MCA 2023-05-01\r\n ChargeFrequency: string, // MS CM EA+MCA 2023-05-01\r\n ChargePeriodStart: datetime, // MS CM EA+MCA 2023-05-01\r\n PricingQuantity: decimal, // MS CM EA+MCA 2023-05-01\r\n PricingUnit: string, // Hubs add-on\r\n ProviderName: string, // Hubs add-on\r\n RegionId: string, // MS CM EA+MCA 2023-05-01\r\n RegionName: string, // MS CM EA+MCA 2023-05-01\r\n SubAccountId: string, // MS CM EA+MCA 2023-05-01\r\n SubAccountName: string, // MS CM EA+MCA 2023-05-01\r\n x_AccountName: string, // MS CM EA 2023-05-01\r\n x_AccountOwnerId: string, // MS CM EA 2023-05-01\r\n x_CostCenter: string, // MS CM EA 2023-05-01\r\n x_InvoiceId: string, // MS CM MCA 2023-05-01\r\n x_InvoiceNumber: string, // MS CM MCA 2023-05-01\r\n x_InvoiceSectionId: string, // MS CM MCA 2023-05-01\r\n x_InvoiceSectionName: string, // MS CM MCA 2023-05-01\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_MonetaryCommitment: decimal, // MS CM EA 2023-05-01\r\n x_Overage: decimal, // MS CM EA 2023-05-01\r\n x_PurchasingBillingAccountId: string, // MS CM EA 2023-05-01\r\n x_SkuOrderId: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuOrderName: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuSize: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuTerm: int, // MS CM EA+MCA 2023-05-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_SubscriptionId: string, // MS CM EA+MCA 2023-05-01\r\n x_TransactionType: string // MS CM EA+MCA 2023-05-01\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Transactions_raw -> Transactions_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Transactions_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Transactions_raw\",\r\n \"Query\": \"Transactions_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n",
- "$fxv#3": "//======================================================================================================================\r\n// Common utility functions\r\n//\r\n// TIP: Use Ctrl+K,Ctrl+0 to collapse all regions in VS Code\r\n//======================================================================================================================\r\n\r\n\r\n//===| Date functions |=================================================================================================\r\n\r\n// daterange\r\n.create-or-alter function \r\nwith (docstring = @'Converts 2 dates into a simple, user-friendly date range (e.g. Jan 1-Jan 3)', folder =@'Common') \r\ndaterange(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n let month = (d: datetime) { let mo = toint(substring(d, 5, 2)) - 1; dynamic(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])[mo] };\r\n let day = (d: datetime) { toint(substring(d, 8, 2)) };\r\n let endDate = iff(end == datetime('0001-01-01'), start, end);\r\n let sameDay = startofday(start) == startofday(endDate);\r\n let sameMonth = startofmonth(start) == startofmonth(endDate);\r\n strcat(month(start), ' ', day(start), iff(sameDay, '', strcat('-', iff(sameMonth, '', strcat(month(endDate), ' ')), day(endDate))))\r\n}\r\n\r\n// monthsago\r\n.create-or-alter function \r\nwith (docstring = 'Gets the date that is the specified number of months ago', folder = 'Common')\r\nmonthsago(months: int)\r\n{\r\n datetime_add('month', -months, startofmonth(now()))\r\n}\r\n\r\n\r\n//===| Number comparisons |=============================================================================================\r\n// NOTE: Must be defined before string converters\r\n\r\n// delta\r\n.create-or-alter function \r\nwith (docstring = @'Compares 2 values and returns the percentage change from oldval to newval', folder =@'Common') \r\ndelta(oldval: double, newval: double)\r\n{\r\n (newval - todouble(oldval))/oldval\r\n}\r\n\r\n// percentOfTotal\r\n// NOTE: Must be before percent() function\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercentOfTotal(t: (Count: long), tot: long)\r\n{\r\n let total = todouble(tot);\r\n t \r\n | extend Percent = round(Count / total * 100, 3) \r\n | order by Count desc\r\n}\r\n\r\n// percent\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercent(t: (Count: long))\r\n{\r\n let total = todouble(toscalar(t | summarize sum(Count)));\r\n percentOfTotal(t, total)\r\n}\r\n\r\n// plusminus\r\n.create-or-alter function \r\nwith (docstring = 'Shows a +/- sign based on the direction of the number', folder = 'Common')\r\nplusminus(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, val, strcat('+', val))\r\n}\r\n\r\n// updown\r\n.create-or-alter function \r\nwith (docstring = 'Shows an up/down arrow based on the direction of the number', folder = 'Common')\r\nupdown(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, strcat('β', substring(val, 1)), strcat('β', val))\r\n}\r\n\r\n\r\n//===| String comparisons |=============================================================================================\r\n\r\n// percentstring\r\n// NOTE: Must be defined before deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a percentage and render as a string', folder = 'Common')\r\npercentstring(num: double, total: double = 1.0, places: int = 9)\r\n{\r\n let value = 1.0 * num / total * 100;\r\n strcat(case(\r\n places != 9, round(value, places),\r\n value < 10, round(value, 2),\r\n round(value, 1)\r\n ), '%')\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// arraystring\r\n.create-or-alter function \r\nwith (docstring = 'Convert an array to a comma-delimited string', folder = 'Common')\r\narraystring(arr: dynamic)\r\n{\r\n replace_string(replace_regex(replace_regex(replace_regex(replace_regex(replace_regex(\r\n tostring(arr)\r\n , @'^\\[\"', '')\r\n , @'\"\\]$', '')\r\n , @'^, ', '')\r\n , @', $', '')\r\n , @'^\\[]$', '')\r\n , '\",\"', ', ')\r\n}\r\n\r\n// deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a delta percentage and render as a string', folder = 'Common')\r\ndeltastring(oldval: double, newval: double, places: int = 1, useArrows: bool = false)\r\n{\r\n let d = delta(oldval, newval);\r\n strcat(case(useArrows and d > 0, 'β', useArrows and d < 0, 'β', d < 0, '-', ''), percentstring(abs(d), 1, places))\r\n}\r\n\r\n// diffstring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate the difference and render as a string', folder = 'Common')\r\ndiffstring(oldval: double, newval: double, places: int = 1)\r\n{\r\n plusminus(round(newval - oldval, places))\r\n}\r\n\r\n// numberstring\r\n.create-or-alter function \r\nwith (docstring = 'Convert a number to a string', folder = 'Common')\r\nnumberstring(num: long, abbrev: bool = true)\r\n{\r\n case(\r\n num >= 10000000000000, strcat(round(1.0 * num / 1000000000000, 1), 'T'),\r\n num >= 1000000000000, strcat(round(1.0 * num / 1000000000000, 2), 'T'),\r\n num >= 10000000000, strcat(round(1.0 * num / 1000000000, 1), 'B'),\r\n num >= 1000000000, strcat(round(1.0 * num / 1000000000, 2), 'B'),\r\n num >= 10000000, strcat(round(1.0 * num / 1000000, 1), 'M'),\r\n num >= 1000000, strcat(round(1.0 * num / 1000000, 2), 'M'),\r\n num >= 10000, strcat(round(1.0 * num / 1000, 1), 'K'),\r\n // Kusto doesn't support back-refs yet -- num > 1000, replace_regex(tostring(num), @'(\\d)(?=(\\d{3})+\\.)', @'\\1,'), // See https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/re2-library\r\n num > 1000, replace_regex(tostring(num), @'([0-9]{3})$', @',\\1'), //num / 1000, ',', substring(tostring(num), 0) - (num / 1000 * 1000)),\r\n tostring(num))\r\n}\r\n\r\n\r\n//===| Other |==========================================================================================================\r\n\r\n// ifempty\r\n.create-or-alter function \r\nwith (docstring = 'Replaces an empty value with the specified default value', folder = 'Common')\r\nifempty(val: dynamic, defaultVal: dynamic)\r\n{\r\n iff(isempty(val), defaultVal, val)\r\n}\r\n",
- "$fxv#4": "//======================================================================================================================\r\n// Hub database\r\n// Used for querying and reporting.\r\n//\r\n// Versioning strategy:\r\n// - Each dataset includes a function that returns the latest version of the data (e.g., \"Costs()\").\r\n// - Every supported version of FOCUS should have a corresponding function (e.g., \"Costs_v1_0\").\r\n// - Each versioned function unions data from versioned tables in the Ingestion database and transforms it to that FOCUS version for back compat.\r\n// - Consumers should use the unversioned function for the latest and the versioned functions for back compat.\r\n//\r\n// To add a new FOCUS versions:\r\n// 1. Add new FOCUS version section after the latest version section and before existing version sections\r\n// 2. Create new *_vX_Y functions per dataset that transforms older data to the new FOCUS version\r\n// 3. Update the unversioned functions to use the new *_vX_Y functions\r\n// 4. Update older versioned functions to also pull from the new *_vX_Y functions and transform to the old schema\r\n//======================================================================================================================\r\n\r\n// For allowed commands, see https://learn.microsoft.com/azure/data-explorer/database-script\r\n\r\n\r\n//======================================================================================================================\r\n// FOCUS 1.0\r\n//======================================================================================================================\r\n\r\n// CommitmentDiscountUsage_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all commitment discount usage records aligned to FOCUS 1.0.', folder = 'CommitmentDiscountUsage')\r\nCommitmentDiscountUsage_v1_0()\r\n{\r\n database('Ingestion').CommitmentDiscountUsage_final_v1_0\r\n}\r\n\r\n\r\n// Costs_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all cost and usage records aligned to FOCUS 1.0.', folder = 'Costs')\r\nCosts_v1_0()\r\n{\r\n database('Ingestion').Costs_final_v1_0\r\n}\r\n\r\n\r\n// Prices_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all prices aligned to FOCUS 1.0.', folder = 'Prices')\r\nPrices_v1_0()\r\n{\r\n database('Ingestion').Prices_final_v1_0\r\n}\r\n\r\n\r\n// Recommendations_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all recommendations aligned to FOCUS 1.0.', folder = 'Recommendations')\r\nRecommendations_v1_0()\r\n{\r\n database('Ingestion').Recommendations_final_v1_0\r\n}\r\n\r\n\r\n// Transactions_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all transactions aligned to FOCUS 1.0.', folder = 'Transactions')\r\nTransactions_v1_0()\r\n{\r\n database('Ingestion').Transactions_final_v1_0\r\n}\r\n\r\n\r\n//======================================================================================================================\r\n// Latest FOCUS version\r\n//======================================================================================================================\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all commitment discount usage records with the latest supported version of the FOCUS schema.', folder = 'CommitmentDiscountUsage')\r\nCommitmentDiscountUsage()\r\n{\r\n CommitmentDiscountUsage_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all cost and usage records with the latest supported version of the FOCUS schema.', folder = 'Costs')\r\nCosts()\r\n{\r\n Costs_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all prices with the latest supported version of the FOCUS schema.', folder = 'Prices')\r\nPrices()\r\n{\r\n Prices_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all recommendations with the latest supported version of the FOCUS schema.', folder = 'Recommendations')\r\nRecommendations()\r\n{\r\n Recommendations_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all transactions with the latest supported version of the FOCUS schema.', folder = 'Transactions')\r\nTransactions()\r\n{\r\n Transactions_v1_0()\r\n}\r\n",
+ "$fxv#0": "0.8",
+ "$fxv#1": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_1(id: string) {\r\n dynamic({\r\n \"arizeai.observabilityeval/organizations\": { \"SingularDisplayName\": \"Azure Native ArizeAi Cloud Service\" }\r\n ,\"astronomer.astro/organizations\": { \"SingularDisplayName\": \"Astro organization\" }\r\n ,\"citrix.services/xenappessentials\": { \"SingularDisplayName\": \"Citrix Virtual Apps Essentials\" }\r\n ,\"citrix.services/xendesktopessentials\": { \"SingularDisplayName\": \"Citrix Virtual Desktops Essentials\" }\r\n ,\"dell.storage/filesystems\": { \"SingularDisplayName\": \"Dell APEX File Storage, An Azure Native Service\" }\r\n ,\"dynatrace.observability/monitors\": { \"SingularDisplayName\": \"Dynatrace\" }\r\n ,\"github.network/networksettings\": { \"SingularDisplayName\": \"GitHub.Network network setting\" }\r\n ,\"informatica.datamanagement/organizations\": { \"SingularDisplayName\": \"Informatica Organization\" }\r\n ,\"lambdatest.hyperexecute/organizations\": { \"SingularDisplayName\": \"Azure Native LambdaTest Cloud Service\" }\r\n ,\"microsoft.aad/domainservices\": { \"SingularDisplayName\": \"Microsoft Entra Domain Services\" }\r\n ,\"microsoft.aadiam/diagnosticsettings\": { \"SingularDisplayName\": \"Microsoft.aadiam diagnostic setting\" }\r\n ,\"microsoft.aadiam/privatelinkforazuread\": { \"SingularDisplayName\": \"Private Link for Microsoft Entra ID\" }\r\n ,\"microsoft.advisor/advisorscore\": { \"SingularDisplayName\": \"Microsoft.Advisor advisor score\" }\r\n ,\"microsoft.advisor/configurations\": { \"SingularDisplayName\": \"Microsoft.Advisor configuration\" }\r\n ,\"microsoft.advisor/generaterecommendations\": { \"SingularDisplayName\": \"Microsoft.Advisor generate recommendation\" }\r\n ,\"microsoft.advisor/metadata\": { \"SingularDisplayName\": \"Microsoft.Advisor metadata\" }\r\n ,\"microsoft.advisor/recommendations\": { \"SingularDisplayName\": \"Microsoft.Advisor recommendation\" }\r\n ,\"microsoft.advisor/recommendations/suppressions\": { \"SingularDisplayName\": \"Microsoft.Advisor recommendations suppression\" }\r\n ,\"microsoft.agfoodplatform/farmbeats\": { \"SingularDisplayName\": \"Azure Data Manager for Agriculture\" }\r\n ,\"microsoft.agfoodplatform/farmbeatsextensiondefinitions\": { \"SingularDisplayName\": \"Microsoft.AgFoodPlatform farm beats extension definition\" }\r\n ,\"microsoft.agfoodplatform/farmbeatssolutiondefinitions\": { \"SingularDisplayName\": \"Microsoft.AgFoodPlatform farm beats solution definition\" }\r\n ,\"microsoft.agricultureplatform/agriservices\": { \"SingularDisplayName\": \"Microsoft.AgriculturePlatform agri service\" }\r\n ,\"microsoft.akshybrid/agentpools\": { \"SingularDisplayName\": \"Microsoft.AksHybrid agent pool\" }\r\n ,\"microsoft.akshybrid/provisionedclusters\": { \"SingularDisplayName\": \"Microsoft.AksHybrid provisioned cluster\" }\r\n ,\"microsoft.akshybrid/upgradeprofiles\": { \"SingularDisplayName\": \"Microsoft.AksHybrid upgrade profile\" }\r\n ,\"microsoft.alertsmanagement/actionrules\": { \"SingularDisplayName\": \"Alert processing rule\" }\r\n ,\"microsoft.alertsmanagement/alerts\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement alert\" }\r\n ,\"microsoft.alertsmanagement/alerts/enrichments\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement alerts enrichment\" }\r\n ,\"microsoft.alertsmanagement/prometheusrulegroups\": { \"SingularDisplayName\": \"Prometheus rule group\" }\r\n ,\"microsoft.alertsmanagement/smartdetectoralertrules\": { \"SingularDisplayName\": \"Smart detector alert rule\" }\r\n ,\"microsoft.alertsmanagement/smartgroups\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement smart group\" }\r\n ,\"microsoft.alertsmanagement/tenantactivitylogalerts\": { \"SingularDisplayName\": \"Microsoft.AlertsManagement tenant activity log alert\" }\r\n ,\"microsoft.all/arcvirtualmachines\": { \"SingularDisplayName\": \"Azure Arc virtual machine\" }\r\n ,\"microsoft.all/hcivirtualmachines\": { \"SingularDisplayName\": \"Azure Stack HCI Virtual Machine - Azure Arc\" }\r\n ,\"microsoft.all/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine\" }\r\n ,\"microsoft.analysisservices/servers\": { \"SingularDisplayName\": \"Analysis Services server\" }\r\n ,\"microsoft.anybuild/clusters\": { \"SingularDisplayName\": \"AnyBuild cluster\" }\r\n ,\"microsoft.apicenter/deletedservices\": { \"SingularDisplayName\": \"Microsoft.ApiCenter deleted service\" }\r\n ,\"microsoft.apicenter/services\": { \"SingularDisplayName\": \"API Center\" }\r\n ,\"microsoft.apicenter/services/workspaces\": { \"SingularDisplayName\": \"Workspace\" }\r\n ,\"microsoft.apimanagement/gateways\": { \"SingularDisplayName\": \"API Management gateway\" }\r\n ,\"microsoft.apimanagement/gateways/configconnections\": { \"SingularDisplayName\": \"Microsoft.ApiManagement gateways config connection\" }\r\n ,\"microsoft.apimanagement/service\": { \"SingularDisplayName\": \"API Management service\" }\r\n ,\"microsoft.apimanagement/service/workspaces\": { \"SingularDisplayName\": \"Workspace\" }\r\n ,\"microsoft.apisecurity/defendersettings\": { \"SingularDisplayName\": \"Microsoft.ApiSecurity defender setting\" }\r\n ,\"microsoft.app/builders\": { \"SingularDisplayName\": \"Microsoft.App builder\" }\r\n ,\"microsoft.app/builders/builds\": { \"SingularDisplayName\": \"Microsoft.App builders build\" }\r\n ,\"microsoft.app/connectedenvironments\": { \"SingularDisplayName\": \"Container Apps Connected Environment\" }\r\n ,\"microsoft.app/containerapps\": { \"SingularDisplayName\": \"Container App\" }\r\n ,\"microsoft.app/jobs\": { \"SingularDisplayName\": \"Container App Job\" }\r\n ,\"microsoft.app/logicapps\": { \"SingularDisplayName\": \"Logic app\" }\r\n ,\"microsoft.app/logicapps/workflows\": { \"SingularDisplayName\": \"Logic app workflow\" }\r\n ,\"microsoft.app/managedenvironments\": { \"SingularDisplayName\": \"Container Apps Environment\" }\r\n ,\"microsoft.app/sessionpools\": { \"SingularDisplayName\": \"Container App Session Pool\" }\r\n ,\"microsoft.app/spaces\": { \"SingularDisplayName\": \"App Space\" }\r\n ,\"microsoft.appassessment/migrateprojects\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate project\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessment\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments/assessedapplications\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessments assessed application\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments/assessedmachines\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessments assessed machine\" }\r\n ,\"microsoft.appassessment/migrateprojects/assessments/machinestoassess\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects assessments machines to asses\" }\r\n ,\"microsoft.appassessment/migrateprojects/sites\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects site\" }\r\n ,\"microsoft.appassessment/migrateprojects/sites/applianceconfigurations\": { \"SingularDisplayName\": \"Microsoft.AppAssessment migrate projects sites appliance configuration\" }\r\n ,\"microsoft.appcomplianceautomation/reports\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation report\" }\r\n ,\"microsoft.appcomplianceautomation/reports/evidences\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports evidence\" }\r\n ,\"microsoft.appcomplianceautomation/reports/scopingconfigurations\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports scoping configuration\" }\r\n ,\"microsoft.appcomplianceautomation/reports/snapshots\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports snapshot\" }\r\n ,\"microsoft.appcomplianceautomation/reports/webhooks\": { \"SingularDisplayName\": \"Microsoft.AppComplianceAutomation reports webhook\" }\r\n ,\"microsoft.appconfiguration/configurationstores\": { \"SingularDisplayName\": \"App Configuration\" }\r\n ,\"microsoft.appplatform/spring\": { \"SingularDisplayName\": \"Azure Spring Apps\" }\r\n ,\"microsoft.appsecurity/policies\": { \"SingularDisplayName\": \"App Protect Policy\" }\r\n ,\"microsoft.arc/all\": { \"SingularDisplayName\": \"Azure Arc enabled resource\" }\r\n ,\"microsoft.arc/allfairfax\": { \"SingularDisplayName\": \"Azure Arc enabled resource\" }\r\n ,\"microsoft.arc/kubernetesresources\": { \"SingularDisplayName\": \"Azure Arc Kubernetes cluster\" }\r\n ,\"microsoft.arc/kubernetesresourcesfairfax\": { \"SingularDisplayName\": \"Azure Arc Kubernetes cluster\" }\r\n ,\"microsoft.arcnetworking/arcnwloadbalancers\": { \"SingularDisplayName\": \"Microsoft.ArcNetworking arc nw load balancer\" }\r\n ,\"microsoft.attestation/attestationproviders\": { \"SingularDisplayName\": \"Attestation provider\" }\r\n ,\"microsoft.authorization/accessreviewhistorydefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization access review history definition\" }\r\n ,\"microsoft.authorization/accessreviewscheduledefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule definition\" }\r\n ,\"microsoft.authorization/accessreviewscheduledefinitions/instances\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule definitions instance\" }\r\n ,\"microsoft.authorization/accessreviewscheduledefinitions/instances/decisions\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule definitions instances decision\" }\r\n ,\"microsoft.authorization/accessreviewschedulesettings\": { \"SingularDisplayName\": \"Microsoft.Authorization access review schedule setting\" }\r\n ,\"microsoft.authorization/datapolicymanifests\": { \"SingularDisplayName\": \"Microsoft.Authorization data policy manifest\" }\r\n ,\"microsoft.authorization/denyassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization deny assignment\" }\r\n ,\"microsoft.authorization/locks\": { \"SingularDisplayName\": \"Microsoft.Authorization lock\" }\r\n ,\"microsoft.authorization/policyassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization policy assignment\" }\r\n ,\"microsoft.authorization/policydefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy definition\" }\r\n ,\"microsoft.authorization/policydefinitions/versions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy definitions version\" }\r\n ,\"microsoft.authorization/policyexemptions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy exemption\" }\r\n ,\"microsoft.authorization/policysetdefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy set definition\" }\r\n ,\"microsoft.authorization/policysetdefinitions/versions\": { \"SingularDisplayName\": \"Microsoft.Authorization policy set definitions version\" }\r\n ,\"microsoft.authorization/privatelinkassociations\": { \"SingularDisplayName\": \"Microsoft.Authorization private link association\" }\r\n ,\"microsoft.authorization/provideroperations\": { \"SingularDisplayName\": \"Microsoft.Authorization provider operation\" }\r\n ,\"microsoft.authorization/resourcemanagementprivatelinks\": { \"SingularDisplayName\": \"Resource management private link\" }\r\n ,\"microsoft.authorization/roleassignmentapprovals\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment approval\" }\r\n ,\"microsoft.authorization/roleassignmentapprovals/stages\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment approvals stage\" }\r\n ,\"microsoft.authorization/roleassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment\" }\r\n ,\"microsoft.authorization/roleassignmentscheduleinstances\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment schedule instance\" }\r\n ,\"microsoft.authorization/roleassignmentschedulerequests\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment schedule request\" }\r\n ,\"microsoft.authorization/roleassignmentschedules\": { \"SingularDisplayName\": \"Microsoft.Authorization role assignment schedule\" }\r\n ,\"microsoft.authorization/roledefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization role definition\" }\r\n ,\"microsoft.authorization/roleeligibilityscheduleinstances\": { \"SingularDisplayName\": \"Microsoft.Authorization role eligibility schedule instance\" }\r\n ,\"microsoft.authorization/roleeligibilityschedulerequests\": { \"SingularDisplayName\": \"Microsoft.Authorization role eligibility schedule request\" }\r\n ,\"microsoft.authorization/roleeligibilityschedules\": { \"SingularDisplayName\": \"Microsoft.Authorization role eligibility schedule\" }\r\n ,\"microsoft.authorization/rolemanagementalertconfigurations\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert configuration\" }\r\n ,\"microsoft.authorization/rolemanagementalertdefinitions\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert definition\" }\r\n ,\"microsoft.authorization/rolemanagementalertoperations\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert operation\" }\r\n ,\"microsoft.authorization/rolemanagementalerts\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alert\" }\r\n ,\"microsoft.authorization/rolemanagementalerts/alertincidents\": { \"SingularDisplayName\": \"Microsoft.Authorization role management alerts alert incident\" }\r\n ,\"microsoft.authorization/rolemanagementpolicies\": { \"SingularDisplayName\": \"Microsoft.Authorization role management policy\" }\r\n ,\"microsoft.authorization/rolemanagementpolicyassignments\": { \"SingularDisplayName\": \"Microsoft.Authorization role management policy assignment\" }\r\n ,\"microsoft.automanage/bestpractices\": { \"SingularDisplayName\": \"Microsoft.Automanage best practice\" }\r\n ,\"microsoft.automanage/bestpractices/versions\": { \"SingularDisplayName\": \"Microsoft.Automanage best practices version\" }\r\n ,\"microsoft.automanage/configurationprofileassignments\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profile assignment\" }\r\n ,\"microsoft.automanage/configurationprofileassignments/reports\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profile assignments report\" }\r\n ,\"microsoft.automanage/configurationprofiles\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profile\" }\r\n ,\"microsoft.automanage/configurationprofiles/versions\": { \"SingularDisplayName\": \"Microsoft.Automanage configuration profiles version\" }\r\n ,\"microsoft.automanage/serviceprincipals\": { \"SingularDisplayName\": \"ServicePrincipals\" }\r\n ,\"microsoft.automation/automationaccounts\": { \"SingularDisplayName\": \"Automation account\" }\r\n ,\"microsoft.automation/automationaccounts/hybridrunbookworkergroups\": { \"SingularDisplayName\": \"Automation hybrid worker group\" }\r\n ,\"microsoft.automation/automationaccounts/runbooks\": { \"SingularDisplayName\": \"Automation runbook\" }\r\n ,\"microsoft.autonomousdevelopmentplatform/accounts\": { \"SingularDisplayName\": \"Microsoft.AutonomousDevelopmentPlatform account\" }\r\n ,\"microsoft.autonomousdevelopmentplatform/accounts/datapools\": { \"SingularDisplayName\": \"Microsoft.AutonomousDevelopmentPlatform accounts data pool\" }\r\n ,\"microsoft.autonomousdevelopmentplatform/workspaces\": { \"SingularDisplayName\": \"Microsoft.AutonomousDevelopmentPlatform workspace\" }\r\n ,\"microsoft.avs/privateclouds\": { \"SingularDisplayName\": \"Azure VMware Solution private cloud\" }\r\n ,\"microsoft.awsconnector/accessanalyzeranalyzers\": { \"SingularDisplayName\": \"Access Analyzer Analyzer\" }\r\n ,\"microsoft.awsconnector/acmcertificatesummaries\": { \"SingularDisplayName\": \"ACM Certificate Summary\" }\r\n ,\"microsoft.awsconnector/apigatewayrestapis\": { \"SingularDisplayName\": \"Api Gateway Rest Api\" }\r\n ,\"microsoft.awsconnector/apigatewaystages\": { \"SingularDisplayName\": \"Api Gateway Stage\" }\r\n ,\"microsoft.awsconnector/applicationautoscalingscalabletargets\": { \"SingularDisplayName\": \"Application Auto Scaling Scalable Target\" }\r\n ,\"microsoft.awsconnector/appsyncgraphqlapis\": { \"SingularDisplayName\": \"App Sync Graphql Api\" }\r\n ,\"microsoft.awsconnector/autoscalingautoscalinggroups\": { \"SingularDisplayName\": \"Auto Scaling Auto Scaling Group\" }\r\n ,\"microsoft.awsconnector/cloudformationstacks\": { \"SingularDisplayName\": \"Cloud Formation Stack\" }\r\n ,\"microsoft.awsconnector/cloudformationstacksets\": { \"SingularDisplayName\": \"Cloud Formation Stack Set\" }\r\n ,\"microsoft.awsconnector/cloudfrontdistributions\": { \"SingularDisplayName\": \"Cloud Front Distribution\" }\r\n ,\"microsoft.awsconnector/cloudtrailtrails\": { \"SingularDisplayName\": \"Cloud Trail Trail\" }\r\n ,\"microsoft.awsconnector/cloudwatchalarms\": { \"SingularDisplayName\": \"Cloud Watch Alarm\" }\r\n ,\"microsoft.awsconnector/codebuildprojects\": { \"SingularDisplayName\": \"Code Build Project\" }\r\n ,\"microsoft.awsconnector/codebuildsourcecredentialsinfos\": { \"SingularDisplayName\": \"Code Build Source Credentials Info\" }\r\n ,\"microsoft.awsconnector/configserviceconfigurationrecorders\": { \"SingularDisplayName\": \"Config Service Configuration Recorder\" }\r\n ,\"microsoft.awsconnector/configserviceconfigurationrecorderstatuses\": { \"SingularDisplayName\": \"Config Service Configuration Recorder Status\" }\r\n ,\"microsoft.awsconnector/configservicedeliverychannels\": { \"SingularDisplayName\": \"Config Service Delivery Channel\" }\r\n ,\"microsoft.awsconnector/databasemigrationservicereplicationinstances\": { \"SingularDisplayName\": \"Database Migration Service Replication Instance\" }\r\n ,\"microsoft.awsconnector/daxclusters\": { \"SingularDisplayName\": \"DAX Cluster\" }\r\n ,\"microsoft.awsconnector/dynamodbcontinuousbackupsdescriptions\": { \"SingularDisplayName\": \"Dynamo DB Continuous Backups Description\" }\r\n ,\"microsoft.awsconnector/dynamodbtables\": { \"SingularDisplayName\": \"Dynamo DB Table\" }\r\n ,\"microsoft.awsconnector/ec2accountattributes\": { \"SingularDisplayName\": \"EC2 Account Attribute\" }\r\n ,\"microsoft.awsconnector/ec2addresses\": { \"SingularDisplayName\": \"EC2 Address\" }\r\n ,\"microsoft.awsconnector/ec2flowlogs\": { \"SingularDisplayName\": \"EC2 Flow Log\" }\r\n ,\"microsoft.awsconnector/ec2images\": { \"SingularDisplayName\": \"EC2 Image\" }\r\n ,\"microsoft.awsconnector/ec2instances\": { \"SingularDisplayName\": \"Microsoft.AwsConnector ec2 instance\" }\r\n ,\"microsoft.awsconnector/ec2instancestatuses\": { \"SingularDisplayName\": \"EC2 Instance Status\" }\r\n ,\"microsoft.awsconnector/ec2ipams\": { \"SingularDisplayName\": \"EC2 Ipam\" }\r\n ,\"microsoft.awsconnector/ec2keypairs\": { \"SingularDisplayName\": \"EC2 Key Pair\" }\r\n ,\"microsoft.awsconnector/ec2networkacls\": { \"SingularDisplayName\": \"EC2 Network Acl\" }\r\n ,\"microsoft.awsconnector/ec2networkinterfaces\": { \"SingularDisplayName\": \"EC2 Network Interface\" }\r\n ,\"microsoft.awsconnector/ec2routetables\": { \"SingularDisplayName\": \"EC2 Route Table\" }\r\n ,\"microsoft.awsconnector/ec2securitygroups\": { \"SingularDisplayName\": \"EC2 Security Group\" }\r\n ,\"microsoft.awsconnector/ec2snapshots\": { \"SingularDisplayName\": \"EC2 Snapshot\" }\r\n ,\"microsoft.awsconnector/ec2subnets\": { \"SingularDisplayName\": \"EC2 Subnet\" }\r\n ,\"microsoft.awsconnector/ec2volumes\": { \"SingularDisplayName\": \"EC2 Volume\" }\r\n ,\"microsoft.awsconnector/ec2vpcendpoints\": { \"SingularDisplayName\": \"EC2 VPCEndpoint\" }\r\n ,\"microsoft.awsconnector/ec2vpcpeeringconnections\": { \"SingularDisplayName\": \"EC2 VPCPeering Connection\" }\r\n ,\"microsoft.awsconnector/ec2vpcs\": { \"SingularDisplayName\": \"EC2 VPC\" }\r\n ,\"microsoft.awsconnector/ecrimagedetails\": { \"SingularDisplayName\": \"ECR Image Detail\" }\r\n ,\"microsoft.awsconnector/ecrrepositories\": { \"SingularDisplayName\": \"ECR Repository\" }\r\n ,\"microsoft.awsconnector/ecsclusters\": { \"SingularDisplayName\": \"ECS Cluster\" }\r\n ,\"microsoft.awsconnector/ecsservices\": { \"SingularDisplayName\": \"ECS Service\" }\r\n ,\"microsoft.awsconnector/ecstaskdefinitions\": { \"SingularDisplayName\": \"ECS Task Definition\" }\r\n ,\"microsoft.awsconnector/efsfilesystems\": { \"SingularDisplayName\": \"EFS File System\" }\r\n ,\"microsoft.awsconnector/efsmounttargets\": { \"SingularDisplayName\": \"EFS Mount Target\" }\r\n ,\"microsoft.awsconnector/eksnodegroups\": { \"SingularDisplayName\": \"EKS Nodegroup\" }\r\n ,\"microsoft.awsconnector/elasticbeanstalkapplications\": { \"SingularDisplayName\": \"Elastic Beanstalk Application\" }\r\n ,\"microsoft.awsconnector/elasticbeanstalkconfigurationtemplates\": { \"SingularDisplayName\": \"Elastic Beanstalk Configuration Template\" }\r\n ,\"microsoft.awsconnector/elasticbeanstalkenvironments\": { \"SingularDisplayName\": \"Elastic Beanstalk Environment\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2listeners\": { \"SingularDisplayName\": \"Elastic Load Balancing V2 Listener\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2loadbalancers\": { \"SingularDisplayName\": \"Elastic Load Balancing V2 Load Balancer\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2targetgroups\": { \"SingularDisplayName\": \"Elastic Load Balancing V2 Target Group\" }\r\n ,\"microsoft.awsconnector/elasticloadbalancingv2targethealthdescriptions\": { \"SingularDisplayName\": \"Elastic Load Balancing v2 Target Health Description\" }\r\n ,\"microsoft.awsconnector/elasticsearchdomains\": { \"SingularDisplayName\": \"Elasticsearch Domain\" }\r\n ,\"microsoft.awsconnector/emrclusters\": { \"SingularDisplayName\": \"EMR Cluster\" }\r\n ,\"microsoft.awsconnector/guarddutydetectors\": { \"SingularDisplayName\": \"Guard Duty Detector\" }\r\n ,\"microsoft.awsconnector/iamaccesskeylastuseds\": { \"SingularDisplayName\": \"IAM Access Key Last Used\" }\r\n ,\"microsoft.awsconnector/iamaccesskeymetadata\": { \"SingularDisplayName\": \"IAM Access Key Metadata\" }\r\n ,\"microsoft.awsconnector/iamgroups\": { \"SingularDisplayName\": \"IAM Group\" }\r\n ,\"microsoft.awsconnector/iaminstanceprofiles\": { \"SingularDisplayName\": \"IAM Instance Profile\" }\r\n ,\"microsoft.awsconnector/iammanagedpolicies\": { \"SingularDisplayName\": \"IAM Managed Policy\" }\r\n ,\"microsoft.awsconnector/iammfadevices\": { \"SingularDisplayName\": \"IAM MFADevice\" }\r\n ,\"microsoft.awsconnector/iampasswordpolicies\": { \"SingularDisplayName\": \"IAM Password Policy\" }\r\n ,\"microsoft.awsconnector/iampolicyversions\": { \"SingularDisplayName\": \"IAM Policy Version\" }\r\n ,\"microsoft.awsconnector/iamroles\": { \"SingularDisplayName\": \"IAM Role\" }\r\n ,\"microsoft.awsconnector/iamservercertificates\": { \"SingularDisplayName\": \"IAM Server Certificate\" }\r\n ,\"microsoft.awsconnector/iamuserpolicies\": { \"SingularDisplayName\": \"IAM User Policy\" }\r\n ,\"microsoft.awsconnector/iamvirtualmfadevices\": { \"SingularDisplayName\": \"IAM Virtual MFADevice\" }\r\n ,\"microsoft.awsconnector/kmsaliases\": { \"SingularDisplayName\": \"KMS Alias\" }\r\n ,\"microsoft.awsconnector/kmskeys\": { \"SingularDisplayName\": \"KMS Key\" }\r\n ,\"microsoft.awsconnector/lambdafunctioncodelocations\": { \"SingularDisplayName\": \"Lambda Function Code Location\" }\r\n ,\"microsoft.awsconnector/lambdafunctionconfigurations\": { \"SingularDisplayName\": \"Microsoft.AwsConnector lambda function configuration\" }\r\n ,\"microsoft.awsconnector/lambdafunctions\": { \"SingularDisplayName\": \"Lambda Function\" }\r\n ,\"microsoft.awsconnector/licensemanagerlicenses\": { \"SingularDisplayName\": \"License Manager License\" }\r\n ,\"microsoft.awsconnector/lightsailbuckets\": { \"SingularDisplayName\": \"Lightsail Bucket\" }\r\n ,\"microsoft.awsconnector/lightsailinstances\": { \"SingularDisplayName\": \"Lightsail Instance\" }\r\n ,\"microsoft.awsconnector/logsloggroups\": { \"SingularDisplayName\": \"Logs Log Group\" }\r\n ,\"microsoft.awsconnector/logslogstreams\": { \"SingularDisplayName\": \"Logs Log Stream\" }\r\n ,\"microsoft.awsconnector/logsmetricfilters\": { \"SingularDisplayName\": \"Logs Metric Filter\" }\r\n ,\"microsoft.awsconnector/logssubscriptionfilters\": { \"SingularDisplayName\": \"Logs Subscription Filter\" }\r\n ,\"microsoft.awsconnector/macie2jobsummaries\": { \"SingularDisplayName\": \"Macie2 Job Summary\" }\r\n ,\"microsoft.awsconnector/macieallowlists\": { \"SingularDisplayName\": \"Macie Allow List\" }\r\n ,\"microsoft.awsconnector/networkfirewallfirewallpolicies\": { \"SingularDisplayName\": \"Network Firewall Firewall Policy\" }\r\n ,\"microsoft.awsconnector/networkfirewallfirewalls\": { \"SingularDisplayName\": \"Network Firewall Firewall\" }\r\n ,\"microsoft.awsconnector/networkfirewallrulegroups\": { \"SingularDisplayName\": \"Network Firewall Rule Group\" }\r\n ,\"microsoft.awsconnector/opensearchdomainstatuses\": { \"SingularDisplayName\": \"Open Search Domain Status\" }\r\n ,\"microsoft.awsconnector/opensearchservicedomains\": { \"SingularDisplayName\": \"Open Search Service Domain\" }\r\n ,\"microsoft.awsconnector/organizationsaccounts\": { \"SingularDisplayName\": \"Organizations Account\" }\r\n ,\"microsoft.awsconnector/organizationsorganizations\": { \"SingularDisplayName\": \"Organizations Organization\" }\r\n ,\"microsoft.awsconnector/rdsdbclusters\": { \"SingularDisplayName\": \"RDS DBCluster\" }\r\n ,\"microsoft.awsconnector/rdsdbinstances\": { \"SingularDisplayName\": \"RDS DBInstance\" }\r\n ,\"microsoft.awsconnector/rdsdbsnapshotattributesresults\": { \"SingularDisplayName\": \"RDS DBSnapshot Attributes Result\" }\r\n ,\"microsoft.awsconnector/rdsdbsnapshots\": { \"SingularDisplayName\": \"RDS DBSnapshot\" }\r\n ,\"microsoft.awsconnector/rdseventsubscriptions\": { \"SingularDisplayName\": \"RDS Event Subscription\" }\r\n ,\"microsoft.awsconnector/rdsexporttasks\": { \"SingularDisplayName\": \"RDS Export Task\" }\r\n ,\"microsoft.awsconnector/redshiftclusterparametergroups\": { \"SingularDisplayName\": \"Redshift Cluster Parameter Group\" }\r\n ,\"microsoft.awsconnector/redshiftclusters\": { \"SingularDisplayName\": \"Redshift Cluster\" }\r\n ,\"microsoft.awsconnector/route53domainsdomainsummaries\": { \"SingularDisplayName\": \"Route 53 Domains Domain Summary\" }\r\n ,\"microsoft.awsconnector/route53hostedzones\": { \"SingularDisplayName\": \"Route53 Hosted Zone\" }\r\n ,\"microsoft.awsconnector/route53resourcerecordsets\": { \"SingularDisplayName\": \"Route 53 Resource Record Set\" }\r\n ,\"microsoft.awsconnector/s3accesscontrolpolicies\": { \"SingularDisplayName\": \"S3 Access Control Policy\" }\r\n ,\"microsoft.awsconnector/s3accesspoints\": { \"SingularDisplayName\": \"S3 Access Point\" }\r\n ,\"microsoft.awsconnector/s3bucketpolicies\": { \"SingularDisplayName\": \"S3 Bucket Policy\" }\r\n ,\"microsoft.awsconnector/s3buckets\": { \"SingularDisplayName\": \"S3 Bucket\" }\r\n ,\"microsoft.awsconnector/s3controlmultiregionaccesspointpolicydocuments\": { \"SingularDisplayName\": \"S3 Control Multi Region Access Point Policy Document\" }\r\n ,\"microsoft.awsconnector/sagemakerapps\": { \"SingularDisplayName\": \"Sage Maker App\" }\r\n ,\"microsoft.awsconnector/sagemakerdevices\": { \"SingularDisplayName\": \"Sage Maker Device\" }\r\n ,\"microsoft.awsconnector/sagemakerimages\": { \"SingularDisplayName\": \"Sage Maker Image\" }\r\n ,\"microsoft.awsconnector/sagemakernotebookinstancesummaries\": { \"SingularDisplayName\": \"Sage Maker Notebook Instance Summary\" }\r\n ,\"microsoft.awsconnector/secretsmanagerresourcepolicies\": { \"SingularDisplayName\": \"Secrets Manager Resource Policy\" }\r\n ,\"microsoft.awsconnector/secretsmanagersecrets\": { \"SingularDisplayName\": \"Secrets Manager Secret\" }\r\n ,\"microsoft.awsconnector/snssubscriptions\": { \"SingularDisplayName\": \"SNS Subscription\" }\r\n ,\"microsoft.awsconnector/snstopics\": { \"SingularDisplayName\": \"SNS Topic\" }\r\n ,\"microsoft.awsconnector/sqsqueues\": { \"SingularDisplayName\": \"SQS Queue\" }\r\n ,\"microsoft.awsconnector/ssminstanceinformations\": { \"SingularDisplayName\": \"SSM Instance Information\" }\r\n ,\"microsoft.awsconnector/ssmparameters\": { \"SingularDisplayName\": \"SSM Parameter\" }\r\n ,\"microsoft.awsconnector/ssmresourcecompliancesummaryitems\": { \"SingularDisplayName\": \"SSM Resource Compliance Summary Item\" }\r\n ,\"microsoft.awsconnector/wafv2ipsets\": { \"SingularDisplayName\": \"WAFv2 IPSet\" }\r\n ,\"microsoft.awsconnector/wafv2loggingconfigurations\": { \"SingularDisplayName\": \"WAFv2 Logging Configuration\" }\r\n ,\"microsoft.awsconnector/wafv2webaclassociations\": { \"SingularDisplayName\": \"WAFv2 Web ACLAssociation\" }\r\n ,\"microsoft.awsconnector/wafwebaclsummaries\": { \"SingularDisplayName\": \"WAF Web ACLSummary\" }\r\n ,\"microsoft.azureactivedirectory/b2cdirectories\": { \"SingularDisplayName\": \"B2C tenant\" }\r\n ,\"microsoft.azureactivedirectory/ciamdirectories\": { \"SingularDisplayName\": \"External Configuration Tenant\" }\r\n ,\"microsoft.azureactivedirectory/guestusages\": { \"SingularDisplayName\": \"Guest Usage\" }\r\n ,\"microsoft.azurearcdata/datacontrollers\": { \"SingularDisplayName\": \"Azure Arc data controller\" }\r\n ,\"microsoft.azurearcdata/postgresinstances\": { \"SingularDisplayName\": \"PostgreSQL server ? Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlmanagedinstances\": { \"SingularDisplayName\": \"SQL managed instance - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlserveresulicenses\": { \"SingularDisplayName\": \"SQL Server ESU license\" }\r\n ,\"microsoft.azurearcdata/sqlserverinstances\": { \"SingularDisplayName\": \"SQL Server - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlserverinstances/databases\": { \"SingularDisplayName\": \"SQL Server database - Azure Arc\" }\r\n ,\"microsoft.azurearcdata/sqlserverlicenses\": { \"SingularDisplayName\": \"SQL Server License\" }\r\n ,\"microsoft.azurebusinesscontinuity/deletedunifiedprotecteditems\": { \"SingularDisplayName\": \"Microsoft.AzureBusinessContinuity deleted unified protected item\" }\r\n ,\"microsoft.azurebusinesscontinuity/unifiedprotecteditems\": { \"SingularDisplayName\": \"Microsoft.AzureBusinessContinuity unified protected item\" }\r\n ,\"microsoft.azurecis/aadapplications\": { \"SingularDisplayName\": \"Microsoft.AzureCis AAD application\" }\r\n ,\"microsoft.azurecis/autopilotenvironments\": { \"SingularDisplayName\": \"Microsoft.AzureCis autopilot environment\" }\r\n ,\"microsoft.azurecis/dsmsallowlists\": { \"SingularDisplayName\": \"Microsoft.AzureCis ds msallowlist\" }\r\n ,\"microsoft.azurecis/dsmsrootfolders\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsms root folder\" }\r\n ,\"microsoft.azurecis/dstsapplications\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsts application\" }\r\n ,\"microsoft.azurecis/dstsserviceaccounts\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsts service account\" }\r\n ,\"microsoft.azurecis/dstsserviceclientidentities\": { \"SingularDisplayName\": \"Microsoft.AzureCis dsts service client identity\" }\r\n ,\"microsoft.azurecis/genericgenevaactions\": { \"SingularDisplayName\": \"Microsoft.AzureCis generic geneva action\" }\r\n ,\"microsoft.azurecis/plannedquotas\": { \"SingularDisplayName\": \"Microsoft.AzureCis planned quota\" }\r\n ,\"microsoft.azurecis/publishconfigvalues\": { \"SingularDisplayName\": \"Microsoft.AzureCis publish config value\" }\r\n ,\"microsoft.azurecis/pushagentv2accounts\": { \"SingularDisplayName\": \"Microsoft.AzureCis push agent v2 account\" }\r\n ,\"microsoft.azuredatatransfer/connections\": { \"SingularDisplayName\": \"Connection\" }\r\n ,\"microsoft.azuredatatransfer/connections/flows\": { \"SingularDisplayName\": \"Flow\" }\r\n ,\"microsoft.azuredatatransfer/pipelines\": { \"SingularDisplayName\": \"Pipeline\" }\r\n ,\"microsoft.azurefleet/fleets\": { \"SingularDisplayName\": \"Compute Fleet\" }\r\n ,\"microsoft.azurefleet/fleetscomputehub\": { \"SingularDisplayName\": \"Compute Fleet\" }\r\n ,\"microsoft.azureimagetestingforlinux/jobs\": { \"SingularDisplayName\": \"Microsoft.AzureImageTestingForLinux job\" }\r\n ,\"microsoft.azureimagetestingforlinux/jobtemplates\": { \"SingularDisplayName\": \"Microsoft.AzureImageTestingForLinux job template\" }\r\n ,\"microsoft.azurelargeinstance/azurelargeinstances\": { \"SingularDisplayName\": \"Azure Large Instance\" }\r\n ,\"microsoft.azurelargeinstance/azurelargestorageinstances\": { \"SingularDisplayName\": \"Microsoft.AzureLargeInstance Azure large storage instance\" }\r\n ,\"microsoft.azurepercept/accounts\": { \"SingularDisplayName\": \"Microsoft.AzurePercept account\" }\r\n ,\"microsoft.azurepercept/accounts/devices\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts device\" }\r\n ,\"microsoft.azurepercept/accounts/devices/sensors\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts devices sensor\" }\r\n ,\"microsoft.azurepercept/accounts/sensors\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts sensor\" }\r\n ,\"microsoft.azurepercept/accounts/solutioninstances\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts solutioninstance\" }\r\n ,\"microsoft.azurepercept/accounts/solutions\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts solution\" }\r\n ,\"microsoft.azurepercept/accounts/targets\": { \"SingularDisplayName\": \"Microsoft.AzurePercept accounts target\" }\r\n ,\"microsoft.azureplaywrightservice/accounts\": { \"SingularDisplayName\": \"Playwright Testing\" }\r\n ,\"microsoft.azurescan/scanningaccounts\": { \"SingularDisplayName\": \"ESRP Scan\" }\r\n ,\"microsoft.azuresphere/catalogs\": { \"SingularDisplayName\": \"Azure Sphere Catalog\" }\r\n ,\"microsoft.azurespherev2/catalogs\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalog\" }\r\n ,\"microsoft.azurespherev2/catalogs/artifacts\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs artifact\" }\r\n ,\"microsoft.azurespherev2/catalogs/certificates\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs certificate\" }\r\n ,\"microsoft.azurespherev2/catalogs/deviceregistrations\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs device registration\" }\r\n ,\"microsoft.azurespherev2/catalogs/provisioningpackages\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs provisioning package\" }\r\n ,\"microsoft.azurespherev2/catalogs/syndicationchannels\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs syndication channel\" }\r\n ,\"microsoft.azurespherev2/catalogs/syndicationchannels/deployments\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs syndication channels deployment\" }\r\n ,\"microsoft.azurespherev2/catalogs/updatepackages\": { \"SingularDisplayName\": \"Microsoft.AzureSphereV2 catalogs update package\" }\r\n ,\"microsoft.azurestack/cloudmanifestfiles\": { \"SingularDisplayName\": \"Microsoft.AzureStack cloud manifest file\" }\r\n ,\"microsoft.azurestack/linkedsubscriptions\": { \"SingularDisplayName\": \"Microsoft.AzureStack linked subscription\" }\r\n ,\"microsoft.azurestack/registrations\": { \"SingularDisplayName\": \"Microsoft.AzureStack registration\" }\r\n ,\"microsoft.azurestack/registrations/customersubscriptions\": { \"SingularDisplayName\": \"Microsoft.AzureStack registrations customer subscription\" }\r\n ,\"microsoft.azurestack/registrations/products\": { \"SingularDisplayName\": \"Microsoft.AzureStack registrations product\" }\r\n ,\"microsoft.azurestackhci/clusters\": { \"SingularDisplayName\": \"Azure Stack HCI\" }\r\n ,\"microsoft.azurestackhci/edgedevices\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge device\" }\r\n ,\"microsoft.azurestackhci/edgedevices/jobs\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI edge devices job\" }\r\n ,\"microsoft.azurestackhci/edgenodepools\": { \"SingularDisplayName\": \"Azure Stack\" }\r\n ,\"microsoft.azurestackhci/galleryimages\": { \"SingularDisplayName\": \"Azure Stack HCI Gallery image\" }\r\n ,\"microsoft.azurestackhci/logicalnetworks\": { \"SingularDisplayName\": \"Azure Stack HCI Logical network\" }\r\n ,\"microsoft.azurestackhci/marketplacegalleryimages\": { \"SingularDisplayName\": \"Azure Stack HCI Marketplace Gallery image\" }\r\n ,\"microsoft.azurestackhci/networkinterfaces\": { \"SingularDisplayName\": \"Azure Stack HCI VM Network Interface\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI network security group\" }\r\n ,\"microsoft.azurestackhci/networksecuritygroups/securityrules\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI network security groups security rule\" }\r\n ,\"microsoft.azurestackhci/storagecontainers\": { \"SingularDisplayName\": \"Azure Stack HCI Storage path\" }\r\n ,\"microsoft.azurestackhci/virtualharddisks\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual hard disk\" }\r\n ,\"microsoft.azurestackhci/virtualmachineinstances\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual machine instance\" }\r\n ,\"microsoft.azurestackhci/virtualmachineinstances/guestagents\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual machine instances guest agent\" }\r\n ,\"microsoft.azurestackhci/virtualmachineinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual machine instances hybrid identity metadata\" }\r\n ,\"microsoft.azurestackhci/virtualmachines\": { \"SingularDisplayName\": \"Azure Stack HCI virtual machine - Azure Arc\" }\r\n ,\"microsoft.azurestackhci/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.AzureStackHCI virtual network\" }\r\n ,\"microsoft.backupsolutions/vmwareapplications\": { \"SingularDisplayName\": \"Microsoft.BackupSolutions vmware application\" }\r\n ,\"microsoft.bakeryhybrid/pies\": { \"SingularDisplayName\": \"Microsoft.BakeryHybrid py\" }\r\n ,\"microsoft.bakeryhybrid/pies/nestedresourcetype\": { \"SingularDisplayName\": \"Microsoft.BakeryHybrid pies nested resource type\" }\r\n ,\"microsoft.baremetal/baremetalconnections\": { \"SingularDisplayName\": \"Microsoft.BareMetal bare metal connection\" }\r\n ,\"microsoft.baremetal/crayservers\": { \"SingularDisplayName\": \"Cray Server\" }\r\n ,\"microsoft.baremetal/monitoringservers\": { \"SingularDisplayName\": \"Monitoring Server\" }\r\n ,\"microsoft.baremetalinfrastructure/baremetalinstances\": { \"SingularDisplayName\": \"BareMetal Instance\" }\r\n ,\"microsoft.baremetalinfrastructure/baremetalstorageinstances\": { \"SingularDisplayName\": \"Microsoft.BareMetalInfrastructure bare metal storage instance\" }\r\n ,\"microsoft.batch/batchaccounts\": { \"SingularDisplayName\": \"Batch account\" }\r\n ,\"microsoft.billing/billingaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing billing account\" }\r\n ,\"microsoft.billing/billingaccounts/agreements\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts agreement\" }\r\n ,\"microsoft.billing/billingaccounts/associatedtenants\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts associated tenant\" }\r\n ,\"microsoft.billing/billingaccounts/availablebalance\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts available balance\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profile\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/availablebalance\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles available balance\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customer\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customers billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customers billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/customers/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles customers transfer\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/instructions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles instruction\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoices\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice section\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections product\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/invoicesections/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles invoice sections transfer\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/paymentmethodlinks\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles payment method link\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/policies\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles policy\" }\r\n ,\"microsoft.billing/billingaccounts/billingprofiles/transactions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing profiles transaction\" }\r\n ,\"microsoft.billing/billingaccounts/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/billingsubscriptionaliases\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing subscription aliase\" }\r\n ,\"microsoft.billing/billingaccounts/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/billingsubscriptions/invoices\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts billing subscriptions invoice\" }\r\n ,\"microsoft.billing/billingaccounts/customers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customer\" }\r\n ,\"microsoft.billing/billingaccounts/customers/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customers billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/customers/policies\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customers policy\" }\r\n ,\"microsoft.billing/billingaccounts/customers/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts customers product\" }\r\n ,\"microsoft.billing/billingaccounts/departments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts department\" }\r\n ,\"microsoft.billing/billingaccounts/departments/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts departments billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/departments/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts departments billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/departments/enrollmentaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts departments enrollment account\" }\r\n ,\"microsoft.billing/billingaccounts/enrollmentaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts enrollment account\" }\r\n ,\"microsoft.billing/billingaccounts/enrollmentaccounts/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts enrollment accounts billing role assignment\" }\r\n ,\"microsoft.billing/billingaccounts/enrollmentaccounts/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts enrollment accounts billing role definition\" }\r\n ,\"microsoft.billing/billingaccounts/incentiveschedules\": { \"SingularDisplayName\": \"Incentive Schedule\" }\r\n ,\"microsoft.billing/billingaccounts/incentiveschedules/milestones\": { \"SingularDisplayName\": \"Milestone\" }\r\n ,\"microsoft.billing/billingaccounts/invoices\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice section\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections/billingsubscriptions\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice sections billing subscription\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice sections product\" }\r\n ,\"microsoft.billing/billingaccounts/invoicesections/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts invoice sections transfer\" }\r\n ,\"microsoft.billing/billingaccounts/lineofcredit\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts line of credit\" }\r\n ,\"microsoft.billing/billingaccounts/paymentmethods\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts payment method\" }\r\n ,\"microsoft.billing/billingaccounts/policies\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts policy\" }\r\n ,\"microsoft.billing/billingaccounts/products\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts product\" }\r\n ,\"microsoft.billing/billingaccounts/reservationorders\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts reservation order\" }\r\n ,\"microsoft.billing/billingaccounts/reservationorders/reservations\": { \"SingularDisplayName\": \"Microsoft.Billing billing accounts reservation orders reservation\" }\r\n ,\"microsoft.billing/billingaccounts/savingsplanorders\": { \"SingularDisplayName\": \"Savings plan order\" }\r\n ,\"microsoft.billing/billingaccounts/savingsplanorders/savingsplans\": { \"SingularDisplayName\": \"Savings plan\" }\r\n ,\"microsoft.billing/billingperiods\": { \"SingularDisplayName\": \"Microsoft.Billing billing period\" }\r\n ,\"microsoft.billing/billingproperty\": { \"SingularDisplayName\": \"Microsoft.Billing billing property\" }\r\n ,\"microsoft.billing/billingrequests\": { \"SingularDisplayName\": \"Microsoft.Billing billing request\" }\r\n ,\"microsoft.billing/billingroleassignments\": { \"SingularDisplayName\": \"Microsoft.Billing billing role assignment\" }\r\n ,\"microsoft.billing/billingroledefinitions\": { \"SingularDisplayName\": \"Microsoft.Billing billing role definition\" }\r\n ,\"microsoft.billing/enrollmentaccounts\": { \"SingularDisplayName\": \"Microsoft.Billing enrollment account\" }\r\n ,\"microsoft.billing/paymentmethods\": { \"SingularDisplayName\": \"Microsoft.Billing payment method\" }\r\n ,\"microsoft.billing/policies\": { \"SingularDisplayName\": \"Microsoft.Billing policy\" }\r\n ,\"microsoft.billing/promotions\": { \"SingularDisplayName\": \"Microsoft.Billing promotion\" }\r\n ,\"microsoft.billing/transfers\": { \"SingularDisplayName\": \"Microsoft.Billing transfer\" }\r\n ,\"microsoft.billingbenefits/incentiveschedules\": { \"SingularDisplayName\": \"Incentive Schedule\" }\r\n ,\"microsoft.billingbenefits/incentiveschedules/milestones\": { \"SingularDisplayName\": \"Milestone\" }\r\n ,\"microsoft.billingbenefits/maccs\": { \"SingularDisplayName\": \"Microsoft Azure Consumption Commitment\" }\r\n ,\"microsoft.billingbenefits/reservationorderaliases\": { \"SingularDisplayName\": \"Microsoft.BillingBenefits reservation order aliase\" }\r\n ,\"microsoft.billingbenefits/savingsplanorderaliases\": { \"SingularDisplayName\": \"Microsoft.BillingBenefits savings plan order aliase\" }\r\n ,\"microsoft.billingbenefits/savingsplanorders\": { \"SingularDisplayName\": \"Savings plan order\" }\r\n ,\"microsoft.billingbenefits/savingsplanorders/savingsplans\": { \"SingularDisplayName\": \"Savings plan\" }\r\n ,\"microsoft.bing/accounts\": { \"SingularDisplayName\": \"Bing Resource\" }\r\n ,\"microsoft.blockchain/blockchainmembers\": { \"SingularDisplayName\": \"Microsoft.Blockchain blockchain member\" }\r\n ,\"microsoft.blockchain/blockchainmembers/transactionnodes\": { \"SingularDisplayName\": \"Microsoft.Blockchain blockchain members transaction node\" }\r\n ,\"microsoft.blockchaintokens/tokenservices\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token service\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/blockchainnetworks\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services blockchain network\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/groups\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services group\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/groups/accounts\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services groups account\" }\r\n ,\"microsoft.blockchaintokens/tokenservices/tokentemplates\": { \"SingularDisplayName\": \"Microsoft.BlockchainTokens token services token template\" }\r\n ,\"microsoft.bluefin/instances\": { \"SingularDisplayName\": \"Microsoft.Bluefin instance\" }\r\n ,\"microsoft.bluefin/instances/datasets\": { \"SingularDisplayName\": \"Microsoft.Bluefin instances dataset\" }\r\n ,\"microsoft.bluefin/instances/pipelines\": { \"SingularDisplayName\": \"Microsoft.Bluefin instances pipeline\" }\r\n ,\"microsoft.blueprint/blueprintassignments\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprint assignment\" }\r\n ,\"microsoft.blueprint/blueprints\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprint\" }\r\n ,\"microsoft.blueprint/blueprints/artifacts\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprints artifact\" }\r\n ,\"microsoft.blueprint/blueprints/versions\": { \"SingularDisplayName\": \"Microsoft.Blueprint blueprints version\" }\r\n ,\"microsoft.botservice/botservices\": { \"SingularDisplayName\": \"Bot Service\" }\r\n ,\"microsoft.cache/redis\": { \"SingularDisplayName\": \"Redis cache\" }\r\n ,\"microsoft.cache/redisenterprise\": { \"SingularDisplayName\": \"Redis Enterprise cluster\" }\r\n ,\"microsoft.cache/redisenterprise/databases\": { \"SingularDisplayName\": \"Redis Enterprise database\" }\r\n ,\"microsoft.capacity/reservationorders\": { \"SingularDisplayName\": \"Reservation order\" }\r\n ,\"microsoft.capacity/reservationorders/reservations\": { \"SingularDisplayName\": \"Reservation\" }\r\n ,\"microsoft.cascade/sites\": { \"SingularDisplayName\": \"Microsoft.Cascade site\" }\r\n ,\"microsoft.cdn/cdnwebapplicationfirewallpolicies\": { \"SingularDisplayName\": \"Content Delivery Network WAF policy\" }\r\n ,\"microsoft.cdn/profiles\": { \"SingularDisplayName\": \"Front Door and CDN profile\" }\r\n ,\"microsoft.cdn/profiles/afdendpoints\": { \"SingularDisplayName\": \"Endpoint\" }\r\n ,\"microsoft.cdn/profiles/afdendpoints/routes\": { \"SingularDisplayName\": \"Route\" }\r\n ,\"microsoft.cdn/profiles/customdomains\": { \"SingularDisplayName\": \"Custom domain\" }\r\n ,\"microsoft.cdn/profiles/endpoints\": { \"SingularDisplayName\": \"CDN endpoint\" }\r\n ,\"microsoft.cdn/profiles/endpoints/customdomains\": { \"SingularDisplayName\": \"CDN custom domain\" }\r\n ,\"microsoft.cdn/profiles/endpoints/origins\": { \"SingularDisplayName\": \"CDN origin\" }\r\n ,\"microsoft.cdn/profiles/origingroups\": { \"SingularDisplayName\": \"Origin group\" }\r\n ,\"microsoft.cdn/profiles/origingroups/origins\": { \"SingularDisplayName\": \"Origin\" }\r\n ,\"microsoft.cdn/profiles/rulesets\": { \"SingularDisplayName\": \"Rule set\" }\r\n ,\"microsoft.cdn/profiles/rulesets/rules\": { \"SingularDisplayName\": \"Rule\" }\r\n ,\"microsoft.cdn/profiles/secrets\": { \"SingularDisplayName\": \"Secret\" }\r\n ,\"microsoft.cdn/profiles/securitypolicies\": { \"SingularDisplayName\": \"Security policy\" }\r\n ,\"microsoft.certificateregistration/certificateorders\": { \"SingularDisplayName\": \"App Service certificate\" }\r\n ,\"microsoft.certify/testsuites\": { \"SingularDisplayName\": \"Microsoft.Certify test suite\" }\r\n ,\"microsoft.certify/validationjobs\": { \"SingularDisplayName\": \"Microsoft.Certify validation job\" }\r\n ,\"microsoft.changeanalysis/profile\": { \"SingularDisplayName\": \"Microsoft.ChangeAnalysis profile\" }\r\n ,\"microsoft.chaos/experiments\": { \"SingularDisplayName\": \"Chaos Experiment\" }\r\n ,\"microsoft.chaos/privateaccesses\": { \"SingularDisplayName\": \"Agent Private Access\" }\r\n ,\"microsoft.chaos/targets\": { \"SingularDisplayName\": \"Microsoft.Chaos target\" }\r\n ,\"microsoft.chaos/targets/capabilities\": { \"SingularDisplayName\": \"Microsoft.Chaos targets capability\" }\r\n ,\"microsoft.classiccompute/domainnames\": { \"SingularDisplayName\": \"Cloud service (classic)\" }\r\n ,\"microsoft.classiccompute/domainnames/slots/roles\": { \"SingularDisplayName\": \"Cloud service role (classic)\" }\r\n ,\"microsoft.classiccompute/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine (classic)\" }\r\n ,\"microsoft.classicnetwork/networksecuritygroups\": { \"SingularDisplayName\": \"Network security group (classic)\" }\r\n ,\"microsoft.classicnetwork/reservedips\": { \"SingularDisplayName\": \"Reserved IP address (classic)\" }\r\n ,\"microsoft.classicnetwork/virtualnetworks\": { \"SingularDisplayName\": \"Virtual network (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts\": { \"SingularDisplayName\": \"Storage account (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts/disks\": { \"SingularDisplayName\": \"Disk (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts/osimages\": { \"SingularDisplayName\": \"OS image (classic)\" }\r\n ,\"microsoft.classicstorage/storageaccounts/vmimages\": { \"SingularDisplayName\": \"VM image (classic)\" }\r\n ,\"microsoft.cleanroom/cleanrooms\": { \"SingularDisplayName\": \"Microsoft.CleanRoom cleanroom\" }\r\n ,\"microsoft.cleanroom/microservices\": { \"SingularDisplayName\": \"Microsoft.CleanRoom microservice\" }\r\n ,\"microsoft.cloud/hubs\": { \"SingularDisplayName\": \"FinOps hub\" }\r\n ,\"microsoft.clouddeviceplatform/delegatedidentities\": { \"SingularDisplayName\": \"Microsoft.CloudDevicePlatform delegated identity\" }\r\n ,\"microsoft.cloudhealth/healthmodels\": { \"SingularDisplayName\": \"Health Model\" }\r\n ,\"microsoft.cloudtest/accounts\": { \"SingularDisplayName\": \"CloudTest Account\" }\r\n ,\"microsoft.cloudtest/buildcaches\": { \"SingularDisplayName\": \"1ES Build Cache\" }\r\n ,\"microsoft.cloudtest/hostedpools\": { \"SingularDisplayName\": \"1ES Hosted Pool\" }\r\n ,\"microsoft.cloudtest/images\": { \"SingularDisplayName\": \"1ES Image\" }\r\n ,\"microsoft.cloudtest/pools\": { \"SingularDisplayName\": \"CloudTest Pool\" }\r\n ,\"microsoft.clusterstor/nodes\": { \"SingularDisplayName\": \"ClusterStor\" }\r\n ,\"microsoft.codesigning/codesigningaccounts\": { \"SingularDisplayName\": \"Trusted Signing Account\" }\r\n ,\"microsoft.codespaces/plans\": { \"SingularDisplayName\": \"Microsoft.Codespaces plan\" }\r\n ,\"microsoft.cognitiveservices/accounts\": { \"SingularDisplayName\": \"Azure AI services\" }\r\n ,\"microsoft.cognitiveservices/commitmentplans\": { \"SingularDisplayName\": \"Microsoft.CognitiveServices commitment plan\" }\r\n ,\"microsoft.cognitiveservices/commitmentplans/accountassociations\": { \"SingularDisplayName\": \"Microsoft.CognitiveServices commitment plans account association\" }\r\n ,\"microsoft.communication/communicationservices\": { \"SingularDisplayName\": \"Communication Service\" }\r\n ,\"microsoft.communication/emailservices\": { \"SingularDisplayName\": \"Email Communication Service\" }\r\n ,\"microsoft.communication/emailservices/domains\": { \"SingularDisplayName\": \"Email Communication Services Domain\" }\r\n ,\"microsoft.community/communitytrainings\": { \"SingularDisplayName\": \"Community Training\" }\r\n ,\"microsoft.compositesolutions/compositesolutiondefinitions\": { \"SingularDisplayName\": \"Microsoft.CompositeSolutions composite solution definition\" }\r\n ,\"microsoft.compositesolutions/compositesolutions\": { \"SingularDisplayName\": \"Microsoft.CompositeSolutions composite solution\" }\r\n ,\"microsoft.compute/availabilitysets\": { \"SingularDisplayName\": \"Availability set\" }\r\n ,\"microsoft.compute/capacityreservationgroups\": { \"SingularDisplayName\": \"Capacity Reservation Group\" }\r\n ,\"microsoft.compute/capacityreservationgroups/capacityreservations\": { \"SingularDisplayName\": \"Capacity reservation\" }\r\n ,\"microsoft.compute/capacityreservationgroupscomputehub\": { \"SingularDisplayName\": \"Capacity Reservation Group\" }\r\n ,\"microsoft.compute/cloudservices\": { \"SingularDisplayName\": \"Cloud service (extended support)\" }\r\n ,\"microsoft.compute/computefleetinstances\": { \"SingularDisplayName\": \"Instance\" }\r\n ,\"microsoft.compute/diskaccesses\": { \"SingularDisplayName\": \"Disk Access\" }\r\n ,\"microsoft.compute/diskencryptionsets\": { \"SingularDisplayName\": \"Disk Encryption Set\" }\r\n ,\"microsoft.compute/disks\": { \"SingularDisplayName\": \"Disk\" }\r\n ,\"microsoft.compute/galleries\": { \"SingularDisplayName\": \"Azure compute gallery\" }\r\n ,\"microsoft.compute/galleries/applications\": { \"SingularDisplayName\": \"VM application definition\" }\r\n ,\"microsoft.compute/galleries/applications/versions\": { \"SingularDisplayName\": \"VM application version\" }\r\n ,\"microsoft.compute/galleries/images\": { \"SingularDisplayName\": \"VM image definition\" }\r\n ,\"microsoft.compute/galleries/images/versions\": { \"SingularDisplayName\": \"VM image version\" }\r\n ,\"microsoft.compute/galleries/imagescomputehub\": { \"SingularDisplayName\": \"VM image definition\" }\r\n ,\"microsoft.compute/hostgroups\": { \"SingularDisplayName\": \"Host group\" }\r\n ,\"microsoft.compute/hostgroups/hosts\": { \"SingularDisplayName\": \"Host\" }\r\n ,\"microsoft.compute/hostgroupscomputehub\": { \"SingularDisplayName\": \"Host group\" }\r\n ,\"microsoft.compute/images\": { \"SingularDisplayName\": \"Image\" }\r\n ,\"microsoft.compute/imagescomputehub\": { \"SingularDisplayName\": \"Image\" }\r\n ,\"microsoft.compute/locations/communitygalleries/images\": { \"SingularDisplayName\": \"Community image\" }\r\n ,\"microsoft.compute/locations/communitygalleries/imagescomputehub\": { \"SingularDisplayName\": \"Community image\" }\r\n ,\"microsoft.compute/proximityplacementgroups\": { \"SingularDisplayName\": \"Proximity placement group\" }\r\n ,\"microsoft.compute/proximityplacementgroupscomputehub\": { \"SingularDisplayName\": \"Proximity placement group\" }\r\n ,\"microsoft.compute/restorepointcollections\": { \"SingularDisplayName\": \"Restore Point Collection\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#2": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_2(id: string) {\r\n dynamic({\r\n \"microsoft.compute/restorepointcollections/restorepoints\": { \"SingularDisplayName\": \"Restore Point\" }\r\n ,\"microsoft.compute/snapshots\": { \"SingularDisplayName\": \"Snapshot\" }\r\n ,\"microsoft.compute/sshpublickeys\": { \"SingularDisplayName\": \"SSH key\" }\r\n ,\"microsoft.compute/standbypoolinstance\": { \"SingularDisplayName\": \"Standby pool\" }\r\n ,\"microsoft.compute/virtualmachinecomputehub\": { \"SingularDisplayName\": \"Virtual machine\" }\r\n ,\"microsoft.compute/virtualmachineflexinstances\": { \"SingularDisplayName\": \"Instance\" }\r\n ,\"microsoft.compute/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine\" }\r\n ,\"microsoft.compute/virtualmachines/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.compute/virtualmachinescalesets\": { \"SingularDisplayName\": \"Virtual machine scale set\" }\r\n ,\"microsoft.compute/virtualmachinescalesets/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.compute/virtualmachinescalesets/virtualmachines\": { \"SingularDisplayName\": \"Virtual machine scale set instance\" }\r\n ,\"microsoft.compute/virtualmachinescalesets/virtualmachines/networkinterfaces/ipconfigurations/publicipaddresses\": { \"SingularDisplayName\": \"Public IP address\" }\r\n ,\"microsoft.computehub/advisorcost\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisoroperationalexcellence\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisorperformance\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisorreliability\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/advisorsecurity\": { \"SingularDisplayName\": \"Recommendations\" }\r\n ,\"microsoft.computehub/all\": { \"SingularDisplayName\": \"All resources\" }\r\n ,\"microsoft.computehub/backup\": { \"SingularDisplayName\": \"Backup job\" }\r\n ,\"microsoft.computehub/computehubmain\": { \"SingularDisplayName\": \"Compute infrastructure\" }\r\n ,\"microsoft.computehub/healthevents\": { \"SingularDisplayName\": \"Health events\" }\r\n ,\"microsoft.computehub/linuxostype\": { \"SingularDisplayName\": \"Linux OS\" }\r\n ,\"microsoft.computehub/microsoftdefenderfreetrialsubscription\": { \"SingularDisplayName\": \"Microsoft defender\" }\r\n ,\"microsoft.computehub/microsoftdefenderstandardsubscription\": { \"SingularDisplayName\": \"Microsoft defender\" }\r\n ,\"microsoft.computehub/outages\": { \"SingularDisplayName\": \"Outages\" }\r\n ,\"microsoft.computehub/powerstatedeallocated\": { \"SingularDisplayName\": \"Power states\" }\r\n ,\"microsoft.computehub/powerstaterunning\": { \"SingularDisplayName\": \"Power states\" }\r\n ,\"microsoft.computehub/powerstatestopped\": { \"SingularDisplayName\": \"Power states\" }\r\n ,\"microsoft.computehub/provisioningstatefailedresources\": { \"SingularDisplayName\": \"Provisioning states\" }\r\n ,\"microsoft.computehub/provisioningstatesucceededresources\": { \"SingularDisplayName\": \"Provisioning states\" }\r\n ,\"microsoft.computehub/windowsostype\": { \"SingularDisplayName\": \"Windows OS\" }\r\n ,\"microsoft.computeschedule/autoactions\": { \"SingularDisplayName\": \"Microsoft.ComputeSchedule auto action\" }\r\n ,\"microsoft.computeschedule/autoactions/occurrences\": { \"SingularDisplayName\": \"Microsoft.ComputeSchedule auto actions occurrence\" }\r\n ,\"microsoft.confidentialledger/ledgers\": { \"SingularDisplayName\": \"Confidential Ledger\" }\r\n ,\"microsoft.confidentialledger/managedccfs\": { \"SingularDisplayName\": \"Managed CCF App\" }\r\n ,\"microsoft.confluent/agreements\": { \"SingularDisplayName\": \"Microsoft.Confluent agreement\" }\r\n ,\"microsoft.confluent/organizations\": { \"SingularDisplayName\": \"Confluent organization\" }\r\n ,\"microsoft.connectedcache/cachenodes\": { \"SingularDisplayName\": \"Connected Cache for ISP (early preview)\" }\r\n ,\"microsoft.connectedcache/enterprisecustomers\": { \"SingularDisplayName\": \"Connected Cache for Enterprise & Education (early preview)\" }\r\n ,\"microsoft.connectedcache/enterprisemcccustomers\": { \"SingularDisplayName\": \"Connected Cache for Enterprise & Education\" }\r\n ,\"microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes\": { \"SingularDisplayName\": \"MCC CacheNode for Enterprise\" }\r\n ,\"microsoft.connectedcache/ispcustomers\": { \"SingularDisplayName\": \"Connected Cache for ISP\" }\r\n ,\"microsoft.connectedcredentials/credentials\": { \"SingularDisplayName\": \"Microsoft.ConnectedCredentials credential\" }\r\n ,\"microsoft.connectedvehicle/platformaccounts\": { \"SingularDisplayName\": \"Microsoft.ConnectedVehicle platform account\" }\r\n ,\"microsoft.connectedvmwarevsphere/clusters\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere cluster\" }\r\n ,\"microsoft.connectedvmwarevsphere/datastores\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere datastore\" }\r\n ,\"microsoft.connectedvmwarevsphere/hosts\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere host\" }\r\n ,\"microsoft.connectedvmwarevsphere/resourcepools\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere resource pool\" }\r\n ,\"microsoft.connectedvmwarevsphere/vcenters\": { \"SingularDisplayName\": \"VMware vCenter\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachineinstances\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine instance\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachineinstances/guestagents\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine instances guest agent\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachineinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine instances hybrid identity metadata\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachines\": { \"SingularDisplayName\": \"VMware + AVS virtual machine\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachines/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualmachinetemplates\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual machine template\" }\r\n ,\"microsoft.connectedvmwarevsphere/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.ConnectedVMwarevSphere virtual network\" }\r\n ,\"microsoft.consumption/budgets\": { \"SingularDisplayName\": \"Microsoft.Consumption budget\" }\r\n ,\"microsoft.consumption/credits\": { \"SingularDisplayName\": \"Microsoft.Consumption credit\" }\r\n ,\"microsoft.consumption/pricesheets\": { \"SingularDisplayName\": \"Microsoft.Consumption pricesheet\" }\r\n ,\"microsoft.containerinstance/containergroupprofiles\": { \"SingularDisplayName\": \"Microsoft.ContainerInstance container group profile\" }\r\n ,\"microsoft.containerinstance/containergroupprofiles/revisions\": { \"SingularDisplayName\": \"Microsoft.ContainerInstance container group profiles revision\" }\r\n ,\"microsoft.containerinstance/containergroups\": { \"SingularDisplayName\": \"Container instances\" }\r\n ,\"microsoft.containerinstance/ngroups\": { \"SingularDisplayName\": \"Microsoft.ContainerInstance ngroup\" }\r\n ,\"microsoft.containerregistry/registries\": { \"SingularDisplayName\": \"Container registry\" }\r\n ,\"microsoft.containerregistry/registries/replications\": { \"SingularDisplayName\": \"Container registry replication\" }\r\n ,\"microsoft.containerregistry/registries/scopemaps\": { \"SingularDisplayName\": \"Container registry scope map\" }\r\n ,\"microsoft.containerregistry/registries/tokens\": { \"SingularDisplayName\": \"Container registry token\" }\r\n ,\"microsoft.containerregistry/registries/webhooks\": { \"SingularDisplayName\": \"Container registry webhook\" }\r\n ,\"microsoft.containerservice/fleets\": { \"SingularDisplayName\": \"Kubernetes fleet manager\" }\r\n ,\"microsoft.containerservice/managedclusters\": { \"SingularDisplayName\": \"Kubernetes service\" }\r\n ,\"microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions\": { \"SingularDisplayName\": \"Kubernetes service extension\" }\r\n ,\"microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations\": { \"SingularDisplayName\": \"GitOps configuration\" }\r\n ,\"microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces\": { \"SingularDisplayName\": \"Kubernetes namespace\" }\r\n ,\"microsoft.containerservice/managedclustersnapshots\": { \"SingularDisplayName\": \"Microsoft.ContainerService managedclustersnapshot\" }\r\n ,\"microsoft.containerservice/snapshots\": { \"SingularDisplayName\": \"Microsoft.ContainerService snapshot\" }\r\n ,\"microsoft.containerstorage/pools\": { \"SingularDisplayName\": \"Container storage\" }\r\n ,\"microsoft.contoso/clusters\": { \"SingularDisplayName\": \"Microsoft.Contoso cluster\" }\r\n ,\"microsoft.contoso/employees\": { \"SingularDisplayName\": \"Microsoft.Contoso employee\" }\r\n ,\"microsoft.contoso/employees/desks\": { \"SingularDisplayName\": \"Microsoft.Contoso employees desk\" }\r\n ,\"microsoft.contoso/employees/nestedresourcetype\": { \"SingularDisplayName\": \"Microsoft.Contoso employees nested resource type\" }\r\n ,\"microsoft.contoso/employees/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Contoso employees private endpoint connection\" }\r\n ,\"microsoft.contoso/employees/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Contoso employees private link resource\" }\r\n ,\"microsoft.contoso/extensionresourcetype\": { \"SingularDisplayName\": \"Microsoft.Contoso extension resource type\" }\r\n ,\"microsoft.costmanagement/alerts\": { \"SingularDisplayName\": \"Microsoft.CostManagement alert\" }\r\n ,\"microsoft.costmanagement/budgets\": { \"SingularDisplayName\": \"Microsoft.CostManagement budget\" }\r\n ,\"microsoft.costmanagement/cloudconnectors\": { \"SingularDisplayName\": \"Microsoft.CostManagement cloud connector\" }\r\n ,\"microsoft.costmanagement/connectors\": { \"SingularDisplayName\": \"Microsoft.CostManagement connector\" }\r\n ,\"microsoft.costmanagement/costallocationrules\": { \"SingularDisplayName\": \"Microsoft.CostManagement cost allocation rule\" }\r\n ,\"microsoft.costmanagement/costdetailsoperationresults\": { \"SingularDisplayName\": \"Microsoft.CostManagement cost details operation result\" }\r\n ,\"microsoft.costmanagement/exports\": { \"SingularDisplayName\": \"Microsoft.CostManagement export\" }\r\n ,\"microsoft.costmanagement/externalbillingaccounts\": { \"SingularDisplayName\": \"Microsoft.CostManagement external billing account\" }\r\n ,\"microsoft.costmanagement/externalsubscriptions\": { \"SingularDisplayName\": \"Microsoft.CostManagement external subscription\" }\r\n ,\"microsoft.costmanagement/markuprules\": { \"SingularDisplayName\": \"Microsoft.CostManagement markup rule\" }\r\n ,\"microsoft.costmanagement/operationstatus\": { \"SingularDisplayName\": \"Microsoft.CostManagement operation statu\" }\r\n ,\"microsoft.costmanagement/reportconfigs\": { \"SingularDisplayName\": \"Microsoft.CostManagement reportconfig\" }\r\n ,\"microsoft.costmanagement/reports\": { \"SingularDisplayName\": \"Microsoft.CostManagement report\" }\r\n ,\"microsoft.costmanagement/scheduledactions\": { \"SingularDisplayName\": \"Microsoft.CostManagement scheduled action\" }\r\n ,\"microsoft.costmanagement/settings\": { \"SingularDisplayName\": \"Microsoft.CostManagement setting\" }\r\n ,\"microsoft.costmanagement/views\": { \"SingularDisplayName\": \"Microsoft.CostManagement view\" }\r\n ,\"microsoft.customerlockbox/requests\": { \"SingularDisplayName\": \"Microsoft.CustomerLockbox request\" }\r\n ,\"microsoft.customerlockbox/tenantoptedin\": { \"SingularDisplayName\": \"Microsoft.CustomerLockbox tenant opted in\" }\r\n ,\"microsoft.customproviders/associations\": { \"SingularDisplayName\": \"Microsoft.CustomProviders association\" }\r\n ,\"microsoft.customproviders/resourceproviders\": { \"SingularDisplayName\": \"Microsoft.CustomProviders resource provider\" }\r\n ,\"microsoft.dashboard/grafana\": { \"SingularDisplayName\": \"Azure Managed Grafana\" }\r\n ,\"microsoft.dataaccelerator/indexclusters\": { \"SingularDisplayName\": \"Microsoft.DataAccelerator index cluster\" }\r\n ,\"microsoft.databasefleetmanager/fleets\": { \"SingularDisplayName\": \"Database fleet manager\" }\r\n ,\"microsoft.databasefleetmanager/fleets/fleetspaces\": { \"SingularDisplayName\": \"Fleetspaces\" }\r\n ,\"microsoft.databasefleetmanager/fleets/fleetspaces/databases\": { \"SingularDisplayName\": \"Fleet Managed Database\" }\r\n ,\"microsoft.databasefleetmanager/fleets/tiers\": { \"SingularDisplayName\": \"tier\" }\r\n ,\"microsoft.databasewatcher/watchers\": { \"SingularDisplayName\": \"Database watcher\" }\r\n ,\"microsoft.databox/jobs\": { \"SingularDisplayName\": \"Azure Data Box\" }\r\n ,\"microsoft.databoxedge/databoxedgedevices\": { \"SingularDisplayName\": \"Azure Stack Edge / Data Box Gateway\" }\r\n ,\"microsoft.databricks/accessconnectors\": { \"SingularDisplayName\": \"Access Connector for Azure Databricks\" }\r\n ,\"microsoft.databricks/workspaces\": { \"SingularDisplayName\": \"Azure Databricks Service\" }\r\n ,\"microsoft.datacatalog/catalogs\": { \"SingularDisplayName\": \"Data Catalog\" }\r\n ,\"microsoft.datacollaboration/workspaces\": { \"SingularDisplayName\": \"Project CI\" }\r\n ,\"microsoft.datadog/agreements\": { \"SingularDisplayName\": \"Microsoft.Datadog agreement\" }\r\n ,\"microsoft.datadog/monitors\": { \"SingularDisplayName\": \"Datadog\" }\r\n ,\"microsoft.datadog/subscriptionstatuses\": { \"SingularDisplayName\": \"Microsoft.Datadog subscription statuse\" }\r\n ,\"microsoft.datafactory/datafactories\": { \"SingularDisplayName\": \"Data factory\" }\r\n ,\"microsoft.datafactory/factories\": { \"SingularDisplayName\": \"Data factory (V2)\" }\r\n ,\"microsoft.datafactory/factories/pipelines\": { \"SingularDisplayName\": \"Data Factory pipeline\" }\r\n ,\"microsoft.datafactory/factories/triggers\": { \"SingularDisplayName\": \"Data Factory trigger\" }\r\n ,\"microsoft.datalakeanalytics/accounts\": { \"SingularDisplayName\": \"Data Lake Analytics account\" }\r\n ,\"microsoft.datalakestore/accounts\": { \"SingularDisplayName\": \"Data Lake Storage Gen1\" }\r\n ,\"microsoft.datamigration/databasemigrations\": { \"SingularDisplayName\": \"Microsoft.DataMigration database migration\" }\r\n ,\"microsoft.datamigration/migrationservices\": { \"SingularDisplayName\": \"Microsoft.DataMigration migration service\" }\r\n ,\"microsoft.datamigration/services\": { \"SingularDisplayName\": \"Azure Database Migration Service (classic)\" }\r\n ,\"microsoft.datamigration/services/projects\": { \"SingularDisplayName\": \"Azure Database Migration Project\" }\r\n ,\"microsoft.datamigration/sqlmigrationservices\": { \"SingularDisplayName\": \"Azure Database Migration Service\" }\r\n ,\"microsoft.dataprotection/backupvaults\": { \"SingularDisplayName\": \"Backup vault\" }\r\n ,\"microsoft.dataprotection/resourceguards\": { \"SingularDisplayName\": \"Resource Guard\" }\r\n ,\"microsoft.datareplication/replicationfabrics\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabric\" }\r\n ,\"microsoft.datareplication/replicationfabrics/fabricagents\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabrics fabric agent\" }\r\n ,\"microsoft.datareplication/replicationfabrics/fabricagents/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabrics fabric agents operation\" }\r\n ,\"microsoft.datareplication/replicationfabrics/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication fabrics operation\" }\r\n ,\"microsoft.datareplication/replicationvaults\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vault\" }\r\n ,\"microsoft.datareplication/replicationvaults/alertsettings\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults alert setting\" }\r\n ,\"microsoft.datareplication/replicationvaults/events\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults event\" }\r\n ,\"microsoft.datareplication/replicationvaults/jobs\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults job\" }\r\n ,\"microsoft.datareplication/replicationvaults/jobs/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults jobs operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/protecteditems\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults protected item\" }\r\n ,\"microsoft.datareplication/replicationvaults/protecteditems/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults protected items operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/protecteditems/recoverypoints\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults protected items recovery point\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationextensions\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication extension\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationextensions/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication extensions operation\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationpolicies\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication policy\" }\r\n ,\"microsoft.datareplication/replicationvaults/replicationpolicies/operations\": { \"SingularDisplayName\": \"Microsoft.DataReplication replication vaults replication policies operation\" }\r\n ,\"microsoft.datashare/accounts\": { \"SingularDisplayName\": \"Data Share\" }\r\n ,\"microsoft.dbformariadb/servers\": { \"SingularDisplayName\": \"Azure Database for MariaDB server\" }\r\n ,\"microsoft.dbformysql/flexibleservers\": { \"SingularDisplayName\": \"Azure Database for MySQL flexible server\" }\r\n ,\"microsoft.dbformysql/servers\": { \"SingularDisplayName\": \"MySQL server\" }\r\n ,\"microsoft.dbforpostgresql/flexibleservers\": { \"SingularDisplayName\": \"Azure Database for PostgreSQL - Flexible Server\" }\r\n ,\"microsoft.dbforpostgresql/servergroupsv2\": { \"SingularDisplayName\": \"Azure Cosmos DB for PostgreSQL Cluster\" }\r\n ,\"microsoft.dbforpostgresql/servers\": { \"SingularDisplayName\": \"PostgreSQL server\" }\r\n ,\"microsoft.delegatednetwork/controller\": { \"SingularDisplayName\": \"Microsoft.DelegatedNetwork controller\" }\r\n ,\"microsoft.delegatednetwork/delegatedsubnets\": { \"SingularDisplayName\": \"Microsoft.DelegatedNetwork delegated subnet\" }\r\n ,\"microsoft.delegatednetwork/orchestrators\": { \"SingularDisplayName\": \"Microsoft.DelegatedNetwork orchestrator\" }\r\n ,\"microsoft.dependencymap/maps\": { \"SingularDisplayName\": \"Microsoft.DependencyMap map\" }\r\n ,\"microsoft.dependencymap/maps/discoverysources\": { \"SingularDisplayName\": \"Microsoft.DependencyMap maps discovery source\" }\r\n ,\"microsoft.deploymentmanager/artifactsources\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager artifact source\" }\r\n ,\"microsoft.deploymentmanager/rollouts\": { \"SingularDisplayName\": \"Rollout\" }\r\n ,\"microsoft.deploymentmanager/servicetopologies\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager service topology\" }\r\n ,\"microsoft.deploymentmanager/servicetopologies/services\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager service topologies service\" }\r\n ,\"microsoft.deploymentmanager/servicetopologies/services/serviceunits\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager service topologies services service unit\" }\r\n ,\"microsoft.deploymentmanager/steps\": { \"SingularDisplayName\": \"Microsoft.DeploymentManager step\" }\r\n ,\"microsoft.desktopvirtualization/appattachpackages\": { \"SingularDisplayName\": \"App attach package\" }\r\n ,\"microsoft.desktopvirtualization/applicationgroups\": { \"SingularDisplayName\": \"Application group\" }\r\n ,\"microsoft.desktopvirtualization/hostpools\": { \"SingularDisplayName\": \"Host pool\" }\r\n ,\"microsoft.desktopvirtualization/scalingplans\": { \"SingularDisplayName\": \"Scaling plan\" }\r\n ,\"microsoft.desktopvirtualization/workspaces\": { \"SingularDisplayName\": \"Workspace\" }\r\n ,\"microsoft.devai/instances\": { \"SingularDisplayName\": \"Microsoft.DevAI instance\" }\r\n ,\"microsoft.devai/instances/experiments\": { \"SingularDisplayName\": \"Microsoft.DevAI instances experiment\" }\r\n ,\"microsoft.devai/instances/sandboxes\": { \"SingularDisplayName\": \"Microsoft.DevAI instances sandbox\" }\r\n ,\"microsoft.devai/instances/sandboxes/experiments\": { \"SingularDisplayName\": \"Microsoft.DevAI instances sandboxes experiment\" }\r\n ,\"microsoft.devcenter/devcenters\": { \"SingularDisplayName\": \"Dev center\" }\r\n ,\"microsoft.devcenter/devcenters/devboxdefinitions\": { \"SingularDisplayName\": \"Dev Box definition\" }\r\n ,\"microsoft.devcenter/networkconnections\": { \"SingularDisplayName\": \"Network connection\" }\r\n ,\"microsoft.devcenter/plans\": { \"SingularDisplayName\": \"Dev center plan\" }\r\n ,\"microsoft.devcenter/projects\": { \"SingularDisplayName\": \"Project\" }\r\n ,\"microsoft.devcenter/projects/pools\": { \"SingularDisplayName\": \"Pool\" }\r\n ,\"microsoft.developmentwindows365/developmentcloudpcdelegatedmsis\": { \"SingularDisplayName\": \"Microsoft.DevelopmentWindows365 development cloud pc delegated msi\" }\r\n ,\"microsoft.devhub/iacprofiles\": { \"SingularDisplayName\": \"Infrastructure as Code Automation\" }\r\n ,\"microsoft.devhub/workflows\": { \"SingularDisplayName\": \"Microsoft.DevHub workflow\" }\r\n ,\"microsoft.deviceonboarding/onboardingservices\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding onboarding service\" }\r\n ,\"microsoft.deviceonboarding/onboardingservices/policies\": { \"SingularDisplayName\": \"Microsoft.DeviceOnboarding onboarding services policy\" }\r\n ,\"microsoft.deviceregistry/assetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/assets\": { \"SingularDisplayName\": \"IoT Asset\" }\r\n ,\"microsoft.deviceregistry/billingcontainers\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry billing container\" }\r\n ,\"microsoft.deviceregistry/devices\": { \"SingularDisplayName\": \"IoT Device\" }\r\n ,\"microsoft.deviceregistry/discoveredassetendpointprofiles\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry discovered asset endpoint profile\" }\r\n ,\"microsoft.deviceregistry/discoveredassets\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry discovered asset\" }\r\n ,\"microsoft.deviceregistry/schemaregistries\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry schema registry\" }\r\n ,\"microsoft.deviceregistry/schemaregistries/schemas\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry schema registries schema\" }\r\n ,\"microsoft.deviceregistry/schemaregistries/schemas/schemaversions\": { \"SingularDisplayName\": \"Microsoft.DeviceRegistry schema registries schemas schema version\" }\r\n ,\"microsoft.devices/iothubs\": { \"SingularDisplayName\": \"IoT hub\" }\r\n ,\"microsoft.devices/provisioningservices\": { \"SingularDisplayName\": \"Azure IoT Hub Device Provisioning Service (DPS)\" }\r\n ,\"microsoft.deviceupdate/accounts\": { \"SingularDisplayName\": \"Device Update for IoT Hub\" }\r\n ,\"microsoft.deviceupdate/updateaccounts\": { \"SingularDisplayName\": \"Device Update Account\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/activedeployments\": { \"SingularDisplayName\": \"Device Update Active Deployment\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/agents\": { \"SingularDisplayName\": \"Device Update Agent\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/deployments\": { \"SingularDisplayName\": \"Device Update Deployment\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/deviceclasses\": { \"SingularDisplayName\": \"Device Update Device Class\" }\r\n ,\"microsoft.deviceupdate/updateaccounts/updates\": { \"SingularDisplayName\": \"Device Update\" }\r\n ,\"microsoft.devops/pipelines\": { \"SingularDisplayName\": \"Microsoft.DevOps pipeline\" }\r\n ,\"microsoft.devopsinfrastructure/pools\": { \"SingularDisplayName\": \"Managed DevOps Pool\" }\r\n ,\"microsoft.devspaces/controllers\": { \"SingularDisplayName\": \"Microsoft.DevSpaces controller\" }\r\n ,\"microsoft.devtestlab/labs\": { \"SingularDisplayName\": \"DevTest lab\" }\r\n ,\"microsoft.devtestlab/labs/virtualmachines\": { \"SingularDisplayName\": \"DevTest Lab virtual machine\" }\r\n ,\"microsoft.devtestlab/schedules\": { \"SingularDisplayName\": \"Microsoft.DevTestLab schedule\" }\r\n ,\"microsoft.devtunnels/tunnelplans\": { \"SingularDisplayName\": \"Dev Tunnels Domain\" }\r\n ,\"microsoft.diagnostics/apollo\": { \"SingularDisplayName\": \"Microsoft.Diagnostics apollo\" }\r\n ,\"microsoft.digitaltwins/digitaltwinsinstances\": { \"SingularDisplayName\": \"Azure Digital Twins\" }\r\n ,\"microsoft.documentdb/cassandraclusters\": { \"SingularDisplayName\": \"Azure Managed Instance for Apache Cassandra\" }\r\n ,\"microsoft.documentdb/databaseaccounts\": { \"SingularDisplayName\": \"Cosmos DB account\" }\r\n ,\"microsoft.documentdb/mongoclusters\": { \"SingularDisplayName\": \"Azure Cosmos DB for MongoDB (vCore)\" }\r\n ,\"microsoft.documentdb/throughputpools\": { \"SingularDisplayName\": \"Microsoft.DocumentDB throughput pool\" }\r\n ,\"microsoft.documentdb/throughputpools/throughputpoolaccounts\": { \"SingularDisplayName\": \"Microsoft.DocumentDB throughput pools throughput pool account\" }\r\n ,\"microsoft.domainregistration/domains\": { \"SingularDisplayName\": \"App Service Domain\" }\r\n ,\"microsoft.domainregistration/topleveldomains\": { \"SingularDisplayName\": \"Microsoft.DomainRegistration top level domain\" }\r\n ,\"microsoft.durabletask/namespaces\": { \"SingularDisplayName\": \"Durable Task Scheduler\" }\r\n ,\"microsoft.durabletask/namespaces/taskhubs\": { \"SingularDisplayName\": \"Task Hub\" }\r\n ,\"microsoft.dynamics365fraudprotection/instances\": { \"SingularDisplayName\": \"Microsoft.Dynamics365FraudProtection instance\" }\r\n ,\"microsoft.easm/workspaces\": { \"SingularDisplayName\": \"Microsoft Defender EASM\" }\r\n ,\"microsoft.edge/configurations\": { \"SingularDisplayName\": \"Site configuration\" }\r\n ,\"microsoft.edge/configurations/arcgatewayconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations arc gateway configuration\" }\r\n ,\"microsoft.edge/configurations/connectivityconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations connectivity configuration\" }\r\n ,\"microsoft.edge/configurations/dynamicconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations dynamic configuration\" }\r\n ,\"microsoft.edge/configurations/dynamicconfigurations/versions\": { \"SingularDisplayName\": \"Microsoft.Edge configurations dynamic configurations version\" }\r\n ,\"microsoft.edge/configurations/networkconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations network configuration\" }\r\n ,\"microsoft.edge/configurations/securityconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations security configuration\" }\r\n ,\"microsoft.edge/configurations/timeserverconfigurations\": { \"SingularDisplayName\": \"Microsoft.Edge configurations time server configuration\" }\r\n ,\"microsoft.edge/connectivitystatuses\": { \"SingularDisplayName\": \"Microsoft.Edge connectivity statuse\" }\r\n ,\"microsoft.edge/siteawareresourcetypes\": { \"SingularDisplayName\": \"Microsoft.Edge site aware resource type\" }\r\n ,\"microsoft.edge/sites\": { \"SingularDisplayName\": \"Site manager - Azure Arc\" }\r\n ,\"microsoft.edge/updates\": { \"SingularDisplayName\": \"Microsoft.Edge update\" }\r\n ,\"microsoft.edgemarketplace/offers\": { \"SingularDisplayName\": \"Microsoft.EdgeMarketplace offer\" }\r\n ,\"microsoft.edgemarketplace/publishers\": { \"SingularDisplayName\": \"Microsoft.EdgeMarketplace publisher\" }\r\n ,\"microsoft.edgeorder/addresses\": { \"SingularDisplayName\": \"Azure Edge Hardware Center Address\" }\r\n ,\"microsoft.edgeorder/bootstrapconfigurations\": { \"SingularDisplayName\": \"Site Bootstrap Key\" }\r\n ,\"microsoft.edgeorder/orderitems\": { \"SingularDisplayName\": \"Azure Edge Hardware Center\" }\r\n ,\"microsoft.edgeorder/virtual_orderitems\": { \"SingularDisplayName\": \"Device\" }\r\n ,\"microsoft.edgezones/extendedzones\": { \"SingularDisplayName\": \"Microsoft.EdgeZones extended zone\" }\r\n ,\"microsoft.education/grants\": { \"SingularDisplayName\": \"Microsoft.Education grant\" }\r\n ,\"microsoft.education/labs\": { \"SingularDisplayName\": \"Microsoft.Education lab\" }\r\n ,\"microsoft.education/labs/joinrequests\": { \"SingularDisplayName\": \"Microsoft.Education labs join request\" }\r\n ,\"microsoft.education/labs/students\": { \"SingularDisplayName\": \"Microsoft.Education labs student\" }\r\n ,\"microsoft.education/studentlabs\": { \"SingularDisplayName\": \"Microsoft.Education student lab\" }\r\n ,\"microsoft.elastic/monitors\": { \"SingularDisplayName\": \"Elastic\" }\r\n ,\"microsoft.elasticsan/elasticsans\": { \"SingularDisplayName\": \"Elastic SAN\" }\r\n ,\"microsoft.energydataplatform/energyservices\": { \"SingularDisplayName\": \"Microsoft.EnergyDataPlatform energy service\" }\r\n ,\"microsoft.enterpriseknowledgegraph/services\": { \"SingularDisplayName\": \"Microsoft.EnterpriseKnowledgeGraph service\" }\r\n ,\"microsoft.enterprisesupport/enterprisesupports\": { \"SingularDisplayName\": \"Microsoft.EnterpriseSupport enterprise support\" }\r\n ,\"microsoft.eventgrid/domains\": { \"SingularDisplayName\": \"Event Grid Domain\" }\r\n ,\"microsoft.eventgrid/domains/topics\": { \"SingularDisplayName\": \"Event Grid Domain Topic\" }\r\n ,\"microsoft.eventgrid/eventsubscriptions\": { \"SingularDisplayName\": \"Microsoft.EventGrid event subscription\" }\r\n ,\"microsoft.eventgrid/extensiontopics\": { \"SingularDisplayName\": \"Event Grid extension topic\" }\r\n ,\"microsoft.eventgrid/namespaces\": { \"SingularDisplayName\": \"Event Grid Namespace\" }\r\n ,\"microsoft.eventgrid/namespaces/topics\": { \"SingularDisplayName\": \"Event Grid Namespace Topic\" }\r\n ,\"microsoft.eventgrid/namespaces/topics/eventsubscriptions\": { \"SingularDisplayName\": \"Event Subscription\" }\r\n ,\"microsoft.eventgrid/namespaces/topicspaces\": { \"SingularDisplayName\": \"Event Grid Topic Space\" }\r\n ,\"microsoft.eventgrid/partnerconfigurations\": { \"SingularDisplayName\": \"Event Grid Partner Configuration\" }\r\n ,\"microsoft.eventgrid/partnerdestinations\": { \"SingularDisplayName\": \"Event Grid Partner Destination\" }\r\n ,\"microsoft.eventgrid/partnernamespaces\": { \"SingularDisplayName\": \"Event Grid Partner Namespace\" }\r\n ,\"microsoft.eventgrid/partnernamespaces/channels\": { \"SingularDisplayName\": \"Event Grid Channel\" }\r\n ,\"microsoft.eventgrid/partnerregistrations\": { \"SingularDisplayName\": \"Event Grid Partner Registration\" }\r\n ,\"microsoft.eventgrid/partnertopics\": { \"SingularDisplayName\": \"Event Grid Partner Topic\" }\r\n ,\"microsoft.eventgrid/systemtopics\": { \"SingularDisplayName\": \"Event Grid System Topic\" }\r\n ,\"microsoft.eventgrid/systemtopics/eventsubscriptions\": { \"SingularDisplayName\": \"Event Grid Subscriptions\" }\r\n ,\"microsoft.eventgrid/topics\": { \"SingularDisplayName\": \"Event Grid Topic\" }\r\n ,\"microsoft.eventgrid/topictypes\": { \"SingularDisplayName\": \"Microsoft.EventGrid topic type\" }\r\n ,\"microsoft.eventgrid/verifiedpartners\": { \"SingularDisplayName\": \"Microsoft.EventGrid verified partner\" }\r\n ,\"microsoft.eventhub/clusters\": { \"SingularDisplayName\": \"Event Hubs Cluster\" }\r\n ,\"microsoft.eventhub/namespaces\": { \"SingularDisplayName\": \"Event Hubs namespace\" }\r\n ,\"microsoft.eventhub/namespaces/disasterrecoveryconfigs\": { \"SingularDisplayName\": \"Event Hubs Geo-DR Alias\" }\r\n ,\"microsoft.eventhub/namespaces/eventhubs\": { \"SingularDisplayName\": \"Event Hubs Instance\" }\r\n ,\"microsoft.eventhub/namespaces/providers/diagnosticsettings\": { \"SingularDisplayName\": \"Diagnostic settings\" }\r\n ,\"microsoft.eventhub/namespaces/schemagroups\": { \"SingularDisplayName\": \"Schema Group\" }\r\n ,\"microsoft.experimentation/experimentworkspaces\": { \"SingularDisplayName\": \"Experiment Workspace\" }\r\n ,\"microsoft.extendedlocation/customlocations\": { \"SingularDisplayName\": \"Custom location\" }\r\n ,\"microsoft.fabric/capacities\": { \"SingularDisplayName\": \"Fabric Capacity\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric/operationresults\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric operation result\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric private endpoint connection\" }\r\n ,\"microsoft.fabric/privatelinkservicesforfabric/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Fabric private link services for fabric private link resource\" }\r\n ,\"microsoft.fairfieldgardens/deviceprovisioningstates\": { \"SingularDisplayName\": \"Microsoft.FairfieldGardens device provisioning state\" }\r\n ,\"microsoft.fairfieldgardens/provisioningresources\": { \"SingularDisplayName\": \"Fairfield Gardens\" }\r\n ,\"microsoft.fairfieldgardens/provisioningresources/provisioningpolicies\": { \"SingularDisplayName\": \"Provisioning policy\" }\r\n ,\"microsoft.falcon/namespaces\": { \"SingularDisplayName\": \"Microsoft.Falcon namespace\" }\r\n ,\"microsoft.features/featureprovidernamespaces/featureconfigurations\": { \"SingularDisplayName\": \"Preview features\" }\r\n ,\"microsoft.fidalgo/devcenters\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenter\" }\r\n ,\"microsoft.fidalgo/devcenters/attachednetworks\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters attachednetwork\" }\r\n ,\"microsoft.fidalgo/devcenters/catalogs\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters catalog\" }\r\n ,\"microsoft.fidalgo/devcenters/catalogs/items\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters catalogs item\" }\r\n ,\"microsoft.fidalgo/devcenters/devboxdefinitions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters devboxdefinition\" }\r\n ,\"microsoft.fidalgo/devcenters/environmenttypes\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters environment type\" }\r\n ,\"microsoft.fidalgo/devcenters/galleries\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters gallery\" }\r\n ,\"microsoft.fidalgo/devcenters/galleries/images\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters galleries image\" }\r\n ,\"microsoft.fidalgo/devcenters/galleries/images/versions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters galleries images version\" }\r\n ,\"microsoft.fidalgo/devcenters/mappings\": { \"SingularDisplayName\": \"Microsoft.Fidalgo devcenters mapping\" }\r\n ,\"microsoft.fidalgo/machinedefinitions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo machinedefinition\" }\r\n ,\"microsoft.fidalgo/networksettings\": { \"SingularDisplayName\": \"Microsoft.Fidalgo networksetting\" }\r\n ,\"microsoft.fidalgo/networksettings/healthchecks\": { \"SingularDisplayName\": \"Microsoft.Fidalgo networksettings healthcheck\" }\r\n ,\"microsoft.fidalgo/projects\": { \"SingularDisplayName\": \"Microsoft.Fidalgo project\" }\r\n ,\"microsoft.fidalgo/projects/attachednetworks\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects attachednetwork\" }\r\n ,\"microsoft.fidalgo/projects/devboxdefinitions\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects devboxdefinition\" }\r\n ,\"microsoft.fidalgo/projects/environments\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects environment\" }\r\n ,\"microsoft.fidalgo/projects/pools\": { \"SingularDisplayName\": \"Microsoft.Fidalgo projects pool\" }\r\n ,\"microsoft.fileshares/fileshares\": { \"SingularDisplayName\": \"File share\" }\r\n ,\"microsoft.fluidrelay/fluidrelayservers\": { \"SingularDisplayName\": \"Fluid Relay\" }\r\n ,\"microsoft.footprintmonitoring/profiles\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profile\" }\r\n ,\"microsoft.footprintmonitoring/profiles/experiments\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profiles experiment\" }\r\n ,\"microsoft.footprintmonitoring/profiles/measurementendpoints\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profiles measurement endpoint\" }\r\n ,\"microsoft.footprintmonitoring/profiles/measurementendpoints/conditions\": { \"SingularDisplayName\": \"Microsoft.FootprintMonitoring profiles measurement endpoints condition\" }\r\n ,\"microsoft.gallery/myareas/galleryitems\": { \"SingularDisplayName\": \"Template\" }\r\n ,\"microsoft.genomics/accounts\": { \"SingularDisplayName\": \"Genomics account\" }\r\n ,\"microsoft.graph/azureadapplication\": { \"SingularDisplayName\": \"Microsoft.Graph Azure ad application\" }\r\n ,\"microsoft.graph/azureadapplicationprototype\": { \"SingularDisplayName\": \"Microsoft.Graph Azure ad application prototype\" }\r\n ,\"microsoft.graphservices/accounts\": { \"SingularDisplayName\": \"Metered API Account\" }\r\n ,\"microsoft.guestconfiguration/guestconfigurationassignments\": { \"SingularDisplayName\": \"Microsoft.GuestConfiguration guest configuration assignment\" }\r\n ,\"microsoft.guestconfiguration/guestconfigurationassignments/reports\": { \"SingularDisplayName\": \"Microsoft.GuestConfiguration guest configuration assignments report\" }\r\n ,\"microsoft.hanaonazure/hanainstances\": { \"SingularDisplayName\": \"SAP HANA on Azure\" }\r\n ,\"microsoft.hanaonazure/sapmonitors\": { \"SingularDisplayName\": \"Azure Monitor for SAP Solutions (classic)\" }\r\n ,\"microsoft.hardware/orders\": { \"SingularDisplayName\": \"Microsoft.Hardware order\" }\r\n ,\"microsoft.hardwaresecuritymodules/cloudhsmclusters\": { \"SingularDisplayName\": \"Azure Cloud HSM\" }\r\n ,\"microsoft.hdinsight/clusterpools\": { \"SingularDisplayName\": \"Azure HDInsight on AKS cluster pool\" }\r\n ,\"microsoft.hdinsight/clusterpools/clusters\": { \"SingularDisplayName\": \"Azure HDInsight on AKS cluster\" }\r\n ,\"microsoft.hdinsight/clusters\": { \"SingularDisplayName\": \"HDInsight cluster\" }\r\n ,\"microsoft.healthbot/healthbots\": { \"SingularDisplayName\": \"Healthcare agent service\" }\r\n ,\"microsoft.healthcareapis/services\": { \"SingularDisplayName\": \"Azure API for FHIR\" }\r\n ,\"microsoft.healthcareapis/workspaces\": { \"SingularDisplayName\": \"Health Data Services workspace\" }\r\n ,\"microsoft.healthcareapis/workspaces/dicomservices\": { \"SingularDisplayName\": \"DICOM service\" }\r\n ,\"microsoft.healthcareapis/workspaces/fhirservices\": { \"SingularDisplayName\": \"FHIR service\" }\r\n ,\"microsoft.healthcareapis/workspaces/iotconnectors\": { \"SingularDisplayName\": \"MedTech service\" }\r\n ,\"microsoft.healthdataaiservices/deidservices\": { \"SingularDisplayName\": \"De-identification Service\" }\r\n ,\"microsoft.healthmodel/healthmodels\": { \"SingularDisplayName\": \"Health Model\" }\r\n ,\"microsoft.help/diagnostics\": { \"SingularDisplayName\": \"Microsoft.Help diagnostic\" }\r\n ,\"microsoft.help/selfhelp\": { \"SingularDisplayName\": \"Microsoft.Help self help\" }\r\n ,\"microsoft.help/simplifiedsolutions\": { \"SingularDisplayName\": \"Microsoft.Help simplified solution\" }\r\n ,\"microsoft.help/solutions\": { \"SingularDisplayName\": \"Microsoft.Help solution\" }\r\n ,\"microsoft.help/troubleshooters\": { \"SingularDisplayName\": \"Microsoft.Help troubleshooter\" }\r\n ,\"microsoft.hpcworkbench/instances\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instance\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chamber\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/accessprofiles\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers access profile\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/filerequests\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers file request\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/files\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers file\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/storages\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers storage\" }\r\n ,\"microsoft.hpcworkbench/instances/chambers/workloads\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances chambers workload\" }\r\n ,\"microsoft.hpcworkbench/instances/consortiums\": { \"SingularDisplayName\": \"Microsoft.HpcWorkbench instances consortium\" }\r\n ,\"microsoft.hybridcloud/cloudconnections\": { \"SingularDisplayName\": \"Microsoft.HybridCloud cloud connection\" }\r\n ,\"microsoft.hybridcloud/cloudconnectors\": { \"SingularDisplayName\": \"Microsoft.HybridCloud cloud connector\" }\r\n ,\"microsoft.hybridcompute/arcserverwithwac\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/gateways\": { \"SingularDisplayName\": \"Arc gateway\" }\r\n ,\"microsoft.hybridcompute/licenses\": { \"SingularDisplayName\": \"Extended Security Updates - Windows Server 2012/R2\" }\r\n ,\"microsoft.hybridcompute/machines\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machines/microsoft.awsconnector/ec2instances\": { \"SingularDisplayName\": \"Microsoft.AwsConnector ec2 instance\" }\r\n ,\"microsoft.hybridcompute/machines/microsoft.connectedvmwarevsphere/virtualmachineinstances\": { \"SingularDisplayName\": \"VMware + AVS virtual machine\" }\r\n ,\"microsoft.hybridcompute/machines/providers/guestconfigurationassignments\": { \"SingularDisplayName\": \"Guest Assignment\" }\r\n ,\"microsoft.hybridcompute/machinesesu\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machinespaygo\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machinessoftwareassurance\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/machinessovereign\": { \"SingularDisplayName\": \"Machine - Azure Arc\" }\r\n ,\"microsoft.hybridcompute/privatelinkscopes\": { \"SingularDisplayName\": \"Azure Arc Private Link Scope\" }\r\n ,\"microsoft.hybridcompute/settings\": { \"SingularDisplayName\": \"Microsoft.HybridCompute setting\" }\r\n ,\"microsoft.hybridconnectivity/endpoints\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity endpoint\" }\r\n ,\"microsoft.hybridconnectivity/endpoints/serviceconfigurations\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity endpoints service configuration\" }\r\n ,\"microsoft.hybridconnectivity/publiccloudconnectors\": { \"SingularDisplayName\": \"Multicloud connector\" }\r\n ,\"microsoft.hybridconnectivity/solutionconfigurations\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity solution configuration\" }\r\n ,\"microsoft.hybridconnectivity/solutionconfigurations/inventory\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity solution configurations inventory\" }\r\n ,\"microsoft.hybridconnectivity/solutiontypes\": { \"SingularDisplayName\": \"Microsoft.HybridConnectivity solution type\" }\r\n ,\"microsoft.hybridcontainerservice/kubernetesversions\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService kubernetes version\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instance\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances/agentpools\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instances agent pool\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instances hybrid identity metadata\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusterinstances/upgradeprofiles\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService provisioned cluster instances upgrade profile\" }\r\n ,\"microsoft.hybridcontainerservice/provisionedclusters\": { \"SingularDisplayName\": \"Kubernetes hybrid - Azure Arc\" }\r\n ,\"microsoft.hybridcontainerservice/skus\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService SKU\" }\r\n ,\"microsoft.hybridcontainerservice/storagespaces\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService storage space\" }\r\n ,\"microsoft.hybridcontainerservice/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.HybridContainerService virtual network\" }\r\n ,\"microsoft.hybriddata/datamanagers\": { \"SingularDisplayName\": \"Microsoft.HybridData data manager\" }\r\n ,\"microsoft.hybriddata/datamanagers/dataservices\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data service\" }\r\n ,\"microsoft.hybriddata/datamanagers/dataservices/jobdefinitions\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data services job definition\" }\r\n ,\"microsoft.hybriddata/datamanagers/dataservices/jobdefinitions/jobs\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data services job definitions job\" }\r\n ,\"microsoft.hybriddata/datamanagers/datastores\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data store\" }\r\n ,\"microsoft.hybriddata/datamanagers/datastoretypes\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers data store type\" }\r\n ,\"microsoft.hybriddata/datamanagers/publickeys\": { \"SingularDisplayName\": \"Microsoft.HybridData data managers public key\" }\r\n ,\"microsoft.hybridnetwork/configurationgroupvalues\": { \"SingularDisplayName\": \"Configuration Group Value\" }\r\n ,\"microsoft.hybridnetwork/devices\": { \"SingularDisplayName\": \"Azure Network Function Manager ? Device\" }\r\n ,\"microsoft.hybridnetwork/networkfunctions\": { \"SingularDisplayName\": \"Azure Network Function Manager ? Network Function\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publisher\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/artifactstores\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers artifact store\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/configurationgroupschemas\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers configuration group schema\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkfunctiondefinitiongroups\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network function definition group\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network function definition groups network function definition version\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkservicedesigngroups\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network service design group\" }\r\n ,\"microsoft.hybridnetwork/proxypublishers/networkservicedesigngroups/networkservicedesignversions\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork proxy publishers network service design groups network service design version\" }\r\n ,\"microsoft.hybridnetwork/publishers\": { \"SingularDisplayName\": \"Publisher\" }\r\n ,\"microsoft.hybridnetwork/publishers/artifactstores\": { \"SingularDisplayName\": \"Publisher Artifact Store\" }\r\n ,\"microsoft.hybridnetwork/publishers/artifactstores/artifactmanifests\": { \"SingularDisplayName\": \"Publisher Artifact Manifest\" }\r\n ,\"microsoft.hybridnetwork/publishers/configurationgroupschemas\": { \"SingularDisplayName\": \"Configuration Group Schema\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups\": { \"SingularDisplayName\": \"Network Function Definition\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions\": { \"SingularDisplayName\": \"Network Function Definition Version\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkservicedesigngroups\": { \"SingularDisplayName\": \"Network Service Design\" }\r\n ,\"microsoft.hybridnetwork/publishers/networkservicedesigngroups/networkservicedesignversions\": { \"SingularDisplayName\": \"Network Service Design Version\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management container\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/rolloutsequences\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers rollout sequence\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/rollouttiers\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers rollout tier\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers update specification\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers update specifications rollout\" }\r\n ,\"microsoft.hybridnetwork/servicemanagementcontainers/updatespecifications/rollouts/statuses\": { \"SingularDisplayName\": \"Microsoft.HybridNetwork service management containers update specifications rollouts statuse\" }\r\n ,\"microsoft.hybridnetwork/sitenetworkservices\": { \"SingularDisplayName\": \"Site Network Service\" }\r\n ,\"microsoft.hybridnetwork/sites\": { \"SingularDisplayName\": \"Site\" }\r\n ,\"microsoft.hybridnetwork/vendors\": { \"SingularDisplayName\": \"Azure Network Function Manager ? vendor\" }\r\n ,\"microsoft.hybridonboarding/extensionmanagers\": { \"SingularDisplayName\": \"Microsoft.HybridOnboarding extension manager\" }\r\n ,\"microsoft.impact/connectors\": { \"SingularDisplayName\": \"Impact Reporting Connector\" }\r\n ,\"microsoft.impact/impactcategories\": { \"SingularDisplayName\": \"Microsoft.Impact impact category\" }\r\n ,\"microsoft.impact/topologyimpacts\": { \"SingularDisplayName\": \"Microsoft.Impact topology impact\" }\r\n ,\"microsoft.impact/workloadimpacts\": { \"SingularDisplayName\": \"Microsoft.Impact workload impact\" }\r\n ,\"microsoft.impact/workloadimpacts/insights\": { \"SingularDisplayName\": \"Microsoft.Impact workload impacts insight\" }\r\n ,\"microsoft.importexport/jobs\": { \"SingularDisplayName\": \"Microsoft.ImportExport job\" }\r\n ,\"microsoft.insights/actiongroups\": { \"SingularDisplayName\": \"Action group\" }\r\n ,\"microsoft.insights/activitylogalerts\": { \"SingularDisplayName\": \"Activity log alert rule\" }\r\n ,\"microsoft.insights/alertrules\": { \"SingularDisplayName\": \"Microsoft.Insights alertrule\" }\r\n ,\"microsoft.insights/alertrules/incidents\": { \"SingularDisplayName\": \"Microsoft.insights alertrules incident\" }\r\n ,\"microsoft.insights/autoscalesettings\": { \"SingularDisplayName\": \"Microsoft.Insights autoscalesetting\" }\r\n ,\"microsoft.insights/components\": { \"SingularDisplayName\": \"Application Insights app\" }\r\n ,\"microsoft.insights/datacollectionendpoints\": { \"SingularDisplayName\": \"Data collection endpoint\" }\r\n ,\"microsoft.insights/datacollectionruleassociations\": { \"SingularDisplayName\": \"Microsoft.Insights data collection rule association\" }\r\n ,\"microsoft.insights/datacollectionrules\": { \"SingularDisplayName\": \"Data collection rule\" }\r\n ,\"microsoft.insights/diagnosticsettings\": { \"SingularDisplayName\": \"Diagnostic settings\" }\r\n ,\"microsoft.insights/diagnosticsettingscategories\": { \"SingularDisplayName\": \"Microsoft.Insights diagnostic settings category\" }\r\n ,\"microsoft.insights/guestdiagnosticsettings\": { \"SingularDisplayName\": \"Microsoft.insights guest diagnostic setting\" }\r\n ,\"microsoft.insights/guestdiagnosticsettingsassociation\": { \"SingularDisplayName\": \"Microsoft.insights guest diagnostic settings association\" }\r\n ,\"microsoft.insights/logprofiles\": { \"SingularDisplayName\": \"Microsoft.Insights logprofile\" }\r\n ,\"microsoft.insights/metricalerts\": { \"SingularDisplayName\": \"Metric alert rule\" }\r\n ,\"microsoft.insights/notificationstatus\": { \"SingularDisplayName\": \"Microsoft.Insights notification statu\" }\r\n ,\"microsoft.insights/privatelinkscopeoperationstatuses\": { \"SingularDisplayName\": \"Microsoft.insights private link scope operation statuse\" }\r\n ,\"microsoft.insights/privatelinkscopes\": { \"SingularDisplayName\": \"Azure Monitor Private Link Scope\" }\r\n ,\"microsoft.insights/scheduledqueryrules\": { \"SingularDisplayName\": \"Log search alert rule\" }\r\n ,\"microsoft.insights/tenantactiongroups\": { \"SingularDisplayName\": \"Microsoft.Insights tenant action group\" }\r\n ,\"microsoft.insights/tenantactiongroups/notificationstatus\": { \"SingularDisplayName\": \"Microsoft.Insights tenant action groups notification statu\" }\r\n ,\"microsoft.insights/vminsightsonboardingstatuses\": { \"SingularDisplayName\": \"Microsoft.Insights VM insights onboarding statuse\" }\r\n ,\"microsoft.insights/webtests\": { \"SingularDisplayName\": \"Application Insights availability test\" }\r\n ,\"microsoft.insights/workbooks\": { \"SingularDisplayName\": \"Azure Workbook\" }\r\n ,\"microsoft.insights/workbooktemplates\": { \"SingularDisplayName\": \"Azure Workbook Template\" }\r\n ,\"microsoft.integrationspaces/spaces\": { \"SingularDisplayName\": \"Integration Environment\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twin\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/assets\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins asset\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/executionplans\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins execution plan\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/testplans\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins test plan\" }\r\n ,\"microsoft.intelligentitdigitaltwin/digitaltwins/tests\": { \"SingularDisplayName\": \"Microsoft.IntelligentITDigitalTwin digital twins test\" }\r\n ,\"microsoft.inventory/subscriptioninternalproperties\": { \"SingularDisplayName\": \"Microsoft.Inventory subscription internal property\" }\r\n ,\"microsoft.iotcentral/iotapps\": { \"SingularDisplayName\": \"IoT Central Application\" }\r\n ,\"microsoft.iotfirmwaredefense/workspaces\": { \"SingularDisplayName\": \"Microsoft.IoTFirmwareDefense workspace\" }\r\n ,\"microsoft.iotfirmwaredefense/workspaces/firmwares\": { \"SingularDisplayName\": \"Microsoft.IoTFirmwareDefense workspaces firmware\" }\r\n ,\"microsoft.iotfirmwaredefense/workspaces/firmwares/summaries\": { \"SingularDisplayName\": \"Microsoft.IoTFirmwareDefense workspaces firmwares summary\" }\r\n ,\"microsoft.iotoperations/instances\": { \"SingularDisplayName\": \"Azure IoT Operations\" }\r\n ,\"microsoft.iotoperations/instances/brokers\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances broker\" }\r\n ,\"microsoft.iotoperations/instances/brokers/authentications\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances brokers authentication\" }\r\n ,\"microsoft.iotoperations/instances/brokers/authorizations\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances brokers authorization\" }\r\n ,\"microsoft.iotoperations/instances/brokers/listeners\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances brokers listener\" }\r\n ,\"microsoft.iotoperations/instances/dataflowendpoints\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances dataflow endpoint\" }\r\n ,\"microsoft.iotoperations/instances/dataflowprofiles\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances dataflow profile\" }\r\n ,\"microsoft.iotoperations/instances/dataflowprofiles/dataflows\": { \"SingularDisplayName\": \"Microsoft.IoTOperations instances dataflow profiles dataflow\" }\r\n ,\"microsoft.iotoperationsdataprocessor/instances\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsDataProcessor instance\" }\r\n ,\"microsoft.iotoperationsdataprocessor/instances/datasets\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsDataProcessor instances dataset\" }\r\n ,\"microsoft.iotoperationsdataprocessor/instances/pipelines\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsDataProcessor instances pipeline\" }\r\n ,\"microsoft.iotoperationsmq/mq\": { \"SingularDisplayName\": \"IoT Operations Ops MQ\" }\r\n ,\"microsoft.iotoperationsorchestrator/instances\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsOrchestrator instance\" }\r\n ,\"microsoft.iotoperationsorchestrator/solutions\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsOrchestrator solution\" }\r\n ,\"microsoft.iotoperationsorchestrator/targets\": { \"SingularDisplayName\": \"Microsoft.IoTOperationsOrchestrator target\" }\r\n ,\"microsoft.iotsecurity/alerttypes\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity alert type\" }\r\n ,\"microsoft.iotsecurity/defendersettings\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity defender setting\" }\r\n ,\"microsoft.iotsecurity/onpremisesensors\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity on premise sensor\" }\r\n ,\"microsoft.iotsecurity/recommendationtypes\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity recommendation type\" }\r\n ,\"microsoft.iotsecurity/sensors\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity sensor\" }\r\n ,\"microsoft.iotsecurity/sites\": { \"SingularDisplayName\": \"Microsoft.IoTSecurity site\" }\r\n ,\"microsoft.keyvault/managedhsms\": { \"SingularDisplayName\": \"Azure Key Vault Managed HSM\" }\r\n ,\"microsoft.keyvault/vaults\": { \"SingularDisplayName\": \"Key vault\" }\r\n ,\"microsoft.kubernetes/connectedclusters\": { \"SingularDisplayName\": \"kubernetes 1 - Azure Arc\" }\r\n ,\"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/extensions\": { \"SingularDisplayName\": \"Kubernetes - Azure Arc extension\" }\r\n ,\"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations\": { \"SingularDisplayName\": \"GitOps configuration\" }\r\n ,\"microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces\": { \"SingularDisplayName\": \"Kubernetes - Azure Arc namespace\" }\r\n ,\"microsoft.kubernetesconfiguration/extensions\": { \"SingularDisplayName\": \"Kubernetes service extension\" }\r\n ,\"microsoft.kubernetesconfiguration/extensiontypes\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration extension type\" }\r\n ,\"microsoft.kubernetesconfiguration/extensiontypes/versions\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration extension types version\" }\r\n ,\"microsoft.kubernetesconfiguration/fluxconfigurations\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration flux configuration\" }\r\n ,\"microsoft.kubernetesconfiguration/fluxconfigurations/operations\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration flux configurations operation\" }\r\n ,\"microsoft.kubernetesconfiguration/privatelinkscopes\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration private link scope\" }\r\n ,\"microsoft.kubernetesconfiguration/privatelinkscopes/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration private link scopes private endpoint connection\" }\r\n ,\"microsoft.kubernetesconfiguration/privatelinkscopes/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration private link scopes private link resource\" }\r\n ,\"microsoft.kubernetesconfiguration/sourcecontrolconfigurations\": { \"SingularDisplayName\": \"Microsoft.KubernetesConfiguration source control configuration\" }\r\n ,\"microsoft.kubernetesruntime/bgppeers\": { \"SingularDisplayName\": \"Microsoft.KubernetesRuntime bgp peer\" }\r\n ,\"microsoft.kubernetesruntime/loadbalancers\": { \"SingularDisplayName\": \"Arc Load Balancer\" }\r\n ,\"microsoft.kubernetesruntime/services\": { \"SingularDisplayName\": \"Microsoft.KubernetesRuntime service\" }\r\n ,\"microsoft.kubernetesruntime/storageclasses\": { \"SingularDisplayName\": \"Microsoft.KubernetesRuntime storage class\" }\r\n ,\"microsoft.kusto/clusters\": { \"SingularDisplayName\": \"Azure Data Explorer Cluster\" }\r\n ,\"microsoft.kusto/clusters/databases\": { \"SingularDisplayName\": \"Azure Data Explorer Database\" }\r\n ,\"microsoft.labservices/labaccounts\": { \"SingularDisplayName\": \"Lab account\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#3": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_3(id: string) {\r\n dynamic({\r\n \"microsoft.labservices/labaccounts/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.labservices/labplans\": { \"SingularDisplayName\": \"Lab plan\" }\r\n ,\"microsoft.labservices/labs\": { \"SingularDisplayName\": \"Lab\" }\r\n ,\"microsoft.loadtestservice/loadtestmappings\": { \"SingularDisplayName\": \"Microsoft.LoadTestService load test mapping\" }\r\n ,\"microsoft.loadtestservice/loadtestprofilemappings\": { \"SingularDisplayName\": \"Microsoft.LoadTestService load test profile mapping\" }\r\n ,\"microsoft.loadtestservice/loadtests\": { \"SingularDisplayName\": \"Azure Load Testing\" }\r\n ,\"microsoft.logic/businessprocesses\": { \"SingularDisplayName\": \"Business Process\" }\r\n ,\"microsoft.logic/integrationaccounts\": { \"SingularDisplayName\": \"Logic app integration account\" }\r\n ,\"microsoft.logic/integrationserviceenvironments\": { \"SingularDisplayName\": \"Integration Service Environment\" }\r\n ,\"microsoft.logic/integrationserviceenvironments/managedapis\": { \"SingularDisplayName\": \"Managed Connector\" }\r\n ,\"microsoft.logic/workflows\": { \"SingularDisplayName\": \"Logic app\" }\r\n ,\"microsoft.logz/monitors\": { \"SingularDisplayName\": \"Logz.io\" }\r\n ,\"microsoft.logz/monitors/accounts\": { \"SingularDisplayName\": \"Logz sub account\" }\r\n ,\"microsoft.m365/m365resources\": { \"SingularDisplayName\": \"Microsoft.M365 m365 resource\" }\r\n ,\"microsoft.m365consumptionservices/services\": { \"SingularDisplayName\": \"Microsoft.M365ConsumptionServices service\" }\r\n ,\"microsoft.machinelearning/commitmentplans\": { \"SingularDisplayName\": \"Microsoft.MachineLearning commitment plan\" }\r\n ,\"microsoft.machinelearning/commitmentplans/commitmentassociations\": { \"SingularDisplayName\": \"Microsoft.MachineLearning commitment plans commitment association\" }\r\n ,\"microsoft.machinelearning/webservices\": { \"SingularDisplayName\": \"Microsoft.MachineLearning web service\" }\r\n ,\"microsoft.machinelearning/workspaces\": { \"SingularDisplayName\": \"Microsoft.MachineLearning workspace\" }\r\n ,\"microsoft.machinelearningexperimentation/accounts\": { \"SingularDisplayName\": \"Microsoft.MachineLearningExperimentation account\" }\r\n ,\"microsoft.machinelearningexperimentation/accounts/workspaces\": { \"SingularDisplayName\": \"Microsoft.MachineLearningExperimentation accounts workspace\" }\r\n ,\"microsoft.machinelearningexperimentation/accounts/workspaces/projects\": { \"SingularDisplayName\": \"Microsoft.MachineLearningExperimentation accounts workspaces project\" }\r\n ,\"microsoft.machinelearningservices/aistudio\": { \"SingularDisplayName\": \"Azure AI Studio\" }\r\n ,\"microsoft.machinelearningservices/registries\": { \"SingularDisplayName\": \"Azure Machine Learning registry\" }\r\n ,\"microsoft.machinelearningservices/workspaces\": { \"SingularDisplayName\": \"Azure Machine Learning workspace\" }\r\n ,\"microsoft.machinelearningservices/workspaces/onlineendpoints\": { \"SingularDisplayName\": \"Machine learning online endpoint\" }\r\n ,\"microsoft.machinelearningservices/workspaces/onlineendpoints/deployments\": { \"SingularDisplayName\": \"Machine learning online deployment\" }\r\n ,\"microsoft.maintenance/configurationassignments\": { \"SingularDisplayName\": \"Microsoft.Maintenance configuration assignment\" }\r\n ,\"microsoft.maintenance/maintenanceconfigurations\": { \"SingularDisplayName\": \"Maintenance Configuration\" }\r\n ,\"microsoft.maintenance/publicmaintenanceconfigurations\": { \"SingularDisplayName\": \"Microsoft.Maintenance public maintenance configuration\" }\r\n ,\"microsoft.managedidentity/identities\": { \"SingularDisplayName\": \"Microsoft.ManagedIdentity identity\" }\r\n ,\"microsoft.managedidentity/userassignedidentities\": { \"SingularDisplayName\": \"Managed Identity\" }\r\n ,\"microsoft.managednetwork/managednetworks\": { \"SingularDisplayName\": \"Microsoft.ManagedNetwork managed network\" }\r\n ,\"microsoft.managednetwork/managednetworks/managednetworkgroups\": { \"SingularDisplayName\": \"Microsoft.ManagedNetwork managed networks managed network group\" }\r\n ,\"microsoft.managednetwork/managednetworks/managednetworkpeeringpolicies\": { \"SingularDisplayName\": \"Microsoft.ManagedNetwork managed networks managed network peering policy\" }\r\n ,\"microsoft.managednetworkfabric/accesscontrollists\": { \"SingularDisplayName\": \"Access Control List (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/internetgatewayrules\": { \"SingularDisplayName\": \"Internet Gateway Rule (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/internetgateways\": { \"SingularDisplayName\": \"Internet Gateway (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/ipcommunities\": { \"SingularDisplayName\": \"IP Community (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/ipextendedcommunities\": { \"SingularDisplayName\": \"IP Extended Community (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/ipprefixes\": { \"SingularDisplayName\": \"IP Prefix (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l2isolationdomains\": { \"SingularDisplayName\": \"Layer 2 Isolation Domain (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l3isolationdomains\": { \"SingularDisplayName\": \"Layer 3 Isolation Domain (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l3isolationdomains/externalnetworks\": { \"SingularDisplayName\": \"External Network (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/l3isolationdomains/internalnetworks\": { \"SingularDisplayName\": \"Internal Network (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/neighborgroups\": { \"SingularDisplayName\": \"Neighbor Group (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkdevices\": { \"SingularDisplayName\": \"Network Device (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkdevices/networkinterfaces\": { \"SingularDisplayName\": \"Network Interface (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabriccontrollers\": { \"SingularDisplayName\": \"Network Fabric Controller (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabrics\": { \"SingularDisplayName\": \"Network Fabric (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabrics/networktonetworkinterconnects\": { \"SingularDisplayName\": \"Network to Network Interconnect (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkfabricskus\": { \"SingularDisplayName\": \"Network Fabric SKU (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkpacketbrokers\": { \"SingularDisplayName\": \"Network Packet Broker (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networkracks\": { \"SingularDisplayName\": \"Network Rack (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networktaprules\": { \"SingularDisplayName\": \"Network Tap Rule (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/networktaps\": { \"SingularDisplayName\": \"Network Tap (Operator Nexus)\" }\r\n ,\"microsoft.managednetworkfabric/routepolicies\": { \"SingularDisplayName\": \"Route Policy (Operator Nexus)\" }\r\n ,\"microsoft.managedservices/marketplaceregistrationdefinitions\": { \"SingularDisplayName\": \"Microsoft.ManagedServices marketplace registration definition\" }\r\n ,\"microsoft.managedservices/registrationassignments\": { \"SingularDisplayName\": \"Microsoft.ManagedServices registration assignment\" }\r\n ,\"microsoft.managedservices/registrationdefinitions\": { \"SingularDisplayName\": \"Azure Lighthouse\" }\r\n ,\"microsoft.management/managementgroups\": { \"SingularDisplayName\": \"Microsoft.Management management group\" }\r\n ,\"microsoft.management/managementgroups/microsoft.resources/deploymentstacks\": { \"SingularDisplayName\": \"Deployment stack\" }\r\n ,\"microsoft.management/managementgroups/providers/privatelinkassociations\": { \"SingularDisplayName\": \"Application Gateway\" }\r\n ,\"microsoft.management/managementgroups/providers/templatespecs\": { \"SingularDisplayName\": \"Template spec\" }\r\n ,\"microsoft.management/managementgroups/settings\": { \"SingularDisplayName\": \"Microsoft.Management management groups setting\" }\r\n ,\"microsoft.management/managementgroups/subscriptions\": { \"SingularDisplayName\": \"Microsoft.Management management groups subscription\" }\r\n ,\"microsoft.managementpartner/partners\": { \"SingularDisplayName\": \"Microsoft.ManagementPartner partner\" }\r\n ,\"microsoft.manufacturingplatform/manufacturingdataservices\": { \"SingularDisplayName\": \"Manufacturing Data Solutions\" }\r\n ,\"microsoft.maps/accounts\": { \"SingularDisplayName\": \"Azure Maps Account\" }\r\n ,\"microsoft.maps/accounts/creators\": { \"SingularDisplayName\": \"Azure Maps Creator Resource\" }\r\n ,\"microsoft.marketplace/privatestores\": { \"SingularDisplayName\": \"Microsoft.Marketplace private store\" }\r\n ,\"microsoft.marketplace/privatestores/adminrequestapprovals\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores admin request approval\" }\r\n ,\"microsoft.marketplace/privatestores/collections\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores collection\" }\r\n ,\"microsoft.marketplace/privatestores/collections/offers\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores collections offer\" }\r\n ,\"microsoft.marketplace/privatestores/offers\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores offer\" }\r\n ,\"microsoft.marketplace/privatestores/requestapprovals\": { \"SingularDisplayName\": \"Microsoft.Marketplace private stores request approval\" }\r\n ,\"microsoft.media/mediaservices\": { \"SingularDisplayName\": \"Media service\" }\r\n ,\"microsoft.media/mediaservices/liveevents\": { \"SingularDisplayName\": \"Live event\" }\r\n ,\"microsoft.media/mediaservices/streamingendpoints\": { \"SingularDisplayName\": \"Streaming Endpoint\" }\r\n ,\"microsoft.mesh/worlds\": { \"SingularDisplayName\": \"Microsoft.Mesh world\" }\r\n ,\"microsoft.mesh/worlds/events\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds event\" }\r\n ,\"microsoft.mesh/worlds/events/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds events access policy\" }\r\n ,\"microsoft.mesh/worlds/spaces\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds space\" }\r\n ,\"microsoft.mesh/worlds/spaces/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds spaces access policy\" }\r\n ,\"microsoft.mesh/worlds/templates\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds template\" }\r\n ,\"microsoft.mesh/worlds/templates/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Mesh worlds templates access policy\" }\r\n ,\"microsoft.messagingcatalog/catalogs\": { \"SingularDisplayName\": \"Microsoft.MessagingCatalog catalog\" }\r\n ,\"microsoft.messagingconnectors/connectors\": { \"SingularDisplayName\": \"Microsoft.MessagingConnectors connector\" }\r\n ,\"microsoft.metaverse/metaverses\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverse\" }\r\n ,\"microsoft.metaverse/metaverses/events\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses event\" }\r\n ,\"microsoft.metaverse/metaverses/events/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses events access policy\" }\r\n ,\"microsoft.metaverse/metaverses/spaces\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses space\" }\r\n ,\"microsoft.metaverse/metaverses/spaces/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses spaces access policy\" }\r\n ,\"microsoft.metaverse/metaverses/templates\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses template\" }\r\n ,\"microsoft.metaverse/metaverses/templates/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.Metaverse metaverses templates access policy\" }\r\n ,\"microsoft.migrate/assessmentprojects\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment project\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments/assessedwebapps\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessments assessed web app\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments/clusters\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessments cluster\" }\r\n ,\"microsoft.migrate/assessmentprojects/aksassessments/summaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects aks assessments summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/assessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/avsassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects avs assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business case\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/avssummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases avs summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedavsmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated avs machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedsqlentities\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated sql entity\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/evaluatedwebapps\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases evaluated web app\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/iaassummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases iaas summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/overviewsummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases overview summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/businesscases/paassummaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects business cases paas summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects group\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/assessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/assessments/assessedmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups assessments assessed machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/avsassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups avs assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/avsassessments/avsassessedmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups avs assessments avs assessed machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/assessedsqldatabases\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments assessed sql database\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/assessedsqlinstances\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments assessed sql instance\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/assessedsqlmachines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments assessed sql machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/recommendedassessedentities\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments recommended assessed entity\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/sqlassessments/summaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups sql assessments summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessment\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments/assessedwebapps\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessments assessed web app\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments/summaries\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessments summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/groups/webappassessments/webappserviceplans\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects groups web app assessments web app service plan\" }\r\n ,\"microsoft.migrate/assessmentprojects/hypervcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects hypervcollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/importcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects importcollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/machines\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects machine\" }\r\n ,\"microsoft.migrate/assessmentprojects/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects private endpoint connection\" }\r\n ,\"microsoft.migrate/assessmentprojects/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects private link resource\" }\r\n ,\"microsoft.migrate/assessmentprojects/projectsummary\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects project summary\" }\r\n ,\"microsoft.migrate/assessmentprojects/servercollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects servercollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/sqlassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects sql assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/sqlcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects sqlcollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/vmwarecollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects vmwarecollector\" }\r\n ,\"microsoft.migrate/assessmentprojects/webappassessmentoptions\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects web app assessment option\" }\r\n ,\"microsoft.migrate/assessmentprojects/webappcollectors\": { \"SingularDisplayName\": \"Microsoft.Migrate assessment projects web app collector\" }\r\n ,\"microsoft.migrate/migrateprojects\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate project\" }\r\n ,\"microsoft.migrate/migrateprojects/databaseinstances\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects database instance\" }\r\n ,\"microsoft.migrate/migrateprojects/databases\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects database\" }\r\n ,\"microsoft.migrate/migrateprojects/machines\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects machine\" }\r\n ,\"microsoft.migrate/migrateprojects/migrateevents\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects migrate event\" }\r\n ,\"microsoft.migrate/migrateprojects/solutions\": { \"SingularDisplayName\": \"Microsoft.Migrate migrate projects solution\" }\r\n ,\"microsoft.migrate/modernizeprojects\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize project\" }\r\n ,\"microsoft.migrate/modernizeprojects/deployedresources\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects deployed resource\" }\r\n ,\"microsoft.migrate/modernizeprojects/jobs\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects job\" }\r\n ,\"microsoft.migrate/modernizeprojects/jobs/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects jobs operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/migrateagents\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects migrate agent\" }\r\n ,\"microsoft.migrate/modernizeprojects/migrateagents/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects migrate agents operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloaddeployments\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload deployment\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloaddeployments/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload deployments operation\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloadinstances\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload instance\" }\r\n ,\"microsoft.migrate/modernizeprojects/workloadinstances/operations\": { \"SingularDisplayName\": \"Microsoft.Migrate modernize projects workload instances operation\" }\r\n ,\"microsoft.migrate/movecollections\": { \"SingularDisplayName\": \"Microsoft.Migrate move collection\" }\r\n ,\"microsoft.migrate/movecollections/moveresources\": { \"SingularDisplayName\": \"Microsoft.Migrate move collections move resource\" }\r\n ,\"microsoft.migrate/projects\": { \"SingularDisplayName\": \"Migration project\" }\r\n ,\"microsoft.mission/catalogs\": { \"SingularDisplayName\": \"Catalog\" }\r\n ,\"microsoft.mission/communities\": { \"SingularDisplayName\": \"Community\" }\r\n ,\"microsoft.mission/communities/communityendpoints\": { \"SingularDisplayName\": \"Community endpoint\" }\r\n ,\"microsoft.mission/communities/transithubs\": { \"SingularDisplayName\": \"Transit hub\" }\r\n ,\"microsoft.mission/enclaveconnections\": { \"SingularDisplayName\": \"Enclave connection\" }\r\n ,\"microsoft.mission/externalconnections\": { \"SingularDisplayName\": \"Microsoft.Mission external connection\" }\r\n ,\"microsoft.mission/internalconnections\": { \"SingularDisplayName\": \"Microsoft.Mission internal connection\" }\r\n ,\"microsoft.mission/virtualenclaves\": { \"SingularDisplayName\": \"Enclave\" }\r\n ,\"microsoft.mission/virtualenclaves/enclaveendpoints\": { \"SingularDisplayName\": \"Enclave endpoint\" }\r\n ,\"microsoft.mission/virtualenclaves/endpoints\": { \"SingularDisplayName\": \"Endpoint\" }\r\n ,\"microsoft.mission/virtualenclaves/workloads\": { \"SingularDisplayName\": \"Workload\" }\r\n ,\"microsoft.mixedreality/objectanchorsaccounts\": { \"SingularDisplayName\": \"Object Anchors Account\" }\r\n ,\"microsoft.mixedreality/objectunderstandingaccounts\": { \"SingularDisplayName\": \"Object Understanding Account\" }\r\n ,\"microsoft.mixedreality/remoterenderingaccounts\": { \"SingularDisplayName\": \"Remote Rendering Account\" }\r\n ,\"microsoft.mixedreality/spatialanchorsaccounts\": { \"SingularDisplayName\": \"Spatial Anchors Account\" }\r\n ,\"microsoft.mixedreality/spatialmapsaccounts\": { \"SingularDisplayName\": \"Microsoft.MixedReality spatial maps account\" }\r\n ,\"microsoft.mobilenetwork/amfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork amf deployment\" }\r\n ,\"microsoft.mobilenetwork/clusterservices\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork cluster service\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks\": { \"SingularDisplayName\": \"Mobile Network\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/datanetworks\": { \"SingularDisplayName\": \"Data Network\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/services\": { \"SingularDisplayName\": \"Service\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/simpolicies\": { \"SingularDisplayName\": \"SIM Policy\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/sites\": { \"SingularDisplayName\": \"Mobile Network Site\" }\r\n ,\"microsoft.mobilenetwork/mobilenetworks/slices\": { \"SingularDisplayName\": \"Slice\" }\r\n ,\"microsoft.mobilenetwork/nrfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork nrf deployment\" }\r\n ,\"microsoft.mobilenetwork/nssfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork nssf deployment\" }\r\n ,\"microsoft.mobilenetwork/observabilityservices\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork observability service\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplanes\": { \"SingularDisplayName\": \"Packet Core Control Plane\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes\": { \"SingularDisplayName\": \"Packet Core Data Plane\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks\": { \"SingularDisplayName\": \"Attached Data Network\" }\r\n ,\"microsoft.mobilenetwork/packetcorecontrolplaneversions\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork packet core control plane version\" }\r\n ,\"microsoft.mobilenetwork/radioaccessnetworks\": { \"SingularDisplayName\": \"Radio Access Network Insights\" }\r\n ,\"microsoft.mobilenetwork/sdmdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork sdm deployment\" }\r\n ,\"microsoft.mobilenetwork/simgroups\": { \"SingularDisplayName\": \"SIM Group\" }\r\n ,\"microsoft.mobilenetwork/simgroups/sims\": { \"SingularDisplayName\": \"SIM\" }\r\n ,\"microsoft.mobilenetwork/sims\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork sim\" }\r\n ,\"microsoft.mobilenetwork/smfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork smf deployment\" }\r\n ,\"microsoft.mobilenetwork/upfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork upf deployment\" }\r\n ,\"microsoft.mobilenetwork/virtualizedmmedeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork virtualized mme deployment\" }\r\n ,\"microsoft.mobilenetwork/vnfagentdeployments\": { \"SingularDisplayName\": \"Microsoft.MobileNetwork vnf agent deployment\" }\r\n ,\"microsoft.mobilepacketcore/amfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore amf deployment\" }\r\n ,\"microsoft.mobilepacketcore/clusterservices\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore cluster service\" }\r\n ,\"microsoft.mobilepacketcore/networkfunctions\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore network function\" }\r\n ,\"microsoft.mobilepacketcore/nrfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore nrf deployment\" }\r\n ,\"microsoft.mobilepacketcore/nssfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore nssf deployment\" }\r\n ,\"microsoft.mobilepacketcore/observabilityservices\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore observability service\" }\r\n ,\"microsoft.mobilepacketcore/smfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore smf deployment\" }\r\n ,\"microsoft.mobilepacketcore/upfdeployments\": { \"SingularDisplayName\": \"Microsoft.MobilePacketCore upf deployment\" }\r\n ,\"microsoft.modsimworkbench/workbenches\": { \"SingularDisplayName\": \"Modeling and Simulation Workbench\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers\": { \"SingularDisplayName\": \"Chamber\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/connectors\": { \"SingularDisplayName\": \"Chamber Connector\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/filerequests\": { \"SingularDisplayName\": \"Chamber Data Pipeline File Request\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/files\": { \"SingularDisplayName\": \"Chamber Data Pipeline File\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/licenses\": { \"SingularDisplayName\": \"Chamber License\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/storages\": { \"SingularDisplayName\": \"Chamber Storage\" }\r\n ,\"microsoft.modsimworkbench/workbenches/chambers/workloads\": { \"SingularDisplayName\": \"Chamber VM\" }\r\n ,\"microsoft.modsimworkbench/workbenches/sharedstorages\": { \"SingularDisplayName\": \"Shared Storage\" }\r\n ,\"microsoft.monitor/accounts\": { \"SingularDisplayName\": \"Azure Monitor workspace\" }\r\n ,\"microsoft.monitor/investigations\": { \"SingularDisplayName\": \"Microsoft.Monitor investigation\" }\r\n ,\"microsoft.monitor/pipelinegroups\": { \"SingularDisplayName\": \"Azure Monitor pipeline\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsite\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites/errorsummaries\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites error summary\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites/mysqlservers\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites my sqlserver\" }\r\n ,\"microsoft.mysqldiscovery/mysqlsites/summaries\": { \"SingularDisplayName\": \"Microsoft.MySQLDiscovery my sqlsites summary\" }\r\n ,\"microsoft.netapp/netappaccounts\": { \"SingularDisplayName\": \"NetApp account\" }\r\n ,\"microsoft.netapp/netappaccounts/backupvaults\": { \"SingularDisplayName\": \"Backup vault\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools\": { \"SingularDisplayName\": \"Capacity pool\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools/volumes\": { \"SingularDisplayName\": \"Volume\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools/volumes/snapshots\": { \"SingularDisplayName\": \"Snapshot\" }\r\n ,\"microsoft.netapp/netappaccounts/capacitypools/volumes/volumequotarules\": { \"SingularDisplayName\": \"User and group quota\" }\r\n ,\"microsoft.netapp/netappaccounts/snapshotpolicies\": { \"SingularDisplayName\": \"Snapshot policy\" }\r\n ,\"microsoft.netapp/netappaccounts/volumegroups\": { \"SingularDisplayName\": \"VolumeGroup\" }\r\n ,\"microsoft.network/applicationgatewayavailablessloptions\": { \"SingularDisplayName\": \"Microsoft.Network application gateway available ssl option\" }\r\n ,\"microsoft.network/applicationgatewayavailablessloptions/predefinedpolicies\": { \"SingularDisplayName\": \"Microsoft.Network application gateway available ssl options predefined policy\" }\r\n ,\"microsoft.network/applicationgateways\": { \"SingularDisplayName\": \"Application gateway\" }\r\n ,\"microsoft.network/applicationgatewaywebapplicationfirewallpolicies\": { \"SingularDisplayName\": \"Application Gateway WAF policy\" }\r\n ,\"microsoft.network/applicationsecuritygroups\": { \"SingularDisplayName\": \"Application security group\" }\r\n ,\"microsoft.network/azurefirewalls\": { \"SingularDisplayName\": \"Firewall\" }\r\n ,\"microsoft.network/azurewebcategories\": { \"SingularDisplayName\": \"Microsoft.Network Azure web category\" }\r\n ,\"microsoft.network/bastionhosts\": { \"SingularDisplayName\": \"Bastion\" }\r\n ,\"microsoft.network/cloudserviceslots\": { \"SingularDisplayName\": \"Microsoft.Network cloud service slot\" }\r\n ,\"microsoft.network/connections\": { \"SingularDisplayName\": \"Connection\" }\r\n ,\"microsoft.network/customipprefixes\": { \"SingularDisplayName\": \"Custom IP Prefix\" }\r\n ,\"microsoft.network/ddoscustompolicies\": { \"SingularDisplayName\": \"Microsoft.Network DDoS custom policy\" }\r\n ,\"microsoft.network/ddosprotectionplans\": { \"SingularDisplayName\": \"DDoS protection plan\" }\r\n ,\"microsoft.network/dnsforwardingrulesets\": { \"SingularDisplayName\": \"DNS forwarding ruleset\" }\r\n ,\"microsoft.network/dnsresolverdomainlists\": { \"SingularDisplayName\": \"DNS Domain List\" }\r\n ,\"microsoft.network/dnsresolverpolicies\": { \"SingularDisplayName\": \"DNS Security Policy\" }\r\n ,\"microsoft.network/dnsresolvers\": { \"SingularDisplayName\": \"DNS private resolver\" }\r\n ,\"microsoft.network/dnszones\": { \"SingularDisplayName\": \"DNS zone\" }\r\n ,\"microsoft.network/dscpconfigurations\": { \"SingularDisplayName\": \"Microsoft.Network DSCP configuration\" }\r\n ,\"microsoft.network/expressroutecircuits\": { \"SingularDisplayName\": \"ExpressRoute circuit\" }\r\n ,\"microsoft.network/expressroutecrossconnections\": { \"SingularDisplayName\": \"Microsoft.Network express route cross connection\" }\r\n ,\"microsoft.network/expressroutecrossconnections/peerings\": { \"SingularDisplayName\": \"Microsoft.Network express route cross connections peering\" }\r\n ,\"microsoft.network/expressroutegateways\": { \"SingularDisplayName\": \"ExpressRoute Gateway\" }\r\n ,\"microsoft.network/expressroutegateways/expressrouteconnections\": { \"SingularDisplayName\": \"Microsoft.Network express route gateways express route connection\" }\r\n ,\"microsoft.network/expressrouteports\": { \"SingularDisplayName\": \"ExpressRoute Direct\" }\r\n ,\"microsoft.network/expressrouteportslocations\": { \"SingularDisplayName\": \"Microsoft.Network express route ports location\" }\r\n ,\"microsoft.network/firewallpolicies\": { \"SingularDisplayName\": \"Firewall Policy\" }\r\n ,\"microsoft.network/frontdoors\": { \"SingularDisplayName\": \"Front Door and CDN profiles\" }\r\n ,\"microsoft.network/frontdoorwebapplicationfirewallpolicies\": { \"SingularDisplayName\": \"Front Door WAF policy\" }\r\n ,\"microsoft.network/ipallocations\": { \"SingularDisplayName\": \"Microsoft.Network IP allocation\" }\r\n ,\"microsoft.network/ipgroups\": { \"SingularDisplayName\": \"IP Group\" }\r\n ,\"microsoft.network/loadbalancers\": { \"SingularDisplayName\": \"Load balancer\" }\r\n ,\"microsoft.network/localnetworkgateways\": { \"SingularDisplayName\": \"Local network gateway\" }\r\n ,\"microsoft.network/natgateways\": { \"SingularDisplayName\": \"NAT gateway\" }\r\n ,\"microsoft.network/networkexperimentprofiles\": { \"SingularDisplayName\": \"Microsoft.Network network experiment profile\" }\r\n ,\"microsoft.network/networkexperimentprofiles/experiments\": { \"SingularDisplayName\": \"Microsoft.Network network experiment profiles experiment\" }\r\n ,\"microsoft.network/networkinterfaces\": { \"SingularDisplayName\": \"Network interface\" }\r\n ,\"microsoft.network/networkmanagerconnections\": { \"SingularDisplayName\": \"Microsoft.Network network manager connection\" }\r\n ,\"microsoft.network/networkmanagers\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/connectivityconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/ipampools\": { \"SingularDisplayName\": \"IP address pool\" }\r\n ,\"microsoft.network/networkmanagers/networkgroups\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/routingconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/securityadminconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/securityuserconfigurations\": { \"SingularDisplayName\": \"Network manager\" }\r\n ,\"microsoft.network/networkmanagers/verifierworkspaces\": { \"SingularDisplayName\": \"Verifier Workspace\" }\r\n ,\"microsoft.network/networkprofiles\": { \"SingularDisplayName\": \"Microsoft.Network network profile\" }\r\n ,\"microsoft.network/networksecuritygroups\": { \"SingularDisplayName\": \"Network security group\" }\r\n ,\"microsoft.network/networksecurityperimeters\": { \"SingularDisplayName\": \"Network Security Perimeter\" }\r\n ,\"microsoft.network/networksecurityperimeters/profiles\": { \"SingularDisplayName\": \"Network Security Perimeter\" }\r\n ,\"microsoft.network/networkverifiers\": { \"SingularDisplayName\": \"Virtual Network Verifier\" }\r\n ,\"microsoft.network/networkvirtualappliances\": { \"SingularDisplayName\": \"Microsoft.Network network virtual appliance\" }\r\n ,\"microsoft.network/networkwatchers\": { \"SingularDisplayName\": \"Network Watcher\" }\r\n ,\"microsoft.network/networkwatchers/flowlogs\": { \"SingularDisplayName\": \"Flow log\" }\r\n ,\"microsoft.network/p2svpngateways\": { \"SingularDisplayName\": \"Microsoft.Network P2S VPN gateway\" }\r\n ,\"microsoft.network/privatednszones\": { \"SingularDisplayName\": \"Private DNS zone\" }\r\n ,\"microsoft.network/privateendpoints\": { \"SingularDisplayName\": \"Private endpoint\" }\r\n ,\"microsoft.network/privatelinkservices\": { \"SingularDisplayName\": \"Private link service\" }\r\n ,\"microsoft.network/publicipaddresses\": { \"SingularDisplayName\": \"Public IP address\" }\r\n ,\"microsoft.network/publicipprefixes\": { \"SingularDisplayName\": \"Public IP Prefix\" }\r\n ,\"microsoft.network/routefilters\": { \"SingularDisplayName\": \"Route filter\" }\r\n ,\"microsoft.network/routetables\": { \"SingularDisplayName\": \"Route table\" }\r\n ,\"microsoft.network/securitypartnerproviders\": { \"SingularDisplayName\": \"Microsoft.Network security partner provider\" }\r\n ,\"microsoft.network/serviceendpointpolicies\": { \"SingularDisplayName\": \"Service endpoint policy\" }\r\n ,\"microsoft.network/trafficmanagergeographichierarchies\": { \"SingularDisplayName\": \"Microsoft.Network traffic manager geographic hierarchy\" }\r\n ,\"microsoft.network/trafficmanagerprofiles\": { \"SingularDisplayName\": \"Traffic Manager profile\" }\r\n ,\"microsoft.network/trafficmanagerusermetricskeys\": { \"SingularDisplayName\": \"Microsoft.Network traffic manager user metrics key\" }\r\n ,\"microsoft.network/virtualhubs\": { \"SingularDisplayName\": \"Microsoft.Network/virtualHub\" }\r\n ,\"microsoft.network/virtualnetworkgateways\": { \"SingularDisplayName\": \"Virtual network gateway\" }\r\n ,\"microsoft.network/virtualnetworks\": { \"SingularDisplayName\": \"Virtual network\" }\r\n ,\"microsoft.network/virtualnetworktaps\": { \"SingularDisplayName\": \"Virtual Network Terminal Access Point\" }\r\n ,\"microsoft.network/virtualrouters\": { \"SingularDisplayName\": \"Microsoft.Network virtual router\" }\r\n ,\"microsoft.network/virtualrouters/peerings\": { \"SingularDisplayName\": \"Microsoft.Network virtual routers peering\" }\r\n ,\"microsoft.network/virtualwans\": { \"SingularDisplayName\": \"Virtual WAN\" }\r\n ,\"microsoft.network/vpngateways\": { \"SingularDisplayName\": \"VPN Gateway\" }\r\n ,\"microsoft.network/vpngateways/vpnconnections\": { \"SingularDisplayName\": \"Microsoft.Network VPN gateways VPN connection\" }\r\n ,\"microsoft.network/vpngateways/vpnconnections/vpnlinkconnections\": { \"SingularDisplayName\": \"Microsoft.Network VPN gateways VPN connections VPN link connection\" }\r\n ,\"microsoft.network/vpnserverconfigurations\": { \"SingularDisplayName\": \"Microsoft.Network VPN server configuration\" }\r\n ,\"microsoft.network/vpnsites\": { \"SingularDisplayName\": \"Microsoft.Network VPN site\" }\r\n ,\"microsoft.network/vpnsites/vpnsitelinks\": { \"SingularDisplayName\": \"Microsoft.Network VPN sites VPN site link\" }\r\n ,\"microsoft.networkanalytics/dataconnectors\": { \"SingularDisplayName\": \"AIOps - Data Connector\" }\r\n ,\"microsoft.networkanalytics/datalakehouses\": { \"SingularDisplayName\": \"AIOps - Data LakeHouse\" }\r\n ,\"microsoft.networkanalytics/dataproducts\": { \"SingularDisplayName\": \"Azure Operator Insights ? Data Product\" }\r\n ,\"microsoft.networkanalytics/dataproducts/datatypes\": { \"SingularDisplayName\": \"Data Type\" }\r\n ,\"microsoft.networkanalytics/dataproductscatalogs\": { \"SingularDisplayName\": \"Microsoft.NetworkAnalytics data products catalog\" }\r\n ,\"microsoft.networkanalytics/metricsingestionendpoints\": { \"SingularDisplayName\": \"Microsoft.NetworkAnalytics metrics ingestion endpoint\" }\r\n ,\"microsoft.networkanalytics/networkanalyticsproducts\": { \"SingularDisplayName\": \"Microsoft.NetworkAnalytics network analytics product\" }\r\n ,\"microsoft.networkcloud/baremetalmachines\": { \"SingularDisplayName\": \"Bare Metal Machine (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/cloudservicesnetworks\": { \"SingularDisplayName\": \"Cloud Services Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clustermanagers\": { \"SingularDisplayName\": \"Cluster Manager (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters\": { \"SingularDisplayName\": \"Cluster (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters/baremetalmachinekeysets\": { \"SingularDisplayName\": \"Cluster Bare Metal Machine Key Set (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters/bmckeysets\": { \"SingularDisplayName\": \"Cluster Baseboard Management Controller Key Set (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/clusters/metricsconfigurations\": { \"SingularDisplayName\": \"Cluster Metrics Configuration (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/edgeclustermachineskus\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster machine SKU\" }\r\n ,\"microsoft.networkcloud/edgeclusterruntimeversions\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster runtime version\" }\r\n ,\"microsoft.networkcloud/edgeclusters\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster\" }\r\n ,\"microsoft.networkcloud/edgeclusters/nodes\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge clusters node\" }\r\n ,\"microsoft.networkcloud/edgeclusterskus\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud edge cluster SKU\" }\r\n ,\"microsoft.networkcloud/kubernetesclusters\": { \"SingularDisplayName\": \"Kubernetes Cluster (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/kubernetesclusters/agentpools\": { \"SingularDisplayName\": \"Agent Pool (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/l2networks\": { \"SingularDisplayName\": \"Layer 2 Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/l3networks\": { \"SingularDisplayName\": \"Layer 3 Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/racks\": { \"SingularDisplayName\": \"Compute Rack (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/rackskus\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud rack SKU\" }\r\n ,\"microsoft.networkcloud/registrationhubs\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud registration hub\" }\r\n ,\"microsoft.networkcloud/registrationhubs/images\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud registration hubs image\" }\r\n ,\"microsoft.networkcloud/registrationhubs/machines\": { \"SingularDisplayName\": \"Microsoft.NetworkCloud registration hubs machine\" }\r\n ,\"microsoft.networkcloud/storageappliances\": { \"SingularDisplayName\": \"Storage Appliance (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/trunkednetworks\": { \"SingularDisplayName\": \"Trunked Network (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/virtualmachines\": { \"SingularDisplayName\": \"Virtual Machine (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/virtualmachines/consoles\": { \"SingularDisplayName\": \"Virtual Machine Console (Operator Nexus)\" }\r\n ,\"microsoft.networkcloud/volumes\": { \"SingularDisplayName\": \"Volume (Operator Nexus)\" }\r\n ,\"microsoft.networkfunction/azuretrafficcollectors\": { \"SingularDisplayName\": \"ExpressRoute traffic collector\" }\r\n ,\"microsoft.networkfunction/meshvpns\": { \"SingularDisplayName\": \"Mesh VPN\" }\r\n ,\"microsoft.nexusidentity/identitycontrollers\": { \"SingularDisplayName\": \"Microsoft.NexusIdentity identity controller\" }\r\n ,\"microsoft.nexusidentity/identitysets\": { \"SingularDisplayName\": \"Microsoft.NexusIdentity identity set\" }\r\n ,\"microsoft.notebooks/notebookproxies\": { \"SingularDisplayName\": \"Microsoft.Notebooks notebook proxy\" }\r\n ,\"microsoft.notificationhubs/namespaces\": { \"SingularDisplayName\": \"Notification Hub Namespace\" }\r\n ,\"microsoft.notificationhubs/namespaces/notificationhubs\": { \"SingularDisplayName\": \"Notification Hub\" }\r\n ,\"microsoft.objectstore/osnamespaces\": { \"SingularDisplayName\": \"Microsoft.ObjectStore os namespace\" }\r\n ,\"microsoft.offazure/hypervsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv site\" }\r\n ,\"microsoft.offazure/hypervsites/clusters\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites cluster\" }\r\n ,\"microsoft.offazure/hypervsites/hosts\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites host\" }\r\n ,\"microsoft.offazure/hypervsites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites job\" }\r\n ,\"microsoft.offazure/hypervsites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites machine\" }\r\n ,\"microsoft.offazure/hypervsites/machines/softwareinventories\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites machines software inventory\" }\r\n ,\"microsoft.offazure/hypervsites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites operations statu\" }\r\n ,\"microsoft.offazure/hypervsites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure hyperv sites run as account\" }\r\n ,\"microsoft.offazure/importsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure import site\" }\r\n ,\"microsoft.offazure/importsites/deletejobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites delete job\" }\r\n ,\"microsoft.offazure/importsites/exportjobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites export job\" }\r\n ,\"microsoft.offazure/importsites/importjobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites import job\" }\r\n ,\"microsoft.offazure/importsites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites job\" }\r\n ,\"microsoft.offazure/importsites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure import sites machine\" }\r\n ,\"microsoft.offazure/mastersites\": { \"SingularDisplayName\": \"Microsoft.OffAzure master site\" }\r\n ,\"microsoft.offazure/mastersites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites operations statu\" }\r\n ,\"microsoft.offazure/mastersites/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites private endpoint connection\" }\r\n ,\"microsoft.offazure/mastersites/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites private link resource\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql site\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/discoverysitedatasources\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites discovery site data source\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites job\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites operations statu\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites run as account\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/sqlavailabilitygroups\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites sql availability group\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/sqldatabases\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites sql database\" }\r\n ,\"microsoft.offazure/mastersites/sqlsites/sqlservers\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites sql sites sql server\" }\r\n ,\"microsoft.offazure/mastersites/webappsites\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app site\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/discoverysitedatasources\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites discovery site data source\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/extendedmachines\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites extended machine\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/iiswebapplications\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites iis web application\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/iiswebservers\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites iis web server\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites runasaccount\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/tomcatwebapplications\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites tomcat web application\" }\r\n ,\"microsoft.offazure/mastersites/webappsites/tomcatwebservers\": { \"SingularDisplayName\": \"Microsoft.OffAzure master sites web app sites tomcat web server\" }\r\n ,\"microsoft.offazure/serversites\": { \"SingularDisplayName\": \"Microsoft.OffAzure server site\" }\r\n ,\"microsoft.offazure/serversites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites job\" }\r\n ,\"microsoft.offazure/serversites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites machine\" }\r\n ,\"microsoft.offazure/serversites/machines/softwareinventories\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites machines software inventory\" }\r\n ,\"microsoft.offazure/serversites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites operations statu\" }\r\n ,\"microsoft.offazure/serversites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure server sites run as account\" }\r\n ,\"microsoft.offazure/vmwaresites\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware site\" }\r\n ,\"microsoft.offazure/vmwaresites/hosts\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites host\" }\r\n ,\"microsoft.offazure/vmwaresites/jobs\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites job\" }\r\n ,\"microsoft.offazure/vmwaresites/machines\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites machine\" }\r\n ,\"microsoft.offazure/vmwaresites/machines/softwareinventories\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites machines software inventory\" }\r\n ,\"microsoft.offazure/vmwaresites/operationsstatus\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites operations statu\" }\r\n ,\"microsoft.offazure/vmwaresites/runasaccounts\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites run as account\" }\r\n ,\"microsoft.offazure/vmwaresites/vcenters\": { \"SingularDisplayName\": \"Microsoft.OffAzure vmware sites vcenter\" }\r\n ,\"microsoft.offazurespringboot/springbootsites\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsite\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/errorsummaries\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites error summary\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/springbootapps\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites springbootapp\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/springbootservers\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites springbootserver\" }\r\n ,\"microsoft.offazurespringboot/springbootsites/summaries\": { \"SingularDisplayName\": \"Microsoft.OffAzureSpringBoot springbootsites summary\" }\r\n ,\"microsoft.openenergyplatform/energyservices\": { \"SingularDisplayName\": \"Azure Data Manager for Energy\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspace\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/applicationregistrations\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces application registration\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/applications\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces application\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/eventgridfilters\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces event grid filter\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/shares\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces share\" }\r\n ,\"microsoft.openlogisticsplatform/workspaces/sharesubscriptions\": { \"SingularDisplayName\": \"Microsoft.OpenLogisticsPlatform workspaces share subscription\" }\r\n ,\"microsoft.operationalinsights/clusters\": { \"SingularDisplayName\": \"Log Analytics dedicated cluster\" }\r\n ,\"microsoft.operationalinsights/querypacks\": { \"SingularDisplayName\": \"Log Analytics query pack\" }\r\n ,\"microsoft.operationalinsights/workspaces\": { \"SingularDisplayName\": \"Log Analytics workspace\" }\r\n ,\"microsoft.operationsmanagement/managementassociations\": { \"SingularDisplayName\": \"Microsoft.OperationsManagement management association\" }\r\n ,\"microsoft.operationsmanagement/solutions\": { \"SingularDisplayName\": \"Solution\" }\r\n ,\"microsoft.operatorvoicemail/operatorvoicemailinstances\": { \"SingularDisplayName\": \"Microsoft.OperatorVoicemail operator voicemail instance\" }\r\n ,\"microsoft.oraclediscovery/oraclesites\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle site\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/errorsummaries\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites error summary\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/oracledatabases\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites oracle database\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/oracleservers\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites oracle server\" }\r\n ,\"microsoft.oraclediscovery/oraclesites/summaries\": { \"SingularDisplayName\": \"Microsoft.OracleDiscovery oracle sites summary\" }\r\n ,\"microsoft.orbital/cloudaccessrouters\": { \"SingularDisplayName\": \"Cloud Access Router\" }\r\n ,\"microsoft.orbital/contactprofiles\": { \"SingularDisplayName\": \"Contact Profile\" }\r\n ,\"microsoft.orbital/edgesites\": { \"SingularDisplayName\": \"Edge Site\" }\r\n ,\"microsoft.orbital/geocatalogs\": { \"SingularDisplayName\": \"GeoCatalog\" }\r\n ,\"microsoft.orbital/globalcommunicationssites\": { \"SingularDisplayName\": \"Microsoft.Orbital global communications site\" }\r\n ,\"microsoft.orbital/groundstations\": { \"SingularDisplayName\": \"Ground Station\" }\r\n ,\"microsoft.orbital/l2connections\": { \"SingularDisplayName\": \"L2 Connection\" }\r\n ,\"microsoft.orbital/sdwancontrollers\": { \"SingularDisplayName\": \"SDWAN Controller\" }\r\n ,\"microsoft.orbital/spacecrafts\": { \"SingularDisplayName\": \"Spacecraft\" }\r\n ,\"microsoft.orbital/spacecrafts/contacts\": { \"SingularDisplayName\": \"Contact\" }\r\n ,\"microsoft.orbital/terminals\": { \"SingularDisplayName\": \"Cloud Access Terminal\" }\r\n ,\"microsoft.partnermanagedconsumerrecurrence/recurrences\": { \"SingularDisplayName\": \"Microsoft.PartnerManagedConsumerRecurrence recurrence\" }\r\n ,\"microsoft.partnermanagedconsumerrecurrence/recurrences/operationresult\": { \"SingularDisplayName\": \"Microsoft.PartnerManagedConsumerRecurrence recurrences operation result\" }\r\n ,\"microsoft.peering/peerasns\": { \"SingularDisplayName\": \"Microsoft.Peering peer asn\" }\r\n ,\"microsoft.peering/peerings\": { \"SingularDisplayName\": \"Peering\" }\r\n ,\"microsoft.peering/peerings/registeredasns\": { \"SingularDisplayName\": \"Registered ASN\" }\r\n ,\"microsoft.peering/peerings/registeredprefixes\": { \"SingularDisplayName\": \"Registered prefix\" }\r\n ,\"microsoft.peering/peeringservices\": { \"SingularDisplayName\": \"Peering Service\" }\r\n ,\"microsoft.peering/peeringservices/prefixes\": { \"SingularDisplayName\": \"Peering Service Prefix\" }\r\n ,\"microsoft.pki/pkis\": { \"SingularDisplayName\": \"Microsoft.Pki PKI\" }\r\n ,\"microsoft.pki/pkis/certificateauthorities\": { \"SingularDisplayName\": \"Microsoft.Pki pkis certificate authority\" }\r\n ,\"microsoft.pki/pkis/enrollmentpolicies\": { \"SingularDisplayName\": \"Microsoft.Pki pkis enrollment policy\" }\r\n ,\"microsoft.policyinsights/attestations\": { \"SingularDisplayName\": \"Microsoft.PolicyInsights attestation\" }\r\n ,\"microsoft.policyinsights/policymetadata\": { \"SingularDisplayName\": \"Microsoft.PolicyInsights policy metadata\" }\r\n ,\"microsoft.policyinsights/remediations\": { \"SingularDisplayName\": \"Microsoft.PolicyInsights remediation\" }\r\n ,\"microsoft.portal/consoles\": { \"SingularDisplayName\": \"Microsoft.Portal console\" }\r\n ,\"microsoft.portal/dashboards\": { \"SingularDisplayName\": \"Shared dashboard\" }\r\n ,\"microsoft.portal/tenantconfigurations\": { \"SingularDisplayName\": \"Microsoft.Portal tenant configuration\" }\r\n ,\"microsoft.portal/usersettings\": { \"SingularDisplayName\": \"Microsoft.Portal user setting\" }\r\n ,\"microsoft.portal/virtual-privatedashboards\": { \"SingularDisplayName\": \"Private dashboard\" }\r\n ,\"microsoft.portalservices/copilotsettings\": { \"SingularDisplayName\": \"Microsoft.PortalServices copilot setting\" }\r\n ,\"microsoft.portalservices/dashboards\": { \"SingularDisplayName\": \"Shared dashboard\" }\r\n ,\"microsoft.portalservices/extensions\": { \"SingularDisplayName\": \"Portal Extension\" }\r\n ,\"microsoft.portalservices/extensions/deployments\": { \"SingularDisplayName\": \"Extension Deployment\" }\r\n ,\"microsoft.portalservices/extensions/slots\": { \"SingularDisplayName\": \"Extension Slot\" }\r\n ,\"microsoft.portalservices/extensions/versions\": { \"SingularDisplayName\": \"Extension Version\" }\r\n ,\"microsoft.powerbi/privatelinkservicesforpowerbi\": { \"SingularDisplayName\": \"Microsoft.PowerBI private link services for power bi\" }\r\n ,\"microsoft.powerbi/privatelinkservicesforpowerbi/privateendpointconnections\": { \"SingularDisplayName\": \"Microsoft.PowerBI private link services for power bi private endpoint connection\" }\r\n ,\"microsoft.powerbi/privatelinkservicesforpowerbi/privatelinkresources\": { \"SingularDisplayName\": \"Microsoft.PowerBI private link services for power bi private link resource\" }\r\n ,\"microsoft.powerbi/workspacecollections\": { \"SingularDisplayName\": \"Microsoft.PowerBI workspace collection\" }\r\n ,\"microsoft.powerbidedicated/autoscalevcores\": { \"SingularDisplayName\": \"Microsoft.PowerBIDedicated auto scale vcore\" }\r\n ,\"microsoft.powerbidedicated/capacities\": { \"SingularDisplayName\": \"Power BI Embedded\" }\r\n ,\"microsoft.powerplatform/accounts\": { \"SingularDisplayName\": \"Microsoft.PowerPlatform account\" }\r\n ,\"microsoft.professionalservice/resources\": { \"SingularDisplayName\": \"Professional Service\" }\r\n ,\"microsoft.programmableconnectivity/gateways\": { \"SingularDisplayName\": \"APC Gateway\" }\r\n ,\"microsoft.programmableconnectivity/operatorapiconnections\": { \"SingularDisplayName\": \"APC Operator API Connection\" }\r\n ,\"microsoft.programmableconnectivity/operatorapiplans\": { \"SingularDisplayName\": \"APC Operator API Plan\" }\r\n ,\"microsoft.providerhub/providerregistrations\": { \"SingularDisplayName\": \"Resource Provider as a Service\" }\r\n ,\"microsoft.providerhub/providerregistrations/customrollouts\": { \"SingularDisplayName\": \"Rollout\" }\r\n ,\"microsoft.providerhub/providerregistrations/defaultrollouts\": { \"SingularDisplayName\": \"Rollout\" }\r\n ,\"microsoft.providerhub/providerregistrations/resourcetyperegistrations\": { \"SingularDisplayName\": \"Resource Type\" }\r\n ,\"microsoft.providerhub/providerregistrations/resourcetyperegistrations/resourcetyperegistrations\": { \"SingularDisplayName\": \"Resource Type\" }\r\n ,\"microsoft.providerhubdevtest/regionalstresstests\": { \"SingularDisplayName\": \"Microsoft.ProviderHubDevTest regional stresstest\" }\r\n ,\"microsoft.providerhubdevtest/stresstests\": { \"SingularDisplayName\": \"Microsoft.ProviderHubDevTest stresstest\" }\r\n ,\"microsoft.purview/accounts\": { \"SingularDisplayName\": \"Microsoft Purview account\" }\r\n ,\"microsoft.quantum/workspaces\": { \"SingularDisplayName\": \"Quantum Workspace\" }\r\n ,\"microsoft.quota/groupquotas\": { \"SingularDisplayName\": \"Microsoft.Quota group quota\" }\r\n ,\"microsoft.quota/groupquotas/groupquotarequests\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas group quota request\" }\r\n ,\"microsoft.quota/groupquotas/quotaallocationrequests\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas quota allocation request\" }\r\n ,\"microsoft.quota/groupquotas/quotaallocations\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas quota allocation\" }\r\n ,\"microsoft.quota/groupquotas/subscriptionrequests\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas subscription request\" }\r\n ,\"microsoft.quota/groupquotas/subscriptions\": { \"SingularDisplayName\": \"Microsoft.Quota group quotas subscription\" }\r\n ,\"microsoft.quota/quotarequests\": { \"SingularDisplayName\": \"Microsoft.Quota quota request\" }\r\n ,\"microsoft.quota/quotas\": { \"SingularDisplayName\": \"Microsoft.Quota quota\" }\r\n ,\"microsoft.quota/usages\": { \"SingularDisplayName\": \"Microsoft.Quota usage\" }\r\n ,\"microsoft.recommendationsservice/accounts\": { \"SingularDisplayName\": \"Intelligent Recommendations Account\" }\r\n ,\"microsoft.recommendationsservice/accounts/modeling\": { \"SingularDisplayName\": \"Modeling\" }\r\n ,\"microsoft.recommendationsservice/accounts/serviceendpoints\": { \"SingularDisplayName\": \"Service Endpoint\" }\r\n ,\"microsoft.recoveryservices/replicationeligibilityresults\": { \"SingularDisplayName\": \"Microsoft.RecoveryServices replication eligibility result\" }\r\n ,\"microsoft.recoveryservices/vaults\": { \"SingularDisplayName\": \"Recovery Services vault\" }\r\n ,\"microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems\": { \"SingularDisplayName\": \"Backup Item\" }\r\n ,\"microsoft.redhatopenshift/openshiftclusters\": { \"SingularDisplayName\": \"Azure Red Hat OpenShift cluster\" }\r\n ,\"microsoft.relay/namespaces\": { \"SingularDisplayName\": \"Relay\" }\r\n ,\"microsoft.relay/namespaces/hybridconnections\": { \"SingularDisplayName\": \"Hybrid connection\" }\r\n ,\"microsoft.relay/namespaces/wcfrelays\": { \"SingularDisplayName\": \"WCF relay\" }\r\n ,\"microsoft.resilience/resiliencestates\": { \"SingularDisplayName\": \"Microsoft.Resilience resilience state\" }\r\n ,\"microsoft.resourceconnector/appliances\": { \"SingularDisplayName\": \"Resource bridge\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#4": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData/Internal')\r\n_resource_type_4(id: string) {\r\n dynamic({\r\n \"microsoft.resourcegraph/queries\": { \"SingularDisplayName\": \"Resource Graph query\" }\r\n ,\"microsoft.resourcehealth/availabilitystatuses\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth availability statuse\" }\r\n ,\"microsoft.resourcehealth/childavailabilitystatuses\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth child availability statuse\" }\r\n ,\"microsoft.resourcehealth/emergingissues\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth emerging issue\" }\r\n ,\"microsoft.resourcehealth/events\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth event\" }\r\n ,\"microsoft.resourcehealth/events/impactedresources\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth events impacted resource\" }\r\n ,\"microsoft.resourcehealth/metadata\": { \"SingularDisplayName\": \"Microsoft.ResourceHealth metadata\" }\r\n ,\"microsoft.resources/builtintemplatespecs\": { \"SingularDisplayName\": \"Built-in template spec\" }\r\n ,\"microsoft.resources/changes\": { \"SingularDisplayName\": \"Microsoft.Resources change\" }\r\n ,\"microsoft.resources/databoundaries\": { \"SingularDisplayName\": \"Microsoft.Resources data boundary\" }\r\n ,\"microsoft.resources/deletedresources\": { \"SingularDisplayName\": \"Recycle Bin\" }\r\n ,\"microsoft.resources/deployments\": { \"SingularDisplayName\": \"Microsoft.Resources deployment\" }\r\n ,\"microsoft.resources/deployments/operations\": { \"SingularDisplayName\": \"Microsoft.Resources deployments operation\" }\r\n ,\"microsoft.resources/deploymentscripts\": { \"SingularDisplayName\": \"Deployment Script\" }\r\n ,\"microsoft.resources/deploymentstacks\": { \"SingularDisplayName\": \"Deployment stack\" }\r\n ,\"microsoft.resources/mobobrokers\": { \"SingularDisplayName\": \"Microsoft.Resources mobo broker\" }\r\n ,\"microsoft.resources/resourcechange\": { \"SingularDisplayName\": \"Change Analysis\" }\r\n ,\"microsoft.resources/resourcechanges\": { \"SingularDisplayName\": \"Resource change\" }\r\n ,\"microsoft.resources/resourcegraphvisualizer\": { \"SingularDisplayName\": \"Resource Graph Visualizer\" }\r\n ,\"microsoft.resources/resourcegroups\": { \"SingularDisplayName\": \"Microsoft.Resources resource group\" }\r\n ,\"microsoft.resources/resources\": { \"SingularDisplayName\": \"Resource\" }\r\n ,\"microsoft.resources/snapshots\": { \"SingularDisplayName\": \"Microsoft.Resources snapshot\" }\r\n ,\"microsoft.resources/subscriptions\": { \"SingularDisplayName\": \"Subscription\" }\r\n ,\"microsoft.resources/subscriptions/resourcegroups\": { \"SingularDisplayName\": \"Resource group\" }\r\n ,\"microsoft.resources/tags\": { \"SingularDisplayName\": \"Microsoft.Resources tag\" }\r\n ,\"microsoft.resources/templatespecs\": { \"SingularDisplayName\": \"Template spec\" }\r\n ,\"microsoft.saas/applications\": { \"SingularDisplayName\": \"Software as a Service (classic)\" }\r\n ,\"microsoft.saas/resources\": { \"SingularDisplayName\": \"SaaS\" }\r\n ,\"microsoft.saas/saasresources\": { \"SingularDisplayName\": \"SaaS (classic)\" }\r\n ,\"microsoft.saashub/cloudservices/hidden\": { \"SingularDisplayName\": \"Microsoft SaaS\" }\r\n ,\"microsoft.salescopilot/conversationintelligencerecordingaccounts\": { \"SingularDisplayName\": \"Microsoft.SalesCopilot conversation intelligence recording account\" }\r\n ,\"microsoft.samplepartner/organizations\": { \"SingularDisplayName\": \"Sample Partner Resource\" }\r\n ,\"microsoft.scheduler/jobcollections\": { \"SingularDisplayName\": \"Scheduler job collection\" }\r\n ,\"microsoft.scheduler/jobcollections/jobs\": { \"SingularDisplayName\": \"Scheduler job\" }\r\n ,\"microsoft.scom/managedinstances\": { \"SingularDisplayName\": \"SCOM managed instance\" }\r\n ,\"microsoft.scvmm/availabilitysets\": { \"SingularDisplayName\": \"Microsoft.ScVmm availability set\" }\r\n ,\"microsoft.scvmm/clouds\": { \"SingularDisplayName\": \"Microsoft.ScVmm cloud\" }\r\n ,\"microsoft.scvmm/virtualmachineinstances\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine instance\" }\r\n ,\"microsoft.scvmm/virtualmachineinstances/guestagents\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine instances guest agent\" }\r\n ,\"microsoft.scvmm/virtualmachineinstances/hybrididentitymetadata\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine instances hybrid identity metadata\" }\r\n ,\"microsoft.scvmm/virtualmachines\": { \"SingularDisplayName\": \"SCVMM virtual machine - Azure Arc\" }\r\n ,\"microsoft.scvmm/virtualmachinetemplates\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual machine template\" }\r\n ,\"microsoft.scvmm/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.ScVmm virtual network\" }\r\n ,\"microsoft.scvmm/vmmservers\": { \"SingularDisplayName\": \"SCVMM management server\" }\r\n ,\"microsoft.search/searchservices\": { \"SingularDisplayName\": \"Search service\" }\r\n ,\"microsoft.secretmanagementsampleprovider/forecasts\": { \"SingularDisplayName\": \"Microsoft.SecretManagementSampleProvider forecast\" }\r\n ,\"microsoft.secretsynccontroller/azurekeyvaultsecretproviderclasses\": { \"SingularDisplayName\": \"Microsoft.SecretSyncController Azure key vault secret provider class\" }\r\n ,\"microsoft.secretsynccontroller/secretsyncs\": { \"SingularDisplayName\": \"Microsoft.SecretSyncController secret sync\" }\r\n ,\"microsoft.security/adaptivenetworkhardenings\": { \"SingularDisplayName\": \"Microsoft.Security adaptive network hardening\" }\r\n ,\"microsoft.security/advancedthreatprotectionsettings\": { \"SingularDisplayName\": \"Microsoft.Security advanced threat protection setting\" }\r\n ,\"microsoft.security/alertssuppressionrules\": { \"SingularDisplayName\": \"Microsoft.Security alerts suppression rule\" }\r\n ,\"microsoft.security/apicollections\": { \"SingularDisplayName\": \"Microsoft.Security API collection\" }\r\n ,\"microsoft.security/applications\": { \"SingularDisplayName\": \"Microsoft.Security application\" }\r\n ,\"microsoft.security/assessmentmetadata\": { \"SingularDisplayName\": \"Microsoft.Security assessment metadata\" }\r\n ,\"microsoft.security/assessments\": { \"SingularDisplayName\": \"Microsoft.Security assessment\" }\r\n ,\"microsoft.security/assessments/governanceassignments\": { \"SingularDisplayName\": \"Microsoft.Security assessments governance assignment\" }\r\n ,\"microsoft.security/assessments/subassessments\": { \"SingularDisplayName\": \"Microsoft.Security assessments sub assessment\" }\r\n ,\"microsoft.security/assignments\": { \"SingularDisplayName\": \"Microsoft.Security assignment\" }\r\n ,\"microsoft.security/automations\": { \"SingularDisplayName\": \"Microsoft.Security automation\" }\r\n ,\"microsoft.security/autoprovisioningsettings\": { \"SingularDisplayName\": \"Microsoft.Security auto provisioning setting\" }\r\n ,\"microsoft.security/complianceresults\": { \"SingularDisplayName\": \"Microsoft.Security compliance result\" }\r\n ,\"microsoft.security/compliances\": { \"SingularDisplayName\": \"Microsoft.Security compliance\" }\r\n ,\"microsoft.security/connectors\": { \"SingularDisplayName\": \"Microsoft.Security connector\" }\r\n ,\"microsoft.security/customassessmentautomations\": { \"SingularDisplayName\": \"Microsoft.Security custom assessment automation\" }\r\n ,\"microsoft.security/defenderforstoragesettings\": { \"SingularDisplayName\": \"Microsoft.Security defender for storage setting\" }\r\n ,\"microsoft.security/defenderforstoragesettings/malwarescans\": { \"SingularDisplayName\": \"Microsoft.Security defender for storage settings malware scan\" }\r\n ,\"microsoft.security/devicesecuritygroups\": { \"SingularDisplayName\": \"Microsoft.Security device security group\" }\r\n ,\"microsoft.security/governancerules\": { \"SingularDisplayName\": \"Microsoft.Security governance rule\" }\r\n ,\"microsoft.security/governancerules/operationresults\": { \"SingularDisplayName\": \"Microsoft.Security governance rules operation result\" }\r\n ,\"microsoft.security/healthreports\": { \"SingularDisplayName\": \"Microsoft.Security health report\" }\r\n ,\"microsoft.security/informationprotectionpolicies\": { \"SingularDisplayName\": \"Microsoft.Security information protection policy\" }\r\n ,\"microsoft.security/iotsecuritysolutions\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solution\" }\r\n ,\"microsoft.security/iotsecuritysolutions/analyticsmodels\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions analytics model\" }\r\n ,\"microsoft.security/iotsecuritysolutions/analyticsmodels/aggregatedalerts\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions analytics models aggregated alert\" }\r\n ,\"microsoft.security/iotsecuritysolutions/analyticsmodels/aggregatedrecommendations\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions analytics models aggregated recommendation\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotalerts\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT alert\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotalerttypes\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT alert type\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotrecommendations\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT recommendation\" }\r\n ,\"microsoft.security/iotsecuritysolutions/iotrecommendationtypes\": { \"SingularDisplayName\": \"Microsoft.Security IoT security solutions IoT recommendation type\" }\r\n ,\"microsoft.security/locations/alerts\": { \"SingularDisplayName\": \"Security Alert\" }\r\n ,\"microsoft.security/mdeonboardings\": { \"SingularDisplayName\": \"Microsoft.Security mde onboarding\" }\r\n ,\"microsoft.security/pricings\": { \"SingularDisplayName\": \"Defender for Cloud\" }\r\n ,\"microsoft.security/pricings/securityoperators\": { \"SingularDisplayName\": \"Microsoft.Security pricings security operator\" }\r\n ,\"microsoft.security/regulatorycompliancestandards\": { \"SingularDisplayName\": \"Microsoft.Security regulatory compliance standard\" }\r\n ,\"microsoft.security/regulatorycompliancestandards/regulatorycompliancecontrols\": { \"SingularDisplayName\": \"Microsoft.Security regulatory compliance standards regulatory compliance control\" }\r\n ,\"microsoft.security/regulatorycompliancestandards/regulatorycompliancecontrols/regulatorycomplianceassessments\": { \"SingularDisplayName\": \"Microsoft.Security regulatory compliance standards regulatory compliance controls regulatory compliance assessment\" }\r\n ,\"microsoft.security/securescores\": { \"SingularDisplayName\": \"Microsoft.Security secure score\" }\r\n ,\"microsoft.security/securityconnectors\": { \"SingularDisplayName\": \"Microsoft.Security security connector\" }\r\n ,\"microsoft.security/securityconnectors/devops\": { \"SingularDisplayName\": \"Microsoft.Security security connectors devop\" }\r\n ,\"microsoft.security/securitycontacts\": { \"SingularDisplayName\": \"Microsoft.Security security contact\" }\r\n ,\"microsoft.security/sensitivitysettings\": { \"SingularDisplayName\": \"Microsoft.Security sensitivity setting\" }\r\n ,\"microsoft.security/servervulnerabilityassessments\": { \"SingularDisplayName\": \"Microsoft.Security server vulnerability assessment\" }\r\n ,\"microsoft.security/servervulnerabilityassessmentssettings\": { \"SingularDisplayName\": \"Microsoft.Security server vulnerability assessments setting\" }\r\n ,\"microsoft.security/settings\": { \"SingularDisplayName\": \"Microsoft.Security setting\" }\r\n ,\"microsoft.security/standards\": { \"SingularDisplayName\": \"Microsoft.Security standard\" }\r\n ,\"microsoft.security/workspacesettings\": { \"SingularDisplayName\": \"Microsoft.Security workspace setting\" }\r\n ,\"microsoft.securitycopilot/capacities\": { \"SingularDisplayName\": \"Microsoft Security Copilot compute capacity\" }\r\n ,\"microsoft.securitydetonation/chambers\": { \"SingularDisplayName\": \"Security Detonation Chamber\" }\r\n ,\"microsoft.securityinsightsarg/sentinel\": { \"SingularDisplayName\": \"Microsoft Sentinel\" }\r\n ,\"microsoft.serialconsole/consoleservices\": { \"SingularDisplayName\": \"Microsoft.SerialConsole console service\" }\r\n ,\"microsoft.serialconsole/serialports\": { \"SingularDisplayName\": \"Microsoft.SerialConsole serial port\" }\r\n ,\"microsoft.servicebus/namespaces\": { \"SingularDisplayName\": \"Service Bus namespace\" }\r\n ,\"microsoft.servicebus/namespaces/disasterrecoveryconfigs\": { \"SingularDisplayName\": \"Service Bus Geo-DR Alias\" }\r\n ,\"microsoft.servicebus/namespaces/queues\": { \"SingularDisplayName\": \"Service Bus queue\" }\r\n ,\"microsoft.servicebus/namespaces/topics\": { \"SingularDisplayName\": \"Service Bus topic\" }\r\n ,\"microsoft.servicebus/namespaces/topics/subscriptions\": { \"SingularDisplayName\": \"Service Bus Subscription\" }\r\n ,\"microsoft.servicefabric/clusters\": { \"SingularDisplayName\": \"Service Fabric cluster\" }\r\n ,\"microsoft.servicefabric/managedclusters\": { \"SingularDisplayName\": \"Service Fabric managed cluster\" }\r\n ,\"microsoft.servicefabricmesh/applications\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh application\" }\r\n ,\"microsoft.servicefabricmesh/applications/services\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh applications service\" }\r\n ,\"microsoft.servicefabricmesh/applications/services/replicas\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh applications services replica\" }\r\n ,\"microsoft.servicefabricmesh/gateways\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh gateway\" }\r\n ,\"microsoft.servicefabricmesh/networks\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh network\" }\r\n ,\"microsoft.servicefabricmesh/secrets\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh secret\" }\r\n ,\"microsoft.servicefabricmesh/secrets/values\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh secrets value\" }\r\n ,\"microsoft.servicefabricmesh/volumes\": { \"SingularDisplayName\": \"Microsoft.ServiceFabricMesh volume\" }\r\n ,\"microsoft.servicelinker/dryruns\": { \"SingularDisplayName\": \"Microsoft.ServiceLinker dryrun\" }\r\n ,\"microsoft.servicelinker/linkers\": { \"SingularDisplayName\": \"Microsoft.ServiceLinker linker\" }\r\n ,\"microsoft.servicenetworking/trafficcontrollers\": { \"SingularDisplayName\": \"Application Gateway for Containers\" }\r\n ,\"microsoft.serviceshub/connectors\": { \"SingularDisplayName\": \"Services Hub Connector\" }\r\n ,\"microsoft.signalrservice/signalr\": { \"SingularDisplayName\": \"SignalR\" }\r\n ,\"microsoft.signalrservice/signalr/replicas\": { \"SingularDisplayName\": \"SignalR Replica\" }\r\n ,\"microsoft.signalrservice/webpubsub\": { \"SingularDisplayName\": \"Web PubSub Service\" }\r\n ,\"microsoft.signalrservice/webpubsub/replicas\": { \"SingularDisplayName\": \"Web PubSub Service Replica\" }\r\n ,\"microsoft.skytap/billingnodes\": { \"SingularDisplayName\": \"Microsoft.Skytap billing node\" }\r\n ,\"microsoft.skytap/interfaces\": { \"SingularDisplayName\": \"Microsoft.Skytap interface\" }\r\n ,\"microsoft.skytap/nodes\": { \"SingularDisplayName\": \"Microsoft.Skytap node\" }\r\n ,\"microsoft.softwareplan/hybridusebenefits\": { \"SingularDisplayName\": \"Microsoft.SoftwarePlan hybrid use benefit\" }\r\n ,\"microsoft.solutions/applicationdefinitions\": { \"SingularDisplayName\": \"Service catalog managed application definition\" }\r\n ,\"microsoft.solutions/applications\": { \"SingularDisplayName\": \"Managed application\" }\r\n ,\"microsoft.solutions/jitrequests\": { \"SingularDisplayName\": \"Microsoft.Solutions JIT request\" }\r\n ,\"microsoft.sovereign/landingzoneaccounts\": { \"SingularDisplayName\": \"Landing zone accounts\" }\r\n ,\"microsoft.sovereign/landingzoneaccounts/landingzoneconfigurations\": { \"SingularDisplayName\": \"Landing Zone Configuration\" }\r\n ,\"microsoft.sovereign/landingzoneaccounts/landingzoneregistrations\": { \"SingularDisplayName\": \"Landing Zone Registration\" }\r\n ,\"microsoft.sovereign/landingzoneconfigurations\": { \"SingularDisplayName\": \"Landing Zone Configuration\" }\r\n ,\"microsoft.sovereign/landingzoneregistrations\": { \"SingularDisplayName\": \"Landing Zone Registration\" }\r\n ,\"microsoft.sovereign/transparencylogs\": { \"SingularDisplayName\": \"Transparency log\" }\r\n ,\"microsoft.sql/azuresql\": { \"SingularDisplayName\": \"Azure SQL resource\" }\r\n ,\"microsoft.sql/instancepools\": { \"SingularDisplayName\": \"Instance pool\" }\r\n ,\"microsoft.sql/managedinstances\": { \"SingularDisplayName\": \"SQL managed instance\" }\r\n ,\"microsoft.sql/managedinstances/databases\": { \"SingularDisplayName\": \"Managed database\" }\r\n ,\"microsoft.sql/servers\": { \"SingularDisplayName\": \"SQL server\" }\r\n ,\"microsoft.sql/servers/databases\": { \"SingularDisplayName\": \"SQL database\" }\r\n ,\"microsoft.sql/servers/elasticpools\": { \"SingularDisplayName\": \"SQL elastic pool\" }\r\n ,\"microsoft.sql/servers/jobagents\": { \"SingularDisplayName\": \"Elastic Job agent\" }\r\n ,\"microsoft.sql/virtualclusters\": { \"SingularDisplayName\": \"Virtual cluster\" }\r\n ,\"microsoft.sqlvirtualmachine/sqlvirtualmachinegroups\": { \"SingularDisplayName\": \"Microsoft.SqlVirtualMachine sql virtual machine group\" }\r\n ,\"microsoft.sqlvirtualmachine/sqlvirtualmachinegroups/availabilitygrouplisteners\": { \"SingularDisplayName\": \"Microsoft.SqlVirtualMachine sql virtual machine groups availability group listener\" }\r\n ,\"microsoft.sqlvirtualmachine/sqlvirtualmachines\": { \"SingularDisplayName\": \"SQL virtual machine\" }\r\n ,\"microsoft.standbypool/standbycontainergrouppools\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby container group pool\" }\r\n ,\"microsoft.standbypool/standbycontainergrouppools/runtimeviews\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby container group pools runtime view\" }\r\n ,\"microsoft.standbypool/standbyvirtualmachinepools\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby virtual machine pool\" }\r\n ,\"microsoft.standbypool/standbyvirtualmachinepools/runtimeviews\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby virtual machine pools runtime view\" }\r\n ,\"microsoft.standbypool/standbyvirtualmachinepools/standbyvirtualmachines\": { \"SingularDisplayName\": \"Microsoft.StandbyPool standby virtual machine pools standby virtual machine\" }\r\n ,\"microsoft.storage/storageaccounts\": { \"SingularDisplayName\": \"Storage account\" }\r\n ,\"microsoft.storageactions/storagetasks\": { \"SingularDisplayName\": \"Storage task - Azure Storage Actions\" }\r\n ,\"microsoft.storagecache/amlfilesystems\": { \"SingularDisplayName\": \"Azure Managed Lustre\" }\r\n ,\"microsoft.storagecache/caches\": { \"SingularDisplayName\": \"HPC cache\" }\r\n ,\"microsoft.storageinsights/storagecollectionrules\": { \"SingularDisplayName\": \"Microsoft.StorageInsights storage collection rule\" }\r\n ,\"microsoft.storagemover/storagemovers\": { \"SingularDisplayName\": \"Storage mover\" }\r\n ,\"microsoft.storagepool/diskpools\": { \"SingularDisplayName\": \"Microsoft.StoragePool disk pool\" }\r\n ,\"microsoft.storagepool/diskpools/iscsitargets\": { \"SingularDisplayName\": \"Microsoft.StoragePool disk pools iscsi target\" }\r\n ,\"microsoft.storagesync/storagesyncservices\": { \"SingularDisplayName\": \"Storage Sync Service\" }\r\n ,\"microsoft.storagetasks/storagetasks\": { \"SingularDisplayName\": \"Microsoft.StorageTasks storage task\" }\r\n ,\"microsoft.storsimple/managers\": { \"SingularDisplayName\": \"StorSimple device manager\" }\r\n ,\"microsoft.storsimple/managers/accesscontrolrecords\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers access control record\" }\r\n ,\"microsoft.storsimple/managers/bandwidthsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers bandwidth setting\" }\r\n ,\"microsoft.storsimple/managers/certificates\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers certificate\" }\r\n ,\"microsoft.storsimple/managers/devices\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers device\" }\r\n ,\"microsoft.storsimple/managers/devices/alertsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices alert setting\" }\r\n ,\"microsoft.storsimple/managers/devices/backuppolicies\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices backup policy\" }\r\n ,\"microsoft.storsimple/managers/devices/backuppolicies/schedules\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices backup policies schedule\" }\r\n ,\"microsoft.storsimple/managers/devices/backupschedulegroups\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices backup schedule group\" }\r\n ,\"microsoft.storsimple/managers/devices/chapsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices chap setting\" }\r\n ,\"microsoft.storsimple/managers/devices/fileservers\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices fileserver\" }\r\n ,\"microsoft.storsimple/managers/devices/fileservers/shares\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices fileservers share\" }\r\n ,\"microsoft.storsimple/managers/devices/iscsiservers\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices iscsiserver\" }\r\n ,\"microsoft.storsimple/managers/devices/iscsiservers/disks\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices iscsiservers disk\" }\r\n ,\"microsoft.storsimple/managers/devices/jobs\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices job\" }\r\n ,\"microsoft.storsimple/managers/devices/networksettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices network setting\" }\r\n ,\"microsoft.storsimple/managers/devices/securitysettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices security setting\" }\r\n ,\"microsoft.storsimple/managers/devices/timesettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices time setting\" }\r\n ,\"microsoft.storsimple/managers/devices/updatesummary\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices update summary\" }\r\n ,\"microsoft.storsimple/managers/devices/volumecontainers\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices volume container\" }\r\n ,\"microsoft.storsimple/managers/devices/volumecontainers/volumes\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers devices volume containers volume\" }\r\n ,\"microsoft.storsimple/managers/encryptionsettings\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers encryption setting\" }\r\n ,\"microsoft.storsimple/managers/extendedinformation\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers extended information\" }\r\n ,\"microsoft.storsimple/managers/storageaccountcredentials\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers storage account credential\" }\r\n ,\"microsoft.storsimple/managers/storagedomains\": { \"SingularDisplayName\": \"Microsoft.StorSimple managers storage domain\" }\r\n ,\"microsoft.streamanalytics/clusters\": { \"SingularDisplayName\": \"Stream Analytics cluster\" }\r\n ,\"microsoft.streamanalytics/streamingjobs\": { \"SingularDisplayName\": \"Stream Analytics job\" }\r\n ,\"microsoft.subscription/aliases\": { \"SingularDisplayName\": \"Microsoft.Subscription aliase\" }\r\n ,\"microsoft.subscription/changetenantrequest\": { \"SingularDisplayName\": \"Microsoft.Subscription change tenant request\" }\r\n ,\"microsoft.subscription/policies\": { \"SingularDisplayName\": \"Microsoft.Subscription policy\" }\r\n ,\"microsoft.subscription/subscriptiondefinitions\": { \"SingularDisplayName\": \"Microsoft.Subscription subscription definition\" }\r\n ,\"microsoft.subscription/subscriptionoperations\": { \"SingularDisplayName\": \"Microsoft.Subscription subscription operation\" }\r\n ,\"microsoft.support/fileworkspaces\": { \"SingularDisplayName\": \"Microsoft.Support file workspace\" }\r\n ,\"microsoft.support/fileworkspaces/files\": { \"SingularDisplayName\": \"Microsoft.Support file workspaces file\" }\r\n ,\"microsoft.support/services\": { \"SingularDisplayName\": \"Microsoft.Support service\" }\r\n ,\"microsoft.support/services/problemclassifications\": { \"SingularDisplayName\": \"Microsoft.Support services problem classification\" }\r\n ,\"microsoft.support/supporttickets\": { \"SingularDisplayName\": \"Support Request\" }\r\n ,\"microsoft.sustainabilityservices/calculations\": { \"SingularDisplayName\": \"Microsoft.SustainabilityServices calculation\" }\r\n ,\"microsoft.symphony/instances\": { \"SingularDisplayName\": \"Microsoft.Symphony instance\" }\r\n ,\"microsoft.symphony/solutions\": { \"SingularDisplayName\": \"Microsoft.Symphony solution\" }\r\n ,\"microsoft.symphony/targets\": { \"SingularDisplayName\": \"Microsoft.Symphony target\" }\r\n ,\"microsoft.synapse/privatelinkhubs\": { \"SingularDisplayName\": \"Synapse private link hub\" }\r\n ,\"microsoft.synapse/workspaces\": { \"SingularDisplayName\": \"Synapse workspace\" }\r\n ,\"microsoft.synapse/workspaces/bigdatapools\": { \"SingularDisplayName\": \"Apache Spark pool\" }\r\n ,\"microsoft.synapse/workspaces/kustopools\": { \"SingularDisplayName\": \"Data Explorer pool\" }\r\n ,\"microsoft.synapse/workspaces/kustopools/databases\": { \"SingularDisplayName\": \"Data Explorer Database\" }\r\n ,\"microsoft.synapse/workspaces/scopepools\": { \"SingularDisplayName\": \"SCOPE pool\" }\r\n ,\"microsoft.synapse/workspaces/sqlpools\": { \"SingularDisplayName\": \"Dedicated SQL pool\" }\r\n ,\"microsoft.syntex/accounts\": { \"SingularDisplayName\": \"Microsoft.Syntex account\" }\r\n ,\"microsoft.syntex/documentprocessors\": { \"SingularDisplayName\": \"Microsoft.Syntex document processor\" }\r\n ,\"microsoft.test/healthdataaiservices\": { \"SingularDisplayName\": \"Azure Health Data and AI Services\" }\r\n ,\"microsoft.timeseriesinsights/environments\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environment\" }\r\n ,\"microsoft.timeseriesinsights/environments/accesspolicies\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environments access policy\" }\r\n ,\"microsoft.timeseriesinsights/environments/eventsources\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environments event source\" }\r\n ,\"microsoft.timeseriesinsights/environments/referencedatasets\": { \"SingularDisplayName\": \"Microsoft.TimeSeriesInsights environments reference data set\" }\r\n ,\"microsoft.toolchainorchestrator/activations\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator activation\" }\r\n ,\"microsoft.toolchainorchestrator/campaigns\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator campaign\" }\r\n ,\"microsoft.toolchainorchestrator/campaigns/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator campaigns version\" }\r\n ,\"microsoft.toolchainorchestrator/catalogs\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator catalog\" }\r\n ,\"microsoft.toolchainorchestrator/catalogs/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator catalogs version\" }\r\n ,\"microsoft.toolchainorchestrator/instances\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator instance\" }\r\n ,\"microsoft.toolchainorchestrator/instances/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator instances version\" }\r\n ,\"microsoft.toolchainorchestrator/solutions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator solution\" }\r\n ,\"microsoft.toolchainorchestrator/solutions/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator solutions version\" }\r\n ,\"microsoft.toolchainorchestrator/targets\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator target\" }\r\n ,\"microsoft.toolchainorchestrator/targets/versions\": { \"SingularDisplayName\": \"Microsoft.ToolchainOrchestrator targets version\" }\r\n ,\"microsoft.usagebilling/accounts\": { \"SingularDisplayName\": \"Microsoft.UsageBilling account\" }\r\n ,\"microsoft.usagebilling/accounts/dataexports\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts data export\" }\r\n ,\"microsoft.usagebilling/accounts/inputs\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts input\" }\r\n ,\"microsoft.usagebilling/accounts/metricexports\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts metric export\" }\r\n ,\"microsoft.usagebilling/accounts/pav2outputs\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts pav2output\" }\r\n ,\"microsoft.usagebilling/accounts/pipelines\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts pipeline\" }\r\n ,\"microsoft.usagebilling/accounts/pipelines/outputselectors\": { \"SingularDisplayName\": \"Microsoft.UsageBilling accounts pipelines output selector\" }\r\n ,\"microsoft.verifiedid/authorities\": { \"SingularDisplayName\": \"Microsoft.VerifiedId authority\" }\r\n ,\"microsoft.videoindexer/accounts\": { \"SingularDisplayName\": \"Azure AI Video Indexer\" }\r\n ,\"microsoft.virtualmachineimages/imagetemplates\": { \"SingularDisplayName\": \"Image template\" }\r\n ,\"microsoft.visualstudio/account\": { \"SingularDisplayName\": \"Azure DevOps organization\" }\r\n ,\"microsoft.vmware/resourcepools\": { \"SingularDisplayName\": \"Microsoft.VMware resource pool\" }\r\n ,\"microsoft.vmware/vcenters\": { \"SingularDisplayName\": \"Microsoft.VMware vcenter\" }\r\n ,\"microsoft.vmware/vcenters/inventoryitems\": { \"SingularDisplayName\": \"Microsoft.VMware vcenters inventory item\" }\r\n ,\"microsoft.vmware/virtualmachines\": { \"SingularDisplayName\": \"Microsoft.VMware virtual machine\" }\r\n ,\"microsoft.vmware/virtualmachinetemplates\": { \"SingularDisplayName\": \"Microsoft.VMware virtual machine template\" }\r\n ,\"microsoft.vmware/virtualnetworks\": { \"SingularDisplayName\": \"Microsoft.VMware virtual network\" }\r\n ,\"microsoft.vmwarecloudsimple/dedicatedcloudnodes\": { \"SingularDisplayName\": \"Microsoft.VMwareCloudSimple dedicated cloud node\" }\r\n ,\"microsoft.vmwarecloudsimple/dedicatedcloudservices\": { \"SingularDisplayName\": \"Microsoft.VMwareCloudSimple dedicated cloud service\" }\r\n ,\"microsoft.vmwarecloudsimple/virtualmachines\": { \"SingularDisplayName\": \"Microsoft.VMwareCloudSimple virtual machine\" }\r\n ,\"microsoft.vnfmanager/devices\": { \"SingularDisplayName\": \"Microsoft.VnfManager device\" }\r\n ,\"microsoft.vnfmanager/vendors\": { \"SingularDisplayName\": \"Microsoft.VnfManager vendor\" }\r\n ,\"microsoft.vnfmanager/vendors/skus\": { \"SingularDisplayName\": \"Microsoft.VnfManager vendors SKU\" }\r\n ,\"microsoft.vnfmanager/vnfs\": { \"SingularDisplayName\": \"Microsoft.VnfManager vnf\" }\r\n ,\"microsoft.voiceservices/communicationsgateways\": { \"SingularDisplayName\": \"Communications Gateway\" }\r\n ,\"microsoft.voiceservices/communicationsgateways/testlines\": { \"SingularDisplayName\": \"Communications Gateway Test Line\" }\r\n ,\"microsoft.vsonline/accounts\": { \"SingularDisplayName\": \"Microsoft.VSOnline account\" }\r\n ,\"microsoft.vsonline/plans\": { \"SingularDisplayName\": \"Visual Studio Online Plan\" }\r\n ,\"microsoft.web/certificates\": { \"SingularDisplayName\": \"Microsoft.Web certificate\" }\r\n ,\"microsoft.web/connectiongateways\": { \"SingularDisplayName\": \"App Service on-premises data gateway\" }\r\n ,\"microsoft.web/connections\": { \"SingularDisplayName\": \"App Service API connection\" }\r\n ,\"microsoft.web/containerapps\": { \"SingularDisplayName\": \"Microsoft.Web container app\" }\r\n ,\"microsoft.web/containerapps/revisions\": { \"SingularDisplayName\": \"Microsoft.Web container apps revision\" }\r\n ,\"microsoft.web/customapis\": { \"SingularDisplayName\": \"Logic apps custom connector\" }\r\n ,\"microsoft.web/deletedsites\": { \"SingularDisplayName\": \"Microsoft.Web deleted site\" }\r\n ,\"microsoft.web/hostingenvironments\": { \"SingularDisplayName\": \"App Service Environment\" }\r\n ,\"microsoft.web/ishostingenvironmentnameavailable\": { \"SingularDisplayName\": \"Microsoft.Web ishostingenvironmentnameavailable\" }\r\n ,\"microsoft.web/kubeenvironments\": { \"SingularDisplayName\": \"App Service Kubernetes Environment\" }\r\n ,\"microsoft.web/publishingusers\": { \"SingularDisplayName\": \"Microsoft.Web publishing user\" }\r\n ,\"microsoft.web/serverfarms\": { \"SingularDisplayName\": \"App Service plan\" }\r\n ,\"microsoft.web/sites\": { \"SingularDisplayName\": \"App Service web app\" }\r\n ,\"microsoft.web/sites/slots\": { \"SingularDisplayName\": \"App Service deployment slot\" }\r\n ,\"microsoft.web/sourcecontrols\": { \"SingularDisplayName\": \"Microsoft.Web sourcecontrol\" }\r\n ,\"microsoft.web/staticsites\": { \"SingularDisplayName\": \"Static Web App\" }\r\n ,\"microsoft.weightsandbiases/instances\": { \"SingularDisplayName\": \"Azure Native WeightsAndBiases Cloud Service\" }\r\n ,\"microsoft.whiteboxcadlprovider/whiteboxresources\": { \"SingularDisplayName\": \"Microsoft.WhiteBoxCadlProvider white box resource\" }\r\n ,\"microsoft.windows365/cloudpcdelegatedmsis\": { \"SingularDisplayName\": \"Microsoft.Windows365 cloud pc delegated msi\" }\r\n ,\"microsoft.windowsesu/multipleactivationkeys\": { \"SingularDisplayName\": \"Microsoft.WindowsESU multiple activation key\" }\r\n ,\"microsoft.windowsiot/deviceservices\": { \"SingularDisplayName\": \"Microsoft.WindowsIoT device service\" }\r\n ,\"microsoft.windowspushnotificationservices/registrations\": { \"SingularDisplayName\": \"Microsoft.WindowsPushNotificationServices registration\" }\r\n ,\"microsoft.workloadmonitor/monitors\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitor\" }\r\n ,\"microsoft.workloadmonitor/monitors/history\": { \"SingularDisplayName\": \"Microsoft.WorkloadMonitor monitors history\" }\r\n ,\"microsoft.workloads/connectors\": { \"SingularDisplayName\": \"Microsoft.Workloads connector\" }\r\n ,\"microsoft.workloads/connectors/acssbackups\": { \"SingularDisplayName\": \"Microsoft.Workloads connectors acss backup\" }\r\n ,\"microsoft.workloads/connectors/amsinsights\": { \"SingularDisplayName\": \"Microsoft.Workloads connectors ams insight\" }\r\n ,\"microsoft.workloads/connectors/sapvirtualinstancemonitors\": { \"SingularDisplayName\": \"Microsoft.Workloads connectors sap virtual instance monitor\" }\r\n ,\"microsoft.workloads/epicvirtualinstances\": { \"SingularDisplayName\": \"Virtual Instance for Epic solution\" }\r\n ,\"microsoft.workloads/insights\": { \"SingularDisplayName\": \"Microsoft.Workloads insight\" }\r\n ,\"microsoft.workloads/monitors\": { \"SingularDisplayName\": \"Azure Monitor for SAP solutions\" }\r\n ,\"microsoft.workloads/oraclevirtualinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads oracle virtual instance\" }\r\n ,\"microsoft.workloads/oraclevirtualinstances/databaseinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads oracle virtual instances database instance\" }\r\n ,\"microsoft.workloads/phpworkloads\": { \"SingularDisplayName\": \"Microsoft.Workloads php workload\" }\r\n ,\"microsoft.workloads/phpworkloads/wordpressinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads php workloads wordpress instance\" }\r\n ,\"microsoft.workloads/sapdiscoverysites\": { \"SingularDisplayName\": \"Microsoft.Workloads sap discovery site\" }\r\n ,\"microsoft.workloads/sapdiscoverysites/sapinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads sap discovery sites sap instance\" }\r\n ,\"microsoft.workloads/sapdiscoverysites/sapinstances/serverinstances\": { \"SingularDisplayName\": \"Microsoft.Workloads sap discovery sites sap instances server instance\" }\r\n ,\"microsoft.workloads/sapvirtualinstances\": { \"SingularDisplayName\": \"Virtual Instance for SAP solutions\" }\r\n ,\"microsoft.workloads/sapvirtualinstances/applicationinstances\": { \"SingularDisplayName\": \"App server instance for SAP solutions\" }\r\n ,\"microsoft.workloads/sapvirtualinstances/centralinstances\": { \"SingularDisplayName\": \"Central service instance for SAP solutions\" }\r\n ,\"microsoft.workloads/sapvirtualinstances/databaseinstances\": { \"SingularDisplayName\": \"Database for SAP solutions\" }\r\n ,\"neon.postgres/organizations\": { \"SingularDisplayName\": \"Neon Serverless Postgres Resource\" }\r\n ,\"newrelic.observability/monitors\": { \"SingularDisplayName\": \"New Relic\" }\r\n ,\"nginx.nginxplus/nginxdeployments\": { \"SingularDisplayName\": \"NGINXaaS\" }\r\n ,\"oracle.database/autonomousdatabases\": { \"SingularDisplayName\": \"Autonomous Database\" }\r\n ,\"oracle.database/cloudexadatainfrastructures\": { \"SingularDisplayName\": \"Oracle Exadata Infrastructure\" }\r\n ,\"oracle.database/cloudvmclusters\": { \"SingularDisplayName\": \"Oracle Exadata VM Cluster\" }\r\n ,\"oracle.database/oraclesubscriptions\": { \"SingularDisplayName\": \"OracleSubscription\" }\r\n ,\"paloaltonetworks.cloudngfw/firewalls\": { \"SingularDisplayName\": \"Cloud NGFW by Palo Alto Networks\" }\r\n ,\"paloaltonetworks.cloudngfw/globalrulestacks\": { \"SingularDisplayName\": \"Global Rulestack\" }\r\n ,\"paloaltonetworks.cloudngfw/localrulestacks\": { \"SingularDisplayName\": \"Local Rulestack for Cloud NGFW by Palo Alto Networks\" }\r\n ,\"pinecone.vectordb/organizations\": { \"SingularDisplayName\": \"Azure Native Pinecone Cloud Service\" }\r\n ,\"purestorage.block/reservations\": { \"SingularDisplayName\": \"Azure Native Pure Storage Cloud Service\" }\r\n ,\"purestorage.block/storagepools\": { \"SingularDisplayName\": \"Storage pool\" }\r\n ,\"purestorage.block/storagepools/avsstoragecontainers\": { \"SingularDisplayName\": \"PureStorage.Block storage pools avs storage container\" }\r\n ,\"qumulo.qaas/storages\": { \"SingularDisplayName\": \"Qumulo.QaaS storage\" }\r\n ,\"qumulo.storage/filesystems\": { \"SingularDisplayName\": \"Azure Native Qumulo Scalable File Service\" }\r\n ,\"solarwinds.observability/organizations\": { \"SingularDisplayName\": \"SolarWinds Observability\" }\r\n ,\"splitio.experimentation/experimentationworkspaces\": { \"SingularDisplayName\": \"Split Experimentation Workspace\" }\r\n ,\"wandisco.fusion/migrators\": { \"SingularDisplayName\": \"LiveData Migrator\" }\r\n ,\"wandisco.fusion/migrators/datatransferagents\": { \"SingularDisplayName\": \"Data Transfer Agent\" }\r\n ,\"wandisco.fusion/migrators/exclusiontemplates\": { \"SingularDisplayName\": \"Exclusion\" }\r\n ,\"wandisco.fusion/migrators/livedatamigrations\": { \"SingularDisplayName\": \"Migration\" }\r\n ,\"wandisco.fusion/migrators/metadatamigrations\": { \"SingularDisplayName\": \"Metadata Migration\" }\r\n ,\"wandisco.fusion/migrators/metadatatargets\": { \"SingularDisplayName\": \"Metadata Target\" }\r\n ,\"wandisco.fusion/migrators/pathmappings\": { \"SingularDisplayName\": \"Path Mapping\" }\r\n ,\"wandisco.fusion/migrators/targets\": { \"SingularDisplayName\": \"Target\" }\r\n ,\"wandisco.fusion/migrators/verifications\": { \"SingularDisplayName\": \"Verification\" }\r\n })[tolower(id)]\r\n}\r\n",
+ "$fxv#5": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n// resource_type\r\n.create-or-alter function \r\nwith (docstring = 'Return details about the specified ID.', folder = 'OpenData')\r\nresource_type(id: string) {\r\n coalesce(_resource_type_1(id), _resource_type_2(id), _resource_type_3(id), _resource_type_4(id))\r\n}\r\n",
+ "$fxv#6": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Common utility functions\r\n//\r\n// TIP: Use Ctrl+K,Ctrl+0 to collapse all regions in VS Code\r\n//======================================================================================================================\r\n\r\n\r\n//===| Date functions |=================================================================================================\r\n\r\n// monthstring\r\n.create-or-alter function \r\nwith (docstring = @'Returns the name of the month for the specified date (e.g. Jan or January)', folder =@'Common') \r\nmonthstring(['date']: datetime, length: int = 9)\r\n{\r\n substring(dynamic(['January','February','March','April','May','June','July','August','September','October','November','December'])[getmonth(['date']) - 1], 0, length)\r\n}\r\n\r\n// datestring\r\n.create-or-alter function \r\nwith (docstring = @'Converts 2 dates into a simple, user-friendly date range (e.g. Jan 1-Jan 3)', folder =@'Common') \r\ndatestring(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n let month = (d: datetime) { monthstring(d, 3) };\r\n let endDate = iff(end == datetime('0001-01-01'), start, end);\r\n let sameDate = startofday(start) == startofday(endDate);\r\n let sameMonth = startofmonth(start) == startofmonth(endDate);\r\n let sameYear = startofyear(start) == startofyear(endDate);\r\n let fullMonth = startofday(start) == startofmonth(start) and startofday(endDate) == startofday(endofmonth(endDate));\r\n let fullYear = startofday(start) == startofyear(start) and startofday(endDate) == startofday(endofyear(endDate));\r\n let currentYear = sameYear and startofyear(start) == startofyear(now());\r\n case(\r\n // Full year | yyyy (same year) / yyyy-yyyy (diff years)\r\n fullYear,\r\n strcat(getyear(start), iff(sameYear, '', strcat('-', getyear(endDate)))),\r\n // 1 full mo, same year | Mmm yyyy\r\n fullMonth and sameMonth and sameYear,\r\n strcat(month(start), ' ', getyear(start)),\r\n // 2+ full mo, same year | Mmm-Mmm (current year) / Mmm-Mmm yyyy (other year)\r\n fullMonth and sameYear,\r\n strcat(month(start), '-', month(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // Full mo, diff year | Mmm yyyy-Mmm yyyy\r\n fullMonth and not(sameYear),\r\n strcat(month(start), ' ', getyear(start), '-', month(endDate), ' ', getyear(endDate)),\r\n // Same date | Mmm d (current year) / Mmm d, yyyy (other year)\r\n sameDate,\r\n strcat(month(start), ' ', dayofmonth(start), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // 1 partial M, same Y | Mmm d-d (current year) / Mmm d-d, yyyy (other year)\r\n not(fullMonth) and sameMonth and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', dayofmonth(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // 2+ partial M, same Y | Mmm d-Mmm d (current year) / Mmm d-Mmm d, yyyy (other year)\r\n not(fullMonth) and not(sameMonth) and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', month(endDate), ' ', dayofmonth(endDate), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // All other cases | Mmm d, yyyy-Mmm d, yyyy\r\n strcat(month(start), ' ', dayofmonth(start), ', ', getyear(start), '-', month(endDate), ' ', dayofmonth(endDate), ', ', getyear(endDate))\r\n )\r\n}\r\n\r\n// daterange\r\n.create-or-alter function \r\nwith (docstring = @'DEPRECATED: Please use datestring(); function will be removed on or after the Jan 2026 release', folder =@'Common') \r\ndaterange(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n datestring(start, end)\r\n}\r\n\r\n// monthsago\r\n.create-or-alter function \r\nwith (docstring = 'DEPRECATED: Please use startofmonth(now(), -<# of months>); function will be removed on or after the Jan 2026 release', folder = 'Common')\r\nmonthsago(months: int)\r\n{\r\n datetime_add('month', -months, startofmonth(now()))\r\n}\r\n\r\n\r\n//===| Number functions |===============================================================================================\r\n// NOTE: Must be defined before string converters\r\n\r\n// delta\r\n.create-or-alter function \r\nwith (docstring = @'Compares 2 values and returns the percentage change from oldval to newval', folder =@'Common') \r\ndelta(oldval: double, newval: double)\r\n{\r\n (newval - todouble(oldval))/oldval\r\n}\r\n\r\n// percentOfTotal\r\n// NOTE: Must be before percent() function\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercentOfTotal(t: (Count: long), tot: long)\r\n{\r\n let total = todouble(tot);\r\n t \r\n | extend Percent = round(Count / total * 100, 3) \r\n | order by Count desc\r\n}\r\n\r\n// percent\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercent(t: (Count: long))\r\n{\r\n let total = todouble(toscalar(t | summarize sum(Count)));\r\n percentOfTotal(t, total)\r\n}\r\n\r\n// plusminus\r\n.create-or-alter function \r\nwith (docstring = 'Shows a +/- sign based on the direction of the number', folder = 'Common')\r\nplusminus(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, val, strcat('+', val))\r\n}\r\n\r\n// updown\r\n.create-or-alter function \r\nwith (docstring = 'Shows an up/down arrow based on the direction of the number', folder = 'Common')\r\nupdown(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, strcat('β', substring(val, 1)), strcat('β', val))\r\n}\r\n\r\n\r\n//===| String functions |===============================================================================================\r\n\r\n// percentstring\r\n// NOTE: Must be defined before deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a percentage and render as a string', folder = 'Common')\r\npercentstring(num: double, total: double = 1.0, places: int = 9)\r\n{\r\n let value = 1.0 * num / total * 100;\r\n strcat(case(\r\n places != 9, round(value, places),\r\n value < 10, round(value, 2),\r\n round(value, 1)\r\n ), '%')\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// arraystring\r\n.create-or-alter function \r\nwith (docstring = 'Convert an array to a comma-delimited string', folder = 'Common')\r\narraystring(arr: dynamic)\r\n{\r\n replace_string(replace_regex(replace_regex(replace_regex(replace_regex(replace_regex(\r\n tostring(arr)\r\n , @'^\\[\"', '')\r\n , @'\"\\]$', '')\r\n , @'^, ', '')\r\n , @', $', '')\r\n , @'^\\[]$', '')\r\n , '\",\"', ', ')\r\n}\r\n\r\n// deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a delta percentage and render as a string', folder = 'Common')\r\ndeltastring(oldval: double, newval: double, places: int = 1, useArrows: bool = false)\r\n{\r\n let d = delta(oldval, newval);\r\n strcat(case(useArrows and d > 0, 'β', useArrows and d < 0, 'β', d < 0, '-', ''), percentstring(abs(d), 1, places))\r\n}\r\n\r\n// diffstring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate the difference and render as a string', folder = 'Common')\r\ndiffstring(oldval: double, newval: double, places: int = 1)\r\n{\r\n plusminus(round(newval - oldval, places))\r\n}\r\n\r\n// numberstring\r\n.create-or-alter function \r\nwith (docstring = 'Convert a number to a string', folder = 'Common')\r\nnumberstring(num: double, abbrev: bool = true)\r\n{\r\n replace_regex(case(\r\n num >= 10000000000000, strcat(round(1.0 * num / 1000000000000, 1), 'T'),\r\n num >= 1000000000000, strcat(round(1.0 * num / 1000000000000, 2), 'T'),\r\n num >= 10000000000, strcat(round(1.0 * num / 1000000000, 1), 'B'),\r\n num >= 1000000000, strcat(round(1.0 * num / 1000000000, 2), 'B'),\r\n num >= 10000000, strcat(round(1.0 * num / 1000000, 1), 'M'),\r\n num >= 1000000, strcat(round(1.0 * num / 1000000, 2), 'M'),\r\n num >= 10000, strcat(round(1.0 * num / 1000, 1), 'K'),\r\n // Kusto doesn't support back-refs yet -- num > 1000, replace_regex(tostring(num), @'(\\d)(?=(\\d{3})+\\.)', @'\\1,'), // See https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/re2-library\r\n num > 1000, replace_regex(tostring(num), @'([0-9]{3})$', @',\\1'), //num / 1000, ',', substring(tostring(num), 0) - (num / 1000 * 1000)),\r\n tostring(num)\r\n ), @'\\.0$', '')\r\n}\r\n\r\n\r\n//===| Other |==========================================================================================================\r\n\r\n// ifempty\r\n.create-or-alter function \r\nwith (docstring = 'Replaces an empty value with the specified default value', folder = 'Common')\r\nifempty(val: dynamic, defaultVal: dynamic)\r\n{\r\n iff(isempty(val), defaultVal, val)\r\n}\r\n",
+ "$fxv#7": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Ingestion database\r\n// Used for data ingestion, normalization, and cleansing.\r\n//\r\n// Data ingestion workflow:\r\n// - All data is ingested into tables named \"*_raw\". These tables have a union schema to support multiple sources and versions.\r\n// - All data is transformed to the latest FOCUS schema using an update policy into a table named after the version (e.g., \"1.0\" = \"_v1_0\").\r\n// - Data ingestion from previous version of hubs will remain in the versioned tables.\r\n// - Data is read from versioned functions in the Hub database. See HubSetup.kql for details.\r\n//\r\n// To add a new FOCUS versions:\r\n// 1. Add new columns to the *_raw tables per dataset\r\n// 2. Add new *_final_vX_Y tables per dataset\r\n// 3. Add new *_transform_vX_Y functions per dataset\r\n// 4. Change the update policy for the *_raw tables to use the new transform functions\r\n// 5. Update HubSetup.kql to read from the new *_final_vX_Y tables\r\n//======================================================================================================================\r\n\r\n// For allowed commands, see https://learn.microsoft.com/azure/data-explorer/database-script\r\n\r\n//===| Settings |=======================================================================================================\r\n\r\n.create-merge table HubSettingsLog (\r\n version: string,\r\n scopes: dynamic,\r\n retention: dynamic\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// HubSettings function\r\n.create-or-alter function\r\nwith (docstring='Gets the latest version of hub settings.', folder='Settings')\r\nHubSettings()\r\n{\r\n HubSettingsLog\r\n | extend timestamp = ingestion_time()\r\n | summarize arg_max(timestamp, *)\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// HubScopes function\r\n.create-or-alter function\r\nwith (docstring='Gets the currently configured scopes.', folder='Settings')\r\nHubScopes()\r\n{\r\n HubSettings\r\n | project scopes\r\n | mv-expand scopes\r\n}\r\n\r\n\r\n//===| Open data |======================================================================================================\r\n\r\n// PricingUnits\r\n.create-merge table PricingUnits ( \r\n x_PricingUnitDescription: string,\r\n x_PricingBlockSize: decimal,\r\n PricingUnit: string\r\n)\r\n\r\n// Regions\r\n.create-merge table Regions(\r\n ResourceLocation: string,\r\n RegionId: string,\r\n RegionName: string\r\n)\r\n\r\n// ResourceTypes\r\n.create-merge table ResourceTypes(\r\n x_ResourceType: string,\r\n SingularDisplayName: string,\r\n PluralDisplayName: string,\r\n LowerSingularDisplayName: string,\r\n LowerPluralDisplayName: string,\r\n IsPreview: bool,\r\n Description: string,\r\n IconUri: string\r\n)\r\n\r\n// Services\r\n.create-merge table Services(\r\n x_ConsumedService: string,\r\n x_ResourceType: string,\r\n ServiceName: string,\r\n ServiceCategory: string,\r\n ServiceSubcategory: string,\r\n PublisherName: string,\r\n x_PublisherCategory: string,\r\n x_Environment: string,\r\n x_ServiceModel: string\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// parse_resourceid\r\n.create-or-alter function \r\nwith (docstring = 'Parses an Azure resource ID to extract resource attributes like the name, type, resource group, and subaccount ID.', folder = 'Common')\r\nparse_resourceid(resourceId: string) {\r\n let ResourceId = tolower(resourceId);\r\n // let ResourceId = tolower('/providers/Microsoft.BillingBenefits/savingsPlanOrders/2d2e284b-0638-427e-b8c6-1b874d4f17c8/sp/xxx');\r\n let SubAccountId = tostring(extract('/subscriptions/[^/]+', 1, ResourceId));\r\n let x_ResourceGroupName = tostring(extract('/resourcegroups/[^/]+', 1, ResourceId));\r\n let providerPath = iff(ResourceId !contains '/providers/', '', split(iff(ResourceId startswith '/subscriptions/', strcat('/providers/microsoft.resources/', ResourceId), ResourceId), '/providers/')[-1]);\r\n let x_ResourceProvider = iff(isempty(providerPath), '', split(providerPath, '/')[0]);\r\n let tmp_ResourceProviderPath = iff(isempty(providerPath), '', substring(providerPath, strlen(x_ResourceProvider) + 1));\r\n let segments = split(tmp_ResourceProviderPath, '/');\r\n let ResourceName = trim(@'/+', replace_string(strcat_array(array_iff(\r\n dynamic([false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]),\r\n segments, dynamic([])), '/'), '//', '/'));\r\n let x_ResourceTypePath = trim(@'/+', replace_string(strcat_array(array_iff(\r\n dynamic([true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false]),\r\n segments, dynamic([])), '/'), '//', '/'));\r\n let xRT = iff(isempty(x_ResourceProvider) or isempty(x_ResourceTypePath), '', strcat(x_ResourceProvider, '/', x_ResourceTypePath));\r\n // TODO: Remove ResourceType in 0.9\r\n bag_pack('ResourceId', ResourceId, 'ResourceName', ResourceName, 'ResourceType', xRT, 'SubAccountId', SubAccountId, 'x_ResourceGroupName', x_ResourceGroupName, 'x_ResourceProvider', x_ResourceProvider, 'x_ResourceType', xRT)\r\n}\r\n\r\n\r\n//===| Prices |=========================================================================================================\r\n// NOTE: Must be before cost details.\r\n//\r\n// Supported versions:\r\n// - MS EA 2023-05-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/price-sheet-ea\r\n// - MS MCA 2023-05-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/price-sheet-mca\r\n//======================================================================================================================\r\n\r\n// Prices_raw table\r\n.create-merge table Prices_raw (\r\n BasePrice: decimal, // Azure EA + MCA\r\n BillingAccountId: string, // Azure MCA\r\n BillingAccountName: string, // Azure MCA\r\n BillingCurrency: string, // Azure MCA\r\n BillingProfileId: string, // Azure MCA\r\n BillingProfileName: string, // Azure MCA\r\n Currency: string, // Azure MCA\r\n CurrencyCode: string, // Azure EA \r\n EffectiveEndDate: datetime, // Azure MCA\r\n EffectiveStartDate: datetime, // Azure EA + MCA\r\n EnrollmentNumber: string, // Azure EA \r\n IncludedQuantity: decimal, // Azure EA \r\n MarketPrice: decimal, // Azure EA + MCA\r\n MeterCategory: string, // Azure EA + MCA\r\n MeterId: string, // Azure MCA\r\n MeterID: string, // Azure EA \r\n MeterName: string, // Azure EA + MCA\r\n MeterRegion: string, // Azure EA + MCA\r\n MeterSubCategory: string, // Azure EA + MCA\r\n MeterType: string, // Azure EA + MCA\r\n OfferID: string, // Azure EA \r\n PartNumber: string, // Azure EA\r\n PriceType: string, // Azure EA + MCA\r\n Product: string, // Azure EA + MCA\r\n ProductId: string, // Azure MCA\r\n ProductID: string, // Azure EA \r\n ServiceFamily: string, // Azure EA + MCA\r\n SkuId: string, // Azure MCA\r\n SkuID: string, // Azure EA\r\n Term: string, // Azure EA + MCA\r\n TierMinimumUnits: decimal, // Azure MCA\r\n UnitOfMeasure: string, // Azure EA + MCA\r\n UnitPrice: decimal, // Azure EA + MCA\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Prices_raw ingestion mapping\r\n.create-or-alter table Prices_raw ingestion parquet mapping \"Prices_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"BasePrice\", \"Properties\": { \"Field\": \"BasePrice\" } },\r\n { \"Column\": \"BillingAccountId\", \"Properties\": { \"Field\": \"BillingAccountId\" } },\r\n { \"Column\": \"BillingAccountName\", \"Properties\": { \"Field\": \"BillingAccountName\" } },\r\n { \"Column\": \"BillingCurrency\", \"Properties\": { \"Field\": \"BillingCurrency\" } },\r\n { \"Column\": \"BillingProfileId\", \"Properties\": { \"Field\": \"BillingProfileId\" } },\r\n { \"Column\": \"BillingProfileName\", \"Properties\": { \"Field\": \"BillingProfileName\" } },\r\n { \"Column\": \"Currency\", \"Properties\": { \"Field\": \"Currency\" } },\r\n { \"Column\": \"CurrencyCode\", \"Properties\": { \"Field\": \"CurrencyCode\" } },\r\n { \"Column\": \"EffectiveEndDate\", \"Properties\": { \"Field\": \"EffectiveEndDate\" } },\r\n { \"Column\": \"EffectiveStartDate\", \"Properties\": { \"Field\": \"EffectiveStartDate\" } },\r\n { \"Column\": \"EnrollmentNumber\", \"Properties\": { \"Field\": \"EnrollmentNumber\" } },\r\n { \"Column\": \"IncludedQuantity\", \"Properties\": { \"Field\": \"IncludedQuantity\" } },\r\n { \"Column\": \"MarketPrice\", \"Properties\": { \"Field\": \"MarketPrice\" } },\r\n { \"Column\": \"MeterCategory\", \"Properties\": { \"Field\": \"MeterCategory\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"MeterID\", \"Properties\": { \"Field\": \"MeterID\" } },\r\n { \"Column\": \"MeterName\", \"Properties\": { \"Field\": \"MeterName\" } },\r\n { \"Column\": \"MeterRegion\", \"Properties\": { \"Field\": \"MeterRegion\" } },\r\n { \"Column\": \"MeterSubCategory\", \"Properties\": { \"Field\": \"MeterSubCategory\" } },\r\n { \"Column\": \"MeterType\", \"Properties\": { \"Field\": \"MeterType\" } },\r\n { \"Column\": \"OfferID\", \"Properties\": { \"Field\": \"OfferID\" } },\r\n { \"Column\": \"PartNumber\", \"Properties\": { \"Field\": \"PartNumber\" } },\r\n { \"Column\": \"PriceType\", \"Properties\": { \"Field\": \"PriceType\" } },\r\n { \"Column\": \"Product\", \"Properties\": { \"Field\": \"Product\" } },\r\n { \"Column\": \"ProductId\", \"Properties\": { \"Field\": \"ProductId\" } },\r\n { \"Column\": \"ProductID\", \"Properties\": { \"Field\": \"ProductID\" } },\r\n { \"Column\": \"ServiceFamily\", \"Properties\": { \"Field\": \"ServiceFamily\" } },\r\n { \"Column\": \"SkuId\", \"Properties\": { \"Field\": \"SkuId\" } },\r\n { \"Column\": \"SkuID\", \"Properties\": { \"Field\": \"SkuID\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TierMinimumUnits\", \"Properties\": { \"Field\": \"TierMinimumUnits\" } },\r\n { \"Column\": \"UnitOfMeasure\", \"Properties\": { \"Field\": \"UnitOfMeasure\" } },\r\n { \"Column\": \"UnitPrice\", \"Properties\": { \"Field\": \"UnitPrice\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Prices_raw retention policy\r\n.alter-merge table Prices_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Prices_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='Transforms Prices_raw into FOCUS 1.0.', folder='Prices')\r\nPrices_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n let prices = materialize(\r\n Prices_raw\r\n | extend x_SkuId = coalesce(SkuId, SkuID)\r\n | extend x_SkuMeterId = coalesce(MeterId, MeterID)\r\n | extend x_SkuProductId = coalesce(ProductId, ProductID)\r\n | extend x_SkuTerm = isoMonths(Term)\r\n | project-rename\r\n x_BaseUnitPrice = BasePrice,\r\n x_EffectivePeriodEnd = EffectiveEndDate,\r\n x_EffectivePeriodStart = EffectiveStartDate,\r\n x_PricingUnitDescription = UnitOfMeasure,\r\n x_SkuIncludedQuantity = IncludedQuantity,\r\n x_SkuMeterCategory = MeterCategory,\r\n x_SkuMeterName = MeterName,\r\n x_SkuMeterSubcategory = MeterSubCategory,\r\n x_SkuMeterType = MeterType,\r\n x_SkuOfferId = OfferID,\r\n x_SkuPartNumber = PartNumber,\r\n x_SkuPriceType = PriceType,\r\n x_SkuRegion = MeterRegion,\r\n x_SkuServiceFamily = ServiceFamily,\r\n x_SkuTier = TierMinimumUnits\r\n | extend ContractedUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', UnitPrice, todecimal('')) // UnitPrice for savings plan is not the on-demand unit price\r\n | extend ListUnitPrice = iff(x_SkuPriceType != 'SavingsPlan', MarketPrice, todecimal('')) // MarketPrice for savings plan is not the list price\r\n | extend ChargeCategory = case(\r\n x_SkuPriceType == 'Consumption', 'Usage',\r\n x_SkuPriceType == 'ReservedInstance', 'Purchase',\r\n x_SkuPriceType == 'SavingsPlan', 'Usage', // Savings plan prices are for committed usage, not the purchase\r\n ''\r\n )\r\n | extend SkuPriceIdv2 = strcat(case(x_SkuPriceType == 'Consumption', 'OD', x_SkuPriceType == 'ReservedInstance', 'RI', x_SkuPriceType == 'SavingsPlan', 'SP', 'XX'), substring(ChargeCategory, 0, 1), x_SkuTerm, '_', x_SkuProductId, '_', x_SkuId, '_', x_SkuMeterType, '_', x_SkuTier, x_SkuOfferId)\r\n | extend x_BillingAccountId = iff(BillingAccountId startswith '/', split(BillingAccountId, '/')[-1], coalesce(BillingAccountId, EnrollmentNumber))\r\n | extend x_BillingProfileId = iff(BillingProfileId startswith '/', split(BillingProfileId, '/')[-1], coalesce(BillingProfileId, EnrollmentNumber))\r\n | extend tmp_SavingsPlanKey = strcat(x_SkuMeterId, x_SkuProductId, x_SkuId, x_SkuTier, x_SkuOfferId)\r\n //\r\n // Get latest ingested row based on the unique ID\r\n | extend x_IngestionTime = ingestion_time()\r\n );\r\n //\r\n // Meters for reservations and savings plans to identify commitment eligibility\r\n let riMeters = prices | where x_SkuPriceType == 'ReservedInstance' | distinct x_SkuMeterId;\r\n let spMeters = prices | where x_SkuPriceType == 'SavingsPlan' | distinct x_SkuMeterId;\r\n // \r\n // Copy list/base/contracted prices from on-demand SKUs\r\n prices\r\n | where x_SkuPriceType == 'SavingsPlan'\r\n // If we use join, specify the shuffle key\r\n // TODO: Compare join vs. lookup perf -- | join kind=leftouter hint.strategy=shuffle (prices | where x_SkuPriceType == 'Consumption' | where x_SkuMeterId in (spMeters) | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey\r\n | lookup kind=leftouter (prices | where x_SkuPriceType == 'Consumption' | where x_SkuMeterId in (spMeters) | distinct tmp_SavingsPlanKey, ListUnitPrice, ContractedUnitPrice, x_BaseUnitPrice) on tmp_SavingsPlanKey\r\n | extend ListUnitPrice = coalesce(ListUnitPrice, ListUnitPrice1)\r\n | extend ContractedUnitPrice = coalesce(ContractedUnitPrice, ContractedUnitPrice1)\r\n | extend x_BaseUnitPrice = coalesce(x_BaseUnitPrice, x_BaseUnitPrice1)\r\n | project-away ListUnitPrice1, ContractedUnitPrice1, x_BaseUnitPrice1, tmp_SavingsPlanKey\r\n | union ((prices | where x_SkuPriceType != 'SavingsPlan'))\r\n //\r\n // Calculate commitment discount elgibility\r\n // TODO: Would a join be faster?\r\n | extend x_CommitmentDiscountSpendEligibility = iff(x_SkuMeterId in (riMeters) and x_SkuPriceType != 'ReservedInstance', 'Eligible', 'Not Eligible')\r\n | extend x_CommitmentDiscountUsageEligibility = iff(x_SkuMeterId in (spMeters), 'Eligible', 'Not Eligible')\r\n //\r\n // Add PricingUnit and x_PricingBlockSize\r\n // TODO: Compare join vs. lookup perf -- | join kind=leftouter (PricingUnits) on x_PricingUnitDescription | project-away x_PricingUnitDescription1\r\n | lookup kind=leftouter (PricingUnits) on x_PricingUnitDescription\r\n //\r\n | extend x_EffectiveUnitPrice = iff(x_SkuPriceType == 'SavingsPlan', UnitPrice, todecimal('')) // Savings plan prices are for the effective price, not the contracted price\r\n | extend x_EffectiveUnitPriceDiscount = ContractedUnitPrice - x_EffectiveUnitPrice\r\n | extend x_ContractedUnitPriceDiscount = ListUnitPrice - ContractedUnitPrice\r\n | extend x_TotalUnitPriceDiscount = ListUnitPrice - x_EffectiveUnitPrice\r\n | project\r\n BillingAccountId = case(\r\n BillingProfileId startswith '/', BillingProfileId,\r\n BillingAccountId startswith '/', BillingAccountId,\r\n strcat('/providers/Microsoft.Billing/billingAccounts/', x_BillingAccountId, iff(x_BillingProfileId != x_BillingAccountId, '', strcat('/billingProfiles/', x_BillingProfileId)))\r\n ),\r\n BillingAccountName = coalesce(BillingProfileName, BillingAccountName, x_BillingProfileId),\r\n BillingCurrency = coalesce(BillingCurrency, CurrencyCode, Currency), // Currency last as a fallback only\r\n ChargeCategory,\r\n CommitmentDiscountCategory = case(\r\n x_SkuPriceType == 'ReservedInstance', 'Usage',\r\n x_SkuPriceType == 'SavingsPlan', 'Spend',\r\n ''\r\n ),\r\n CommitmentDiscountType = case(\r\n x_SkuPriceType == 'ReservedInstance', 'Reservation',\r\n x_SkuPriceType == 'SavingsPlan', 'Savings plan',\r\n ''\r\n ),\r\n ContractedUnitPrice,\r\n ListUnitPrice,\r\n PricingCategory = case(\r\n x_SkuPriceType == 'Consumption', 'Standard',\r\n x_SkuPriceType == 'ReservedInstance', 'Standard', // Reservation purchases are tracked as \"Standard\"\r\n x_SkuPriceType == 'SavingsPlan', 'Committed',\r\n ''\r\n ),\r\n PricingUnit,\r\n SkuId = coalesce(ProductId, ProductID),\r\n SkuPriceId = strcat(x_SkuProductId, '_', x_SkuId, '_', x_SkuMeterType),\r\n SkuPriceIdv2,\r\n x_BaseUnitPrice,\r\n x_BillingAccountAgreement = case(\r\n strlen(x_BillingAccountId) > 32, 'MCA',\r\n strlen(x_BillingAccountId) < 32, 'EA',\r\n 'Unknown'\r\n ),\r\n x_BillingAccountId,\r\n x_BillingProfileId,\r\n x_CommitmentDiscountSpendEligibility,\r\n x_CommitmentDiscountUsageEligibility,\r\n x_ContractedUnitPriceDiscount,\r\n x_ContractedUnitPriceDiscountPercent = 1.0 * x_ContractedUnitPriceDiscount / ListUnitPrice * 100,\r\n x_EffectivePeriodEnd = startofmonth(x_EffectivePeriodEnd + 1h),\r\n x_EffectivePeriodStart,\r\n x_EffectiveUnitPrice,\r\n x_EffectiveUnitPriceDiscount,\r\n x_EffectiveUnitPriceDiscountPercent = 1.0 * x_EffectiveUnitPriceDiscount / ContractedUnitPrice * 100,\r\n x_IngestionTime,\r\n x_PricingBlockSize,\r\n x_PricingCurrency = coalesce(Currency, CurrencyCode), // CurrencyCode last as a fallback only\r\n x_PricingSubcategory = case(\r\n x_SkuPriceType == 'Consumption' and (x_SkuIncludedQuantity > 0 or x_SkuTier > 0), 'Tiered',\r\n x_SkuPriceType == 'Consumption', 'Standard',\r\n x_SkuPriceType == 'ReservedInstance', 'Standard', // Reservation purchases are tracked as \"Standard\"\r\n x_SkuPriceType == 'SavingsPlan', 'Committed Spend',\r\n ''\r\n ),\r\n x_PricingUnitDescription,\r\n x_SkuDescription = Product,\r\n x_SkuId,\r\n x_SkuIncludedQuantity,\r\n x_SkuMeterCategory,\r\n x_SkuMeterId,\r\n x_SkuMeterName,\r\n x_SkuMeterSubcategory,\r\n x_SkuMeterType,\r\n x_SkuPriceType,\r\n x_SkuProductId,\r\n x_SkuRegion,\r\n x_SkuServiceFamily,\r\n x_SkuOfferId,\r\n x_SkuPartNumber,\r\n x_SkuTerm,\r\n x_SkuTier,\r\n x_SourceName = coalesce(x_SourceName, 'Cost Management'),\r\n x_SourceProvider = coalesce(x_SourceProvider, 'Microsoft'),\r\n x_SourceType = coalesce(x_SourceType, 'PriceSheet'),\r\n x_SourceVersion = coalesce(x_SourceVersion, '2023-05-01'),\r\n x_TotalUnitPriceDiscount,\r\n x_TotalUnitPriceDiscountPercent = 1.0 * x_TotalUnitPriceDiscount / ListUnitPrice * 100\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Prices_final_v1_0 table\r\n// FOCUS 1.0 version of the price sheet that covers everything defined in Prices_raw.\r\n.create-merge table Prices_final_v1_0 (\r\n BillingAccountId: string,\r\n BillingAccountName: string,\r\n BillingCurrency: string,\r\n ChargeCategory: string,\r\n CommitmentDiscountCategory: string,\r\n CommitmentDiscountType: string,\r\n ContractedUnitPrice: decimal,\r\n ListUnitPrice: decimal,\r\n PricingCategory: string,\r\n PricingUnit: string,\r\n SkuId: string,\r\n SkuPriceId: string,\r\n SkuPriceIdv2: string, // Hubs add-on\r\n x_BaseUnitPrice: decimal, // Azure\r\n x_BillingAccountAgreement: string, // Hubs add-on\r\n x_BillingAccountId: string, // Azure MCA\r\n x_BillingProfileId: string, // Azure MCA\r\n x_CommitmentDiscountSpendEligibility: string, // Hubs add-on\r\n x_CommitmentDiscountUsageEligibility: string, // Hubs add-on\r\n x_ContractedUnitPriceDiscount: decimal, // Hubs add-on\r\n x_ContractedUnitPriceDiscountPercent: decimal, // Hubs add-on\r\n x_EffectivePeriodEnd: datetime, // Azure\r\n x_EffectivePeriodStart: datetime, // Azure\r\n x_EffectiveUnitPrice: decimal, // Azure\r\n x_EffectiveUnitPriceDiscount: decimal, // Hubs add-on\r\n x_EffectiveUnitPriceDiscountPercent: decimal, // Hubs add-on\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_PricingBlockSize: decimal, // Hubs add-on\r\n x_PricingCurrency: string, // Azure\r\n x_PricingSubcategory: string, // Hubs add-on\r\n x_PricingUnitDescription: string, // Azure\r\n x_SkuDescription: string, // Azure\r\n x_SkuId: string, // Azure\r\n x_SkuIncludedQuantity: decimal, // Azure EA\r\n x_SkuMeterCategory: string, // Azure\r\n x_SkuMeterId: string, // Azure\r\n x_SkuMeterName: string, // Azure\r\n x_SkuMeterSubcategory: string, // Azure\r\n x_SkuMeterType: string, // Azure\r\n x_SkuPriceType: string, // Azure\r\n x_SkuProductId: string, // Azure\r\n x_SkuRegion: string, // Azure\r\n x_SkuServiceFamily: string, // Azure\r\n x_SkuOfferId: string, // Azure EA\r\n x_SkuPartNumber: string, // Azure EA\r\n x_SkuTerm: int, // Azure\r\n x_SkuTier: decimal, // Azure MCA\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_TotalUnitPriceDiscount: decimal, // Hubs add-on\r\n x_TotalUnitPriceDiscountPercent: decimal // Hubs add-on\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Prices_raw -> Prices_final_v1_0\r\n// NOTE: Must be after transform function is defined\r\n.alter table Prices_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Prices_raw\",\r\n \"Query\": \"Prices_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Cost and usage |=================================================================================================\r\n// Supported versions:\r\n// - MS: 1.0, 1.0-preview(v1) -- See https://aka.ms/costmgmt/exports/focus\r\n// - AWS: 1.0 -- See https://docs.aws.amazon.com/cur/latest/userguide/table-dictionary-focus-1-0-aws-columns.html\r\n// - GCP: Jan-Jun 2024 -- See https://cloud.google.com/resources/google-cloud-focus?e=48754805&hl=en\r\n// Links to (Aug 2024): https://services.google.com/fh/files/misc/focus_guide_v1.pdf\r\n// See also:\r\n// - https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/standard-usage\r\n// - https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/detailed-usage\r\n// - OCI: 1.0 -- See https://docs.oracle.com/iaas/Content/Billing/Concepts/costusagereportsoverview.htm#costreports__focus-cost-report-schema\r\n//\r\n// Support for non-Azure data is limited to ingestion only. Data is not transformed across versions.\r\n//======================================================================================================================\r\n\r\n// Costs_raw table\r\n.create-merge table Costs_raw (\r\n AvailabilityZone: string, // FOCUS 0.5+\r\n BilledCost: decimal, // FOCUS 0.5+\r\n BillingAccountId: string, // FOCUS 0.5+\r\n BillingAccountName: string, // FOCUS 0.5+\r\n BillingAccountType: string, // Azure 1.0-preview(v1)+\r\n BillingCurrency: string, // FOCUS 0.5+\r\n BillingPeriodEnd: datetime, // FOCUS 0.5+\r\n BillingPeriodStart: datetime, // FOCUS 0.5+\r\n ChargeCategory: string, // FOCUS 1.0-preview+\r\n ChargeClass: string, // FOCUS 1.0+\r\n ChargeDescription: string, // FOCUS 1.0+\r\n ChargeFrequency: string, // FOCUS 1.0+\r\n ChargePeriodEnd: datetime, // FOCUS 0.5+\r\n ChargePeriodStart: datetime, // FOCUS 0.5+\r\n ChargeSubcategory: string, // FOCUS 1.0-preview only\r\n CommitmentDiscountCategory: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountId: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountName: string, // FOCUS 1.0-preview+\r\n CommitmentDiscountStatus: string, // FOCUS 1.0+\r\n CommitmentDiscountType: string, // FOCUS 1.0-preview+\r\n ConsumedQuantity: decimal, // FOCUS 1.0+\r\n ConsumedUnit: string, // FOCUS 1.0+\r\n ContractedCost: decimal, // FOCUS 1.0+\r\n ContractedUnitPrice: decimal, // FOCUS 1.0+\r\n EffectiveCost: decimal, // FOCUS 1.0-preview+\r\n InvoiceIssuerName: string, // FOCUS 0.5+\r\n ListCost: decimal, // FOCUS 1.0-preview+\r\n ListUnitPrice: decimal, // FOCUS 1.0-preview+\r\n PricingCategory: string, // FOCUS 1.0-preview+\r\n PricingQuantity: decimal, // FOCUS 1.0-preview+\r\n PricingUnit: string, // FOCUS 1.0-preview+\r\n ProviderName: string, // FOCUS 0.5+\r\n PublisherName: string, // FOCUS 0.5+\r\n Region: string, // FOCUS 0.5-1.0-preview (deprecated)\r\n RegionId: string, // FOCUS 1.0+\r\n RegionName: string, // FOCUS 1.0+\r\n ResourceId: string, // FOCUS 0.5+\r\n ResourceName: string, // FOCUS 0.5+\r\n ResourceType: string, // FOCUS 1.0-preview+\r\n ServiceCategory: string, // FOCUS 0.5+\r\n ServiceName: string, // FOCUS 0.5+\r\n SkuId: string, // FOCUS 1.0-preview+\r\n SkuPriceId: string, // FOCUS 1.0-preview+\r\n SubAccountId: string, // FOCUS 0.5+\r\n SubAccountName: string, // FOCUS 0.5+\r\n SubAccountType: string, // Azure 1.0-preview(v1)+\r\n Tags: string, // FOCUS 1.0-preview+\r\n UsageAmount: decimal, // GCP Jan 2024 -- Removed Mar 2024 (UsageQuantity)\r\n UsageQuantity: decimal, // FOCUS 1.0-preview only\r\n UsageUnit: string, // FOCUS 1.0-preview only\r\n x_AccountId: string, // Azure 1.0-preview(v1)+\r\n x_AccountName: string, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId: string, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingAccountId: string, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName: string, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate: datetime, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId: string, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName: string, // Azure 1.0-preview(v1)+\r\n x_ChargeId: string, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd: decimal, // Azure 1.0+\r\n x_Cost: decimal, // GCP Jan 2024 -- Removed Jun 2024 (ContractedCost)\r\n x_CostAllocationRuleName: string, // Azure 1.0-preview(v1)+\r\n x_CostCategories: string, // AWS 1.0 (JSON)\r\n x_CostCenter: string, // Azure 1.0-preview(v1)+\r\n x_Credits: string, // GCP Jan 2024\r\n x_CostType: string, // GCP Jan 2024\r\n x_CurrencyConversionRate: decimal, // GCP Jun 2024\r\n x_CustomerId: string, // Azure 1.0-preview(v1)+\r\n x_CustomerName: string, // Azure 1.0-preview(v1)+\r\n x_Discount: string, // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_ExportTime: datetime, // GCP Jan 2024\r\n x_InvoiceId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName: string, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_Location: string, // GCP Jan 2024\r\n x_OnDemandCost: decimal, // Azure 1.0-preview(v1) only\r\n x_OnDemandCostInUsd: decimal, // Azure 1.0-preview(v1) only\r\n x_OnDemandUnitPrice: decimal, // Azure 1.0-preview(v1) only\r\n x_Operation: string, // AWS 1.0\r\n x_PartnerCreditApplied: string, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate: string, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize: decimal, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency: string, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription: string, // Azure 1.0-preview(v1)+\r\n x_Project: string, // GCP Jan 2024\r\n x_PublisherCategory: string, // Azure 1.0-preview(v1)+\r\n x_PublisherId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceType: string, // Azure 1.0-preview(v1)+\r\n x_ServiceCode: string, // AWS 1.0\r\n x_ServiceId: string, // GCP Jan 2024\r\n x_ServicePeriodEnd: datetime, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart: datetime, // Azure 1.0-preview(v1)+\r\n x_SkuDescription: string, // Azure 1.0-preview(v1)+\r\n x_SkuDetails: string, // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible: bool, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName: string, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber: string, // Azure 1.0-preview(v1)+\r\n x_SkuRegion: string, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily: string, // Azure 1.0-preview(v1)+\r\n x_SkuTerm: int, // Azure 1.0-preview(v1)+\r\n x_SkuTier: string, // Azure 1.0-preview(v1)+ \r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_UsageType: string // AWS 1.0\r\n)\r\n\r\n// Costs_raw ingestion mapping\r\n.create-or-alter table Costs_raw ingestion parquet mapping \"Costs_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"AvailabilityZone\", \"Properties\": { \"Field\": \"AvailabilityZone\" } },\r\n { \"Column\": \"BilledCost\", \"Properties\": { \"Field\": \"BilledCost\" } },\r\n { \"Column\": \"BillingAccountId\", \"Properties\": { \"Field\": \"BillingAccountId\" } },\r\n { \"Column\": \"BillingAccountName\", \"Properties\": { \"Field\": \"BillingAccountName\" } },\r\n { \"Column\": \"BillingAccountType\", \"Properties\": { \"Field\": \"BillingAccountType\" } },\r\n { \"Column\": \"BillingCurrency\", \"Properties\": { \"Field\": \"BillingCurrency\" } },\r\n { \"Column\": \"BillingPeriodEnd\", \"Properties\": { \"Field\": \"BillingPeriodEnd\" } },\r\n { \"Column\": \"BillingPeriodStart\", \"Properties\": { \"Field\": \"BillingPeriodStart\" } },\r\n { \"Column\": \"ChargeCategory\", \"Properties\": { \"Field\": \"ChargeCategory\" } },\r\n { \"Column\": \"ChargeClass\", \"Properties\": { \"Field\": \"ChargeClass\" } },\r\n { \"Column\": \"ChargeDescription\", \"Properties\": { \"Field\": \"ChargeDescription\" } },\r\n { \"Column\": \"ChargeFrequency\", \"Properties\": { \"Field\": \"ChargeFrequency\" } },\r\n { \"Column\": \"ChargePeriodEnd\", \"Properties\": { \"Field\": \"ChargePeriodEnd\" } },\r\n { \"Column\": \"ChargePeriodStart\", \"Properties\": { \"Field\": \"ChargePeriodStart\" } },\r\n { \"Column\": \"ChargeSubcategory\", \"Properties\": { \"Field\": \"ChargeSubcategory\" } },\r\n { \"Column\": \"CommitmentDiscountCategory\", \"Properties\": { \"Field\": \"CommitmentDiscountCategory\" } },\r\n { \"Column\": \"CommitmentDiscountId\", \"Properties\": { \"Field\": \"CommitmentDiscountId\" } },\r\n { \"Column\": \"CommitmentDiscountName\", \"Properties\": { \"Field\": \"CommitmentDiscountName\" } },\r\n { \"Column\": \"CommitmentDiscountStatus\", \"Properties\": { \"Field\": \"CommitmentDiscountStatus\" } },\r\n { \"Column\": \"CommitmentDiscountType\", \"Properties\": { \"Field\": \"CommitmentDiscountType\" } },\r\n { \"Column\": \"ConsumedQuantity\", \"Properties\": { \"Field\": \"ConsumedQuantity\" } },\r\n { \"Column\": \"ConsumedUnit\", \"Properties\": { \"Field\": \"ConsumedUnit\" } },\r\n { \"Column\": \"ContractedCost\", \"Properties\": { \"Field\": \"ContractedCost\" } },\r\n { \"Column\": \"ContractedUnitPrice\", \"Properties\": { \"Field\": \"ContractedUnitPrice\" } },\r\n { \"Column\": \"EffectiveCost\", \"Properties\": { \"Field\": \"EffectiveCost\" } },\r\n { \"Column\": \"InvoiceIssuerName\", \"Properties\": { \"Field\": \"InvoiceIssuerName\" } },\r\n { \"Column\": \"ListCost\", \"Properties\": { \"Field\": \"ListCost\" } },\r\n { \"Column\": \"ListUnitPrice\", \"Properties\": { \"Field\": \"ListUnitPrice\" } },\r\n { \"Column\": \"PricingCategory\", \"Properties\": { \"Field\": \"PricingCategory\" } },\r\n { \"Column\": \"PricingQuantity\", \"Properties\": { \"Field\": \"PricingQuantity\" } },\r\n { \"Column\": \"PricingUnit\", \"Properties\": { \"Field\": \"PricingUnit\" } },\r\n { \"Column\": \"ProviderName\", \"Properties\": { \"Field\": \"ProviderName\" } },\r\n { \"Column\": \"PublisherName\", \"Properties\": { \"Field\": \"PublisherName\" } },\r\n { \"Column\": \"Region\", \"Properties\": { \"Field\": \"Region\" } },\r\n { \"Column\": \"RegionId\", \"Properties\": { \"Field\": \"RegionId\" } },\r\n { \"Column\": \"RegionName\", \"Properties\": { \"Field\": \"RegionName\" } },\r\n { \"Column\": \"ResourceId\", \"Properties\": { \"Field\": \"ResourceId\" } },\r\n { \"Column\": \"ResourceName\", \"Properties\": { \"Field\": \"ResourceName\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\r\n { \"Column\": \"ServiceCategory\", \"Properties\": { \"Field\": \"ServiceCategory\" } },\r\n { \"Column\": \"ServiceName\", \"Properties\": { \"Field\": \"ServiceName\" } },\r\n { \"Column\": \"SkuId\", \"Properties\": { \"Field\": \"SkuId\" } },\r\n { \"Column\": \"SkuPriceId\", \"Properties\": { \"Field\": \"SkuPriceId\" } },\r\n { \"Column\": \"SubAccountId\", \"Properties\": { \"Field\": \"SubAccountId\" } },\r\n { \"Column\": \"SubAccountName\", \"Properties\": { \"Field\": \"SubAccountName\" } },\r\n { \"Column\": \"SubAccountType\", \"Properties\": { \"Field\": \"SubAccountType\" } },\r\n { \"Column\": \"Tags\", \"Properties\": { \"Field\": \"Tags\" } },\r\n { \"Column\": \"UsageAmount\", \"Properties\": { \"Field\": \"UsageAmount\" } },\r\n { \"Column\": \"UsageQuantity\", \"Properties\": { \"Field\": \"UsageQuantity\" } },\r\n { \"Column\": \"UsageUnit\", \"Properties\": { \"Field\": \"UsageUnit\" } },\r\n { \"Column\": \"x_AccountId\", \"Properties\": { \"Field\": \"x_AccountId\" } },\r\n { \"Column\": \"x_AccountName\", \"Properties\": { \"Field\": \"x_AccountName\" } },\r\n { \"Column\": \"x_AccountOwnerId\", \"Properties\": { \"Field\": \"x_AccountOwnerId\" } },\r\n { \"Column\": \"x_BilledCostInUsd\", \"Properties\": { \"Field\": \"x_BilledCostInUsd\" } },\r\n { \"Column\": \"x_BilledUnitPrice\", \"Properties\": { \"Field\": \"x_BilledUnitPrice\" } },\r\n { \"Column\": \"x_BillingAccountId\", \"Properties\": { \"Field\": \"x_BillingAccountId\" } },\r\n { \"Column\": \"x_BillingAccountName\", \"Properties\": { \"Field\": \"x_BillingAccountName\" } },\r\n { \"Column\": \"x_BillingExchangeRate\", \"Properties\": { \"Field\": \"x_BillingExchangeRate\" } },\r\n { \"Column\": \"x_BillingExchangeRateDate\", \"Properties\": { \"Field\": \"x_BillingExchangeRateDate\" } },\r\n { \"Column\": \"x_BillingProfileId\", \"Properties\": { \"Field\": \"x_BillingProfileId\" } },\r\n { \"Column\": \"x_BillingProfileName\", \"Properties\": { \"Field\": \"x_BillingProfileName\" } },\r\n { \"Column\": \"x_ChargeId\", \"Properties\": { \"Field\": \"x_ChargeId\" } },\r\n { \"Column\": \"x_ContractedCostInUsd\", \"Properties\": { \"Field\": \"x_ContractedCostInUsd\" } },\r\n { \"Column\": \"x_Cost\", \"Properties\": { \"Field\": \"x_Cost\" } },\r\n { \"Column\": \"x_CostAllocationRuleName\", \"Properties\": { \"Field\": \"x_CostAllocationRuleName\" } },\r\n { \"Column\": \"x_CostCategories\", \"Properties\": { \"Field\": \"x_CostCategories\" } },\r\n { \"Column\": \"x_CostCenter\", \"Properties\": { \"Field\": \"x_CostCenter\" } },\r\n { \"Column\": \"x_Credits\", \"Properties\": { \"Field\": \"x_Credits\" } },\r\n { \"Column\": \"x_CostType\", \"Properties\": { \"Field\": \"x_CostType\" } },\r\n { \"Column\": \"x_CurrencyConversionRate\", \"Properties\": { \"Field\": \"x_CurrencyConversionRate\" } },\r\n { \"Column\": \"x_CustomerId\", \"Properties\": { \"Field\": \"x_CustomerId\" } },\r\n { \"Column\": \"x_CustomerName\", \"Properties\": { \"Field\": \"x_CustomerName\" } },\r\n { \"Column\": \"x_Discount\", \"Properties\": { \"Field\": \"x_Discount\" } },\r\n { \"Column\": \"x_EffectiveCostInUsd\", \"Properties\": { \"Field\": \"x_EffectiveCostInUsd\" } },\r\n { \"Column\": \"x_EffectiveUnitPrice\", \"Properties\": { \"Field\": \"x_EffectiveUnitPrice\" } },\r\n { \"Column\": \"x_ExportTime\", \"Properties\": { \"Field\": \"x_ExportTime\" } },\r\n { \"Column\": \"x_InvoiceId\", \"Properties\": { \"Field\": \"x_InvoiceId\" } },\r\n { \"Column\": \"x_InvoiceIssuerId\", \"Properties\": { \"Field\": \"x_InvoiceIssuerId\" } },\r\n { \"Column\": \"x_InvoiceSectionId\", \"Properties\": { \"Field\": \"x_InvoiceSectionId\" } },\r\n { \"Column\": \"x_InvoiceSectionName\", \"Properties\": { \"Field\": \"x_InvoiceSectionName\" } },\r\n { \"Column\": \"x_ListCostInUsd\", \"Properties\": { \"Field\": \"x_ListCostInUsd\" } },\r\n { \"Column\": \"x_Location\", \"Properties\": { \"Field\": \"x_Location\" } },\r\n { \"Column\": \"x_OnDemandCost\", \"Properties\": { \"Field\": \"x_OnDemandCost\" } },\r\n { \"Column\": \"x_OnDemandCostInUsd\", \"Properties\": { \"Field\": \"x_OnDemandCostInUsd\" } },\r\n { \"Column\": \"x_OnDemandUnitPrice\", \"Properties\": { \"Field\": \"x_OnDemandUnitPrice\" } },\r\n { \"Column\": \"x_Operation\", \"Properties\": { \"Field\": \"x_Operation\" } },\r\n { \"Column\": \"x_PartnerCreditApplied\", \"Properties\": { \"Field\": \"x_PartnerCreditApplied\" } },\r\n { \"Column\": \"x_PartnerCreditRate\", \"Properties\": { \"Field\": \"x_PartnerCreditRate\" } },\r\n { \"Column\": \"x_PricingBlockSize\", \"Properties\": { \"Field\": \"x_PricingBlockSize\" } },\r\n { \"Column\": \"x_PricingCurrency\", \"Properties\": { \"Field\": \"x_PricingCurrency\" } },\r\n { \"Column\": \"x_PricingSubcategory\", \"Properties\": { \"Field\": \"x_PricingSubcategory\" } },\r\n { \"Column\": \"x_PricingUnitDescription\", \"Properties\": { \"Field\": \"x_PricingUnitDescription\" } },\r\n { \"Column\": \"x_Project\", \"Properties\": { \"Field\": \"x_Project\" } },\r\n { \"Column\": \"x_PublisherCategory\", \"Properties\": { \"Field\": \"x_PublisherCategory\" } },\r\n { \"Column\": \"x_PublisherId\", \"Properties\": { \"Field\": \"x_PublisherId\" } },\r\n { \"Column\": \"x_ResellerId\", \"Properties\": { \"Field\": \"x_ResellerId\" } },\r\n { \"Column\": \"x_ResellerName\", \"Properties\": { \"Field\": \"x_ResellerName\" } },\r\n { \"Column\": \"x_ResourceGroupName\", \"Properties\": { \"Field\": \"x_ResourceGroupName\" } },\r\n { \"Column\": \"x_ResourceType\", \"Properties\": { \"Field\": \"x_ResourceType\" } },\r\n { \"Column\": \"x_ServiceCode\", \"Properties\": { \"Field\": \"x_ServiceCode\" } },\r\n { \"Column\": \"x_ServiceId\", \"Properties\": { \"Field\": \"x_ServiceId\" } },\r\n { \"Column\": \"x_ServicePeriodEnd\", \"Properties\": { \"Field\": \"x_ServicePeriodEnd\" } },\r\n { \"Column\": \"x_ServicePeriodStart\", \"Properties\": { \"Field\": \"x_ServicePeriodStart\" } },\r\n { \"Column\": \"x_SkuDescription\", \"Properties\": { \"Field\": \"x_SkuDescription\" } },\r\n { \"Column\": \"x_SkuDetails\", \"Properties\": { \"Field\": \"x_SkuDetails\" } },\r\n { \"Column\": \"x_SkuIsCreditEligible\", \"Properties\": { \"Field\": \"x_SkuIsCreditEligible\" } },\r\n { \"Column\": \"x_SkuMeterCategory\", \"Properties\": { \"Field\": \"x_SkuMeterCategory\" } },\r\n { \"Column\": \"x_SkuMeterId\", \"Properties\": { \"Field\": \"x_SkuMeterId\" } },\r\n { \"Column\": \"x_SkuMeterName\", \"Properties\": { \"Field\": \"x_SkuMeterName\" } },\r\n { \"Column\": \"x_SkuMeterSubcategory\", \"Properties\": { \"Field\": \"x_SkuMeterSubcategory\" } },\r\n { \"Column\": \"x_SkuOfferId\", \"Properties\": { \"Field\": \"x_SkuOfferId\" } },\r\n { \"Column\": \"x_SkuOrderId\", \"Properties\": { \"Field\": \"x_SkuOrderId\" } },\r\n { \"Column\": \"x_SkuOrderName\", \"Properties\": { \"Field\": \"x_SkuOrderName\" } },\r\n { \"Column\": \"x_SkuPartNumber\", \"Properties\": { \"Field\": \"x_SkuPartNumber\" } },\r\n { \"Column\": \"x_SkuRegion\", \"Properties\": { \"Field\": \"x_SkuRegion\" } },\r\n { \"Column\": \"x_SkuServiceFamily\", \"Properties\": { \"Field\": \"x_SkuServiceFamily\" } },\r\n { \"Column\": \"x_SkuTerm\", \"Properties\": { \"Field\": \"x_SkuTerm\" } },\r\n { \"Column\": \"x_SkuTier\", \"Properties\": { \"Field\": \"x_SkuTier\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } },\r\n { \"Column\": \"x_UsageType\", \"Properties\": { \"Field\": \"x_UsageType\" } }\r\n]\r\n```\r\n\r\n// Costs_raw retention policy\r\n.alter-merge table Costs_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Costs_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All costs transformed to FOCUS 1.0.', folder='Costs')\r\nCosts_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n Costs_raw\r\n //\r\n // Dedupe rows\r\n | extend x_IngestionTime = ingestion_time()\r\n | extend x_ChargeId = ''\r\n // TODO: Consider adding a unique charge ID per row\r\n // hash_sha256(strcat(\r\n // // DO NOT CHANGE COLUMNS OR COLUMN ORDER\r\n // // 1. Resource hierarchy (including resource name), highest to lowest\r\n // BillingAccountId,\r\n // x_InvoiceSectionId,\r\n // x_AccountOwnerId,\r\n // SubAccountId,\r\n // x_ResourceGroupName,\r\n // ResourceName,\r\n // // 2. Resource details\r\n // ResourceId,\r\n // RegionId,\r\n // Tags,\r\n // CommitmentDiscountId,\r\n // x_CostCenter,\r\n // // 4. Meter details\r\n // SkuPriceId,\r\n // x_SkuMeterId,\r\n // x_SkuPartNumber,\r\n // x_SkuOfferId,\r\n // x_SkuDetails,\r\n // // 5. Date\r\n // ChargePeriodStart\r\n // ))\r\n //\r\n // Identify data quality issues\r\n | extend x_SourceChanges = trim_end(',', strcat(\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and ChargeFrequency == 'Usage-Based', 'InvalidChargeFrequency,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and EffectiveCost > 0, 'InvalidEffectiveCost,', ''),\r\n iff((isempty(ContractedCost) or ContractedCost == 0) and EffectiveCost != 0, 'MissingContractedCost,', ''),\r\n iff((isempty(ContractedUnitPrice) or ContractedUnitPrice == 0) and x_EffectiveUnitPrice != 0, 'MissingContractedUnitPrice,', ''),\r\n iff((isempty(ListCost) or ListCost == 0) and (ContractedCost != 0 or EffectiveCost != 0), 'MissingListCost,', ''),\r\n iff((isempty(ListUnitPrice) or ListUnitPrice == 0) and (ContractedUnitPrice != 0 or x_EffectiveUnitPrice != 0), 'MissingListUnitPrice,', ''),\r\n iff(isempty(ProviderName), 'MissingProviderName,', ''),\r\n iff(isempty(PublisherName), 'MissingPublisherName,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceId), 'MissingResourceId,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceName), 'MissingResourceName,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(ResourceType), 'MissingResourceType,', ''),\r\n iff(BilledCost > 0 and x_BilledUnitPrice == 0, 'MissingXBilledUnitPrice,', ''),\r\n iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and isempty(x_ResourceType), 'MissingXResourceType,', ''),\r\n iff(PricingCategory == 'Standard' and isnotempty(CommitmentDiscountId) and ChargeCategory == 'Usage', 'PricingCategoryShouldBeCommitted,', ''),\r\n iff(x_SkuTerm == '1Year' or x_SkuTerm == '3Years' or x_SkuTerm == '5Years', 'SkuTermShouldBeAnInteger,', '')\r\n ))\r\n //\r\n // Fix columns needed in other changes\r\n | extend ProviderName = case(\r\n isnotempty(ProviderName), ProviderName,\r\n isnotempty(coalesce(x_CostCategories, x_Discount, x_Operation, x_ServiceCode, x_UsageType)), 'AWS',\r\n isnotempty(coalesce(tostring(UsageAmount), tostring(x_Cost), x_Credits, x_CostType, tostring(x_CurrencyConversionRate), tostring(x_ExportTime), x_Project, x_ServiceId)), 'GCP',\r\n isnotempty(coalesce(x_BillingProfileId, x_InvoiceSectionId)), 'Microsoft',\r\n ''\r\n )\r\n //\r\n // Identify source\r\n | extend x_SourceName = coalesce(x_SourceName, iff(isnotempty(x_BillingProfileId), 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(isnotempty(x_BillingProfileId), 'FocusCost', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, case(\r\n isnotempty(coalesce(ChargeClass, CommitmentDiscountStatus, tostring(ConsumedQuantity), ConsumedUnit, tostring(ContractedCost), tostring(ContractedUnitPrice), RegionId, RegionName)), '1.0',\r\n isnotempty(coalesce(ChargeSubcategory, Region, tostring(UsageQuantity), UsageUnit)), iff(ProviderName == 'Microsoft', '1.0-preview(v1)', '1.0-preview'),\r\n ''\r\n ))\r\n // Append version check error code\r\n | extend x_SourceChanges = iff(x_SourceVersion == '1.0', x_SourceChanges,\r\n strcat(x_SourceChanges, iff(isempty(x_SourceChanges), '', ','), iff(x_SourceVersion == '', 'UnknownFocusVersion', 'LegacyFocusVersion'))\r\n )\r\n //\r\n // Populate missing prices -- mapping to on-demand prices requires meter ID and offer ID\r\n | extend tmp_MissingPrices = ProviderName == 'Microsoft'\r\n and (ListUnitPrice == 0 or ContractedUnitPrice == 0)\r\n and x_EffectiveUnitPrice != 0\r\n and not(CommitmentDiscountCategory == 'Spend' and CommitmentDiscountStatus == 'Unused')\r\n and isnotempty(strcat(x_SkuMeterId, x_SkuOfferId))\r\n | as allCosts\r\n | where tmp_MissingPrices\r\n | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(ChargePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)\r\n | as costsWithMissingPrices\r\n | join kind=leftouter (\r\n Prices_final_v1_0\r\n | extend tmp_ReservationPriceLookupKey = strcat(x_BillingProfileId, substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId, x_SkuOfferId)\r\n | where x_SkuPriceType == 'Consumption' and tmp_ReservationPriceLookupKey in ((costsWithMissingPrices | summarize by tmp_ReservationPriceLookupKey))\r\n | summarize ListUnitPrice = min(ListUnitPrice), ContractedUnitPrice = min(ContractedUnitPrice) by tmp_ReservationPriceLookupKey, x_PricingBlockSize, PricingUnit\r\n ) on tmp_ReservationPriceLookupKey\r\n // Select the best price to use for each row\r\n | extend ContractedUnitPrice = case(\r\n // If price is already correct, keep that\r\n ContractedUnitPrice != 0 or x_EffectiveUnitPrice == 0, ContractedUnitPrice,\r\n // If both prices use the same scale, use the new one\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize == x_PricingBlockSize1, ContractedUnitPrice1 * x_BillingExchangeRate,\r\n // If prices are the same unit but not the same scale, use the new one but correct the scale\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize != x_PricingBlockSize1 and isnotempty(x_PricingBlockSize) and isnotempty(x_PricingBlockSize1), ContractedUnitPrice1 * x_BillingExchangeRate / x_PricingBlockSize1 * x_PricingBlockSize,\r\n // If billed price is available, assume the billed price is the same as contracted price to support aggregations\r\n isnotempty(x_BilledUnitPrice) and x_BilledUnitPrice != 0, x_EffectiveUnitPrice,\r\n // Otherwise, assume the effective price is the same as contracted price to support aggregations\r\n x_EffectiveUnitPrice\r\n )\r\n | extend ListUnitPrice = case(\r\n // If price is already correct, keep that\r\n ListUnitPrice != 0 or x_EffectiveUnitPrice == 0, ListUnitPrice,\r\n // If both prices use the same scale, use the new one\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize == x_PricingBlockSize1, ListUnitPrice1 * x_BillingExchangeRate,\r\n // If prices are the same unit but not the same scale, use the new one but correct the scale\r\n PricingUnit == PricingUnit1 and x_PricingBlockSize != x_PricingBlockSize1 and isnotempty(x_PricingBlockSize) and isnotempty(x_PricingBlockSize1), ListUnitPrice1 * x_BillingExchangeRate / x_PricingBlockSize1 * x_PricingBlockSize,\r\n // Otherwise, assume the contracted price is the same as list price to support aggregations\r\n ContractedUnitPrice\r\n )\r\n // Calculate missing costs based on new prices -- If cost is already correct, keep that; if not and price is available, recalculate the cost; otherwise, keep the existing cost\r\n | extend ListCost = case(ListCost != 0 or EffectiveCost == 0, ListCost, ListUnitPrice != 0, ListUnitPrice * PricingQuantity, ListCost)\r\n | extend ContractedCost = case(ContractedCost != 0 or EffectiveCost == 0, ContractedCost, ContractedUnitPrice != 0, ContractedUnitPrice * PricingQuantity, ContractedCost)\r\n // Merge the rest of the unmodified cost records and remove excess columns\r\n | union (allCosts | where not(tmp_MissingPrices))\r\n | project-away x_PricingBlockSize1, PricingUnit1, ListUnitPrice1, ContractedUnitPrice1, tmp_MissingPrices, tmp_ReservationPriceLookupKey, tmp_ReservationPriceLookupKey1\r\n //\r\n // BUG: Fix ContractedCost that has bad values\r\n | extend ContractedCost = iff(ProviderName == 'Microsoft' and isnotempty(PricingQuantity) and isnotempty(x_PricingBlockSize) and ContractedCost != ContractedUnitPrice * PricingQuantity, ContractedUnitPrice * PricingQuantity, ContractedCost)\r\n //\r\n // Handle FOCUS 1.0-preview UsageQuantity/Unit\r\n | extend ConsumedQuantity = iff(ChargeCategory == 'Usage', coalesce(ConsumedQuantity, UsageQuantity, UsageAmount), todecimal(''))\r\n | extend ConsumedUnit = iff(ChargeCategory == 'Usage' and isnotempty(ConsumedQuantity), coalesce(ConsumedUnit, UsageUnit, 'Units'), '')\r\n //\r\n // Convert IDs to lowercase for consistency\r\n | extend CommitmentDiscountId = tolower(CommitmentDiscountId)\r\n //\r\n // BUG: Remove EffectiveCost for commitment discount purchases\r\n | extend EffectiveCost = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), decimal(0), EffectiveCost)\r\n | extend x_EffectiveCostInUsd = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), decimal(0), x_EffectiveCostInUsd)\r\n //\r\n // Clean up resource columns\r\n | extend ResourceId = case(\r\n isnotempty(ResourceId), ResourceId,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId), CommitmentDiscountId,\r\n ResourceId)\r\n | extend ResourceName = tolower(case(\r\n isnotempty(ResourceName), ResourceName,\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountName), CommitmentDiscountName,\r\n isnotempty(ResourceId), parse_resourceid(ResourceId).ResourceName,\r\n ResourceName))\r\n | extend x_ResourceType = case(\r\n isnotempty(x_ResourceType), x_ResourceType,\r\n isnotempty(ResourceId), parse_resourceid(ResourceId).x_ResourceType,\r\n x_ResourceType)\r\n | extend ResourceType = case(\r\n // Use existing resource type display name unless it's an internal resource type ID\r\n isnotempty(ResourceType) and tolower(ResourceType) != tolower(x_ResourceType) and ResourceType !contains '/', ResourceType,\r\n // Use CommitmentDisocuntType for commitment discount purchases\r\n ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountType), CommitmentDiscountType,\r\n // Look up display name from internal type\r\n isnotempty(x_ResourceType), coalesce(resource_type(x_ResourceType).SingularDisplayName, ResourceType, x_ResourceType),\r\n ResourceType)\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n AvailabilityZone,\r\n BilledCost,\r\n BillingAccountId,\r\n BillingAccountName,\r\n BillingAccountType,\r\n BillingCurrency,\r\n BillingPeriodEnd,\r\n BillingPeriodStart,\r\n ChargeCategory = case(\r\n // Handle FOCUS 1.0-preview ChargeSubcategory\r\n ChargeSubcategory == 'Credit', 'Credit',\r\n ChargeSubcategory == 'Refund', 'Purchase', // We are assuming purchase refunds since we don't have data to indicate usage refunds\r\n ChargeCategory\r\n ),\r\n ChargeClass = case(ChargeSubcategory == 'Refund', 'Correction', ChargeClass),\r\n ChargeDescription,\r\n // BUG: ChargeFrequency shows \"Usage-Based\" for monthly recurring savings plan purchases\r\n ChargeFrequency = iff(ChargeCategory == 'Purchase' and isnotempty(CommitmentDiscountId) and ChargeFrequency == 'Usage-Based' and ProviderName == 'Microsoft' and x_SourceVersion startswith '1.0', 'Recurring', ChargeFrequency),\r\n ChargePeriodEnd,\r\n ChargePeriodStart,\r\n CommitmentDiscountCategory,\r\n CommitmentDiscountId,\r\n CommitmentDiscountName,\r\n CommitmentDiscountStatus = case(\r\n // Handle FOCUS 1.0-preview ChargeSubcategory\r\n ChargeSubcategory == 'Used Commitment', 'Used',\r\n ChargeSubcategory == 'Unused Commitment', 'Unused',\r\n CommitmentDiscountStatus\r\n ),\r\n CommitmentDiscountType,\r\n ConsumedQuantity,\r\n ConsumedUnit,\r\n ContractedCost = coalesce(ContractedCost, x_OnDemandCost, x_Cost),\r\n ContractedUnitPrice = coalesce(ContractedUnitPrice, x_OnDemandUnitPrice),\r\n EffectiveCost,\r\n InvoiceIssuerName,\r\n ListCost,\r\n ListUnitPrice,\r\n PricingCategory = case(\r\n // Handle FOCUS 1.0-preview PricingCategory values\r\n PricingCategory == 'On-Demand', 'Standard',\r\n PricingCategory == 'Commitment-Based', 'Committed',\r\n PricingCategory\r\n ),\r\n PricingQuantity,\r\n PricingUnit,\r\n ProviderName,\r\n // Handle missing PublisherName values\r\n PublisherName = case(PublisherName == 'Microsoft Corporation', 'Microsoft', isnotempty(PublisherName), PublisherName, x_PublisherCategory == 'Cloud Provider', ProviderName, ''),\r\n // Handle FOCUS 1.0-preview Region column\r\n RegionId = coalesce(RegionId, iff(ProviderName == 'Microsoft', replace_string(tolower(Region), ' ', ''), Region)),\r\n RegionName = coalesce(RegionName, Region),\r\n ResourceId,\r\n ResourceName,\r\n ResourceType,\r\n ServiceCategory,\r\n ServiceName,\r\n SkuId,\r\n SkuPriceId,\r\n SubAccountId,\r\n SubAccountName,\r\n SubAccountType, // Azure 1.0-preview(v1)+\r\n Tags = parse_json(Tags),\r\n x_AccountId, // Azure 1.0-preview(v1)+\r\n x_AccountName, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice, // Azure 1.0-preview(v1)+\r\n x_BillingAccountAgreement = case(\r\n ProviderName == 'Microsoft' and x_BillingAccountId == x_BillingProfileId, 'EA',\r\n ProviderName == 'Microsoft' and x_BillingAccountId != x_BillingProfileId, 'MCA',\r\n ProviderName\r\n ), // Hubs add-on\r\n x_BillingAccountId, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName, // Azure 1.0-preview(v1)+\r\n x_ChargeId, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd = coalesce(x_ContractedCostInUsd, x_OnDemandCostInUsd), // Azure 1.0+\r\n x_CostAllocationRuleName, // Azure 1.0-preview(v1)+\r\n x_CostCategories = parse_json(x_CostCategories), // AWS 1.0 (JSON)\r\n x_CostCenter, // Azure 1.0-preview(v1)+\r\n x_Credits = parse_json(x_Credits), // GCP Jan 2024\r\n x_CostType, // GCP Jan 2024\r\n x_CurrencyConversionRate, // GCP Jun 2024\r\n x_CustomerId, // Azure 1.0-preview(v1)+\r\n x_CustomerName, // Azure 1.0-preview(v1)+\r\n x_Discount = parse_json(x_Discount), // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice, // Azure 1.0-preview(v1)+\r\n x_ExportTime, // GCP Jan 2024\r\n x_IngestionTime, // Hubs add-on\r\n x_InvoiceId, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd, // Azure 1.0-preview(v1)+\r\n x_Location, // GCP Jan 2024\r\n x_Operation, // AWS 1.0\r\n x_PartnerCreditApplied, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription, // Azure 1.0-preview(v1)+\r\n x_Project, // GCP Jan 2024\r\n x_PublisherCategory, // Azure 1.0-preview(v1)+\r\n x_PublisherId, // Azure 1.0-preview(v1)+\r\n x_ResellerId, // Azure 1.0-preview(v1)+\r\n x_ResellerName, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName = tolower(x_ResourceGroupName), // Azure 1.0-preview(v1)+\r\n x_ResourceType, // Azure 1.0-preview(v1)+\r\n x_ServiceCode, // AWS 1.0\r\n x_ServiceId, // GCP Jan 2024\r\n x_ServicePeriodEnd, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart, // Azure 1.0-preview(v1)+\r\n x_SkuDescription, // Azure 1.0-preview(v1)+\r\n x_SkuDetails = parse_json(x_SkuDetails), // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber, // Azure 1.0-preview(v1)+\r\n x_SkuRegion, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily, // Azure 1.0-preview(v1)+\r\n x_SkuTerm, // Azure 1.0-preview(v1)+\r\n x_SkuTier, // Azure 1.0-preview(v1)+ \r\n x_SourceChanges, // Hubs add-on\r\n x_SourceName, // Hubs add-on\r\n x_SourceProvider, // Hubs add-on\r\n x_SourceType, // Hubs add-on\r\n x_SourceVersion, // Hubs add-on\r\n x_UsageType // AWS 1.0\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Costs_final_v1_0 table\r\n.create-merge table Costs_final_v1_0 (\r\n AvailabilityZone: string,\r\n BilledCost: decimal,\r\n BillingAccountId: string,\r\n BillingAccountName: string,\r\n BillingAccountType: string, // Azure 1.0-preview(v1)+\r\n BillingCurrency: string,\r\n BillingPeriodEnd: datetime,\r\n BillingPeriodStart: datetime,\r\n ChargeCategory: string,\r\n ChargeClass: string,\r\n ChargeDescription: string,\r\n ChargeFrequency: string,\r\n ChargePeriodEnd: datetime,\r\n ChargePeriodStart: datetime,\r\n CommitmentDiscountCategory: string, // FOCUS 1.0-preview only\r\n CommitmentDiscountId: string,\r\n CommitmentDiscountName: string,\r\n CommitmentDiscountStatus: string,\r\n CommitmentDiscountType: string,\r\n ConsumedQuantity: decimal,\r\n ConsumedUnit: string,\r\n ContractedCost: decimal,\r\n ContractedUnitPrice: decimal,\r\n EffectiveCost: decimal,\r\n InvoiceIssuerName: string,\r\n ListCost: decimal,\r\n ListUnitPrice: decimal,\r\n PricingCategory: string,\r\n PricingQuantity: decimal,\r\n PricingUnit: string,\r\n ProviderName: string,\r\n PublisherName: string,\r\n RegionId: string,\r\n RegionName: string,\r\n ResourceId: string,\r\n ResourceName: string,\r\n ResourceType: string,\r\n ServiceCategory: string,\r\n ServiceName: string,\r\n SkuId: string,\r\n SkuPriceId: string,\r\n SubAccountId: string,\r\n SubAccountName: string,\r\n SubAccountType: string,\r\n Tags: dynamic,\r\n x_AccountId: string, // Azure 1.0-preview(v1)+\r\n x_AccountName: string, // Azure 1.0-preview(v1)+\r\n x_AccountOwnerId: string, // Azure 1.0-preview(v1)+\r\n x_BilledCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_BilledUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingAccountAgreement: string, // Hubs add-on\r\n x_BillingAccountId: string, // Azure 1.0-preview(v1)+\r\n x_BillingAccountName: string, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRate: decimal, // Azure 1.0-preview(v1)+\r\n x_BillingExchangeRateDate: datetime, // Azure 1.0-preview(v1)+\r\n x_BillingProfileId: string, // Azure 1.0-preview(v1)+\r\n x_BillingProfileName: string, // Azure 1.0-preview(v1)+\r\n x_ChargeId: string, // Azure 1.0-preview(v1) only\r\n x_ContractedCostInUsd: decimal, // Azure 1.0+\r\n x_CostAllocationRuleName: string, // Azure 1.0-preview(v1)+\r\n x_CostCategories: dynamic, // AWS 1.0 (JSON)\r\n x_CostCenter: string, // Azure 1.0-preview(v1)+\r\n x_Credits: dynamic, // GCP Jan 2024\r\n x_CostType: string, // GCP Jan 2024\r\n x_CurrencyConversionRate: decimal, // GCP Jun 2024\r\n x_CustomerId: string, // Azure 1.0-preview(v1)+\r\n x_CustomerName: string, // Azure 1.0-preview(v1)+\r\n x_Discount: dynamic, // AWS 1.0 (JSON)\r\n x_EffectiveCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_EffectiveUnitPrice: decimal, // Azure 1.0-preview(v1)+\r\n x_ExportTime: datetime, // GCP Jan 2024\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_InvoiceId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceIssuerId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionId: string, // Azure 1.0-preview(v1)+\r\n x_InvoiceSectionName: string, // Azure 1.0-preview(v1)+\r\n x_ListCostInUsd: decimal, // Azure 1.0-preview(v1)+\r\n x_Location: string, // GCP Jan 2024\r\n x_Operation: string, // AWS 1.0\r\n x_PartnerCreditApplied: string, // Azure 1.0-preview(v1)+\r\n x_PartnerCreditRate: string, // Azure 1.0-preview(v1)+\r\n x_PricingBlockSize: decimal, // Azure 1.0-preview(v1)+\r\n x_PricingCurrency: string, // Azure 1.0-preview(v1)+\r\n x_PricingSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_PricingUnitDescription: string, // Azure 1.0-preview(v1)+\r\n x_Project: string, // GCP Jan 2024\r\n x_PublisherCategory: string, // Azure 1.0-preview(v1)+\r\n x_PublisherId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerId: string, // Azure 1.0-preview(v1)+\r\n x_ResellerName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceGroupName: string, // Azure 1.0-preview(v1)+\r\n x_ResourceType: string, // Azure 1.0-preview(v1)+\r\n x_ServiceCode: string, // AWS 1.0\r\n x_ServiceId: string, // GCP Jan 2024\r\n x_ServicePeriodEnd: datetime, // Azure 1.0-preview(v1)+\r\n x_ServicePeriodStart: datetime, // Azure 1.0-preview(v1)+\r\n x_SkuDescription: string, // Azure 1.0-preview(v1)+\r\n x_SkuDetails: dynamic, // Azure 1.0-preview(v1)+\r\n x_SkuIsCreditEligible: bool, // Azure 1.0-preview(v1)+ \r\n x_SkuMeterCategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterId: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterName: string, // Azure 1.0-preview(v1)+\r\n x_SkuMeterSubcategory: string, // Azure 1.0-preview(v1)+\r\n x_SkuOfferId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderId: string, // Azure 1.0-preview(v1)+\r\n x_SkuOrderName: string, // Azure 1.0-preview(v1)+\r\n x_SkuPartNumber: string, // Azure 1.0-preview(v1)+\r\n x_SkuRegion: string, // Azure 1.0-preview(v1)+\r\n x_SkuServiceFamily: string, // Azure 1.0-preview(v1)+\r\n x_SkuTerm: int, // Azure 1.0-preview(v1)+\r\n x_SkuTier: string, // Azure 1.0-preview(v1)+ \r\n x_SourceChanges: string, // Hubs add-on\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_UsageType: string // AWS 1.0\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Costs_raw -> Costs_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Costs_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Costs_raw\",\r\n \"Query\": \"Costs_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| CommitmentDiscountUsage |========================================================================================\r\n// Supported versions:\r\n// - MS EA reservation details: 2023-03-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/reservation-details-ea\r\n// - MS MCA reservation details: 2023-03-01 -- See https://learn.microsoft.com/azure/cost-management-billing/dataset-schema/reservation-details-mca\r\n//======================================================================================================================\r\n\r\n// CommitmentDiscountUsage_raw table\r\n.create-merge table CommitmentDiscountUsage_raw (\r\n InstanceFlexibilityGroup: string,\r\n InstanceFlexibilityRatio: decimal,\r\n InstanceId: string,\r\n Kind: string,\r\n ReservationId: string,\r\n ReservationOrderId: string,\r\n ReservedHours: decimal,\r\n SkuName: string,\r\n TotalReservedQuantity: decimal,\r\n UsageDate: datetime,\r\n UsedHours: decimal,\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// CommitmentDiscountUsage_raw ingestion mapping\r\n.create-or-alter table CommitmentDiscountUsage_raw ingestion parquet mapping \"CommitmentDiscountUsage_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"InstanceId\", \"Properties\": { \"Field\": \"InstanceId\" } },\r\n { \"Column\": \"Kind\", \"Properties\": { \"Field\": \"Kind\" } },\r\n { \"Column\": \"ReservationId\", \"Properties\": { \"Field\": \"ReservationId\" } },\r\n { \"Column\": \"ReservationOrderId\", \"Properties\": { \"Field\": \"ReservationOrderId\" } },\r\n { \"Column\": \"ReservedHours\", \"Properties\": { \"Field\": \"ReservedHours\" } },\r\n { \"Column\": \"SkuName\", \"Properties\": { \"Field\": \"SkuName\" } },\r\n { \"Column\": \"TotalReservedQuantity\", \"Properties\": { \"Field\": \"TotalReservedQuantity\" } },\r\n { \"Column\": \"UsageDate\", \"Properties\": { \"Field\": \"UsageDate\" } },\r\n { \"Column\": \"UsedHours\", \"Properties\": { \"Field\": \"UsedHours\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// CommitmentDiscountUsage_raw retention policy\r\n.alter-merge table CommitmentDiscountUsage_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// CommitmentDiscountUsage_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All commitment discount usage transformed to FOCUS 1.0. This includes reservationdeatils_raw.', folder='Commitment discounts')\r\nCommitmentDiscountUsage_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n CommitmentDiscountUsage_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Handle resource columns\r\n | extend ResourceId = tolower(InstanceId)\r\n | extend tmp_ResourceDetails = parse_resourceid(ResourceId)\r\n | extend ResourceName = tostring(tmp_ResourceDetails.ResourceName)\r\n | extend SubAccountId = tostring(tmp_ResourceDetails.SubAccountId)\r\n | extend x_ResourceGroupName = tostring(tmp_ResourceDetails.x_ResourceGroupName)\r\n | extend x_ResourceType = tostring(tmp_ResourceDetails.x_ResourceType)\r\n | lookup kind=leftouter (ResourceTypes | distinct x_ResourceType, ResourceType = SingularDisplayName) on x_ResourceType\r\n | lookup kind=leftouter (Services | distinct x_ResourceType, ServiceName, ServiceCategory, x_ServiceModel) on x_ResourceType\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n ChargePeriodEnd = UsageDate + 1d,\r\n ChargePeriodStart = UsageDate,\r\n CommitmentDiscountCategory = 'Usage',\r\n CommitmentDiscountId = tolower(strcat('/providers/microsoft.capacity/reservationorders/', ReservationOrderId, '/reservations/', ReservationId)),\r\n CommitmentDiscountType = 'Reservation',\r\n ConsumedQuantity = UsedHours,\r\n ProviderName,\r\n ResourceId,\r\n ResourceName,\r\n ResourceType,\r\n ServiceCategory,\r\n ServiceName,\r\n SubAccountId,\r\n x_CommitmentDiscountCommittedCount = TotalReservedQuantity,\r\n x_CommitmentDiscountCommittedAmount = ReservedHours,\r\n // TODO: Is this needed? -- x_CommitmentDiscountKind = Kind,\r\n x_CommitmentDiscountNormalizedGroup = iff(InstanceFlexibilityGroup == 'NA', '', InstanceFlexibilityGroup),\r\n x_CommitmentDiscountNormalizedRatio = InstanceFlexibilityRatio,\r\n x_CommitmentDiscountQuantity = UsedHours * InstanceFlexibilityRatio,\r\n x_IngestionTime = ingestion_time(),\r\n x_ResourceGroupName,\r\n x_ResourceType,\r\n // x_RowId = hash_sha256(strcat(\r\n // // DO NOT CHANGE COLUMNS OR COLUMN ORDER\r\n // CommitmentDiscountId,\r\n // ResourceId,\r\n // ChargePeriodStart\r\n // )),\r\n x_ServiceModel,\r\n x_SkuOrderId = ReservationOrderId,\r\n x_SkuSize = iff(SkuName == 'NA', '', SkuName),\r\n x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName)),\r\n x_SourceProvider = coalesce(x_SourceProvider, ProviderName),\r\n x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationDetails', '')),\r\n x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2024-03-01', ''))\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// CommitmentDiscountUsage_final_v1_0 table\r\n.create-merge table CommitmentDiscountUsage_final_v1_0 (\r\n ChargePeriodEnd: datetime, // Hubs add-on\r\n ChargePeriodStart: datetime, // MS 2023-03-01\r\n CommitmentDiscountCategory: string, // Hubs add-on\r\n CommitmentDiscountId: string, // MS 2023-03-01\r\n CommitmentDiscountType: string, // Hubs add-on\r\n ConsumedQuantity: decimal, // MS 2023-03-01\r\n ProviderName: string, // Hubs add-on\r\n ResourceId: string, // MS 2023-03-01\r\n ResourceName: string, // Hubs add-on\r\n ResourceType: string, // Hubs add-on\r\n ServiceCategory: string, // Hubs add-on\r\n ServiceName: string, // Hubs add-on\r\n SubAccountId: string, // Hubs add-on\r\n x_CommitmentDiscountCommittedCount: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountCommittedAmount: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountNormalizedGroup: string, // MS 2023-03-01\r\n x_CommitmentDiscountNormalizedRatio: decimal, // MS 2023-03-01\r\n x_CommitmentDiscountQuantity: decimal, // MS 2023-03-01\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_ResourceGroupName: string, // Hubs add-on\r\n x_ResourceType: string, // Hubs add-on\r\n x_ServiceModel: string, // Hubs add-on\r\n x_SkuOrderId: string, // MS 2023-03-01\r\n x_SkuSize: string, // MS 2023-03-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for CommitmentDiscountUsage_raw -> CommitmentDiscountUsage_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table CommitmentDiscountUsage_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"CommitmentDiscountUsage_raw\",\r\n \"Query\": \"CommitmentDiscountUsage_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Recommendations |================================================================================================\r\n// Supported datasets/versions:\r\n// - MS CM EA reservation recommendations: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-recommendations-ea\r\n// - MS CM MCA reservation recommendations: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-recommendations-mca\r\n//======================================================================================================================\r\n\r\n// Recommendations_raw table\r\n.create-merge table Recommendations_raw (\r\n CostWithNoReservedInstances: decimal, // MS CM EA resv reco 2024-05-01\r\n CostWithNoReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n FirstUsageDate: datetime, // MS CM EA resv reco 2024-05-01\r\n FirstUsageDate2: datetime, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n InstanceFlexibilityGroup: string, // MS CM EA resv reco 2024-05-01\r\n InstanceFlexibilityGroup2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n InstanceFlexibilityRatio: decimal, // MS CM EA resv reco 2024-05-01\r\n InstanceFlexibilityRatio2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n Location: string, // MS CM EA+MCA resv reco 2024-05-01\r\n LookBackPeriod: string, // MS CM EA+MCA resv reco 2024-05-01\r\n MeterId: string, // MS CM EA resv reco 2024-05-01\r\n MeterID: string, // MS CM MCA resv reco 2024-05-01\r\n NetSavings: decimal, // MS CM EA resv reco 2024-05-01\r\n NetSavings2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n NormalizedSize: string, // MS CM EA resv reco 2024-05-01\r\n NormalizedSize2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n RecommendedQuantity: decimal, // MS CM EA resv reco 2024-05-01\r\n RecommendedQuantity2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n RecommendedQuantityNormalized: decimal, // MS CM EA resv reco 2024-05-01\r\n RecommendedQuantityNormalized2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n ResourceType: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Scope: string, // MS CM EA resv reco 2024-05-01\r\n scope: string, // MS CM MCA resv reco 2024-05-01\r\n SKU: string, // MS CM EA resv reco 2024-05-01\r\n SkuName: string, // MS CM MCA resv reco 2024-05-01\r\n SkuProperties: string, // MS CM EA resv reco 2024-05-01\r\n SkuProperties2: string, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n SubscriptionId: string, // MS CM EA+MCA resv reco 2024-05-01\r\n Term: string, // MS CM EA+MCA resv reco 2024-05-01\r\n TotalCostWithReservedInstances: decimal, // MS CM EA resv reco 2024-05-01\r\n TotalCostWithReservedInstances2: decimal, // MS CM MCA resv reco 2024-05-01 -- Renamed to remove spaces\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Recommendations_raw ingestion mapping\r\n.create-or-alter table Recommendations_raw ingestion parquet mapping \"Recommendations_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"CostWithNoReservedInstances\", \"Properties\": { \"Field\": \"CostWithNoReservedInstances\" } },\r\n { \"Column\": \"CostWithNoReservedInstances2\", \"Properties\": { \"Field\": \"Cost With No ReservedInstances\" } },\r\n { \"Column\": \"FirstUsageDate\", \"Properties\": { \"Field\": \"FirstUsageDate\" } },\r\n { \"Column\": \"FirstUsageDate2\", \"Properties\": { \"Field\": \"First UsageDate\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup\", \"Properties\": { \"Field\": \"InstanceFlexibilityGroup\" } },\r\n { \"Column\": \"InstanceFlexibilityGroup2\", \"Properties\": { \"Field\": \"Instance Flexibility Group\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio\", \"Properties\": { \"Field\": \"InstanceFlexibilityRatio\" } },\r\n { \"Column\": \"InstanceFlexibilityRatio2\", \"Properties\": { \"Field\": \"Instance Flexibility Ratio\" } },\r\n { \"Column\": \"Location\", \"Properties\": { \"Field\": \"Location\" } },\r\n { \"Column\": \"LookBackPeriod\", \"Properties\": { \"Field\": \"LookBackPeriod\" } },\r\n { \"Column\": \"MeterId\", \"Properties\": { \"Field\": \"MeterId\" } },\r\n { \"Column\": \"MeterID\", \"Properties\": { \"Field\": \"MeterID\" } },\r\n { \"Column\": \"NetSavings\", \"Properties\": { \"Field\": \"NetSavings\" } },\r\n { \"Column\": \"NetSavings2\", \"Properties\": { \"Field\": \"Net Savings\" } },\r\n { \"Column\": \"NormalizedSize\", \"Properties\": { \"Field\": \"NormalizedSize\" } },\r\n { \"Column\": \"NormalizedSize2\", \"Properties\": { \"Field\": \"Normalized Size\" } },\r\n { \"Column\": \"RecommendedQuantity\", \"Properties\": { \"Field\": \"RecommendedQuantity\" } },\r\n { \"Column\": \"RecommendedQuantity2\", \"Properties\": { \"Field\": \"Recommended Quantity\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized\", \"Properties\": { \"Field\": \"RecommendedQuantityNormalized\" } },\r\n { \"Column\": \"RecommendedQuantityNormalized2\", \"Properties\": { \"Field\": \"Recommended Quantity Normalized\" } },\r\n { \"Column\": \"ResourceType\", \"Properties\": { \"Field\": \"ResourceType\" } },\r\n { \"Column\": \"Scope\", \"Properties\": { \"Field\": \"Scope\" } },\r\n { \"Column\": \"scope\", \"Properties\": { \"Field\": \"scope\" } },\r\n { \"Column\": \"SKU\", \"Properties\": { \"Field\": \"SKU\" } },\r\n { \"Column\": \"SkuName\", \"Properties\": { \"Field\": \"SkuName\" } },\r\n { \"Column\": \"SkuProperties\", \"Properties\": { \"Field\": \"SkuProperties\" } },\r\n { \"Column\": \"SkuProperties2\", \"Properties\": { \"Field\": \"Sku Properties\" } },\r\n { \"Column\": \"SubscriptionId\", \"Properties\": { \"Field\": \"SubscriptionId\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances\", \"Properties\": { \"Field\": \"TotalCostWithReservedInstances\" } },\r\n { \"Column\": \"TotalCostWithReservedInstances2\", \"Properties\": { \"Field\": \"Total Cost With ReservedInstances\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Recommendations_raw retention policy\r\n.alter-merge table Recommendations_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Recommendations_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All recommendations transformed to FOCUS 1.0.', folder='Recommendations')\r\nRecommendations_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n Recommendations_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Set source columns\r\n | extend x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationRecommendations', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', ''))\r\n //\r\n // Handle duplicated columns with spaces\r\n | extend CostWithNoReservedInstances = coalesce(CostWithNoReservedInstances, CostWithNoReservedInstances2)\r\n | extend FirstUsageDate = coalesce(FirstUsageDate, FirstUsageDate2)\r\n | extend InstanceFlexibilityGroup = coalesce(InstanceFlexibilityGroup, InstanceFlexibilityGroup2)\r\n | extend InstanceFlexibilityRatio = coalesce(InstanceFlexibilityRatio, InstanceFlexibilityRatio2)\r\n | extend NetSavings = coalesce(NetSavings, NetSavings2)\r\n | extend NormalizedSize = coalesce(NormalizedSize, NormalizedSize2)\r\n | extend RecommendedQuantity = coalesce(RecommendedQuantity, RecommendedQuantity2)\r\n | extend RecommendedQuantityNormalized = coalesce(RecommendedQuantityNormalized, RecommendedQuantityNormalized2)\r\n | extend SkuProperties = coalesce(SkuProperties, SkuProperties2)\r\n | extend TotalCostWithReservedInstances = coalesce(TotalCostWithReservedInstances, TotalCostWithReservedInstances2)\r\n //\r\n // Build recommendation details\r\n | lookup kind=leftouter (database('Ingestion').Regions | distinct Location = RegionId, RegionName) on Location\r\n | extend x_RecommendationDetails = case(\r\n x_SourceType == 'ReservationRecommendations', bag_pack(\r\n 'CommitmentDiscountNormalizedGroup', InstanceFlexibilityGroup,\r\n 'CommitmentDiscountNormalizedRatio', InstanceFlexibilityRatio,\r\n 'CommitmentDiscountNormalizedSize', NormalizedSize,\r\n 'CommitmentDiscountResourceType', ResourceType,\r\n 'CommitmentDiscountScope', coalesce(Scope, scope),\r\n 'LookbackPeriodDuration', case(\r\n LookBackPeriod matches regex @'^Last([0-9]+)Days$', replace_regex(LookBackPeriod, @'^Last([0-9]+)Days$', @'P\\1D'),\r\n ''\r\n ),\r\n 'LookbackPeriodStart', FirstUsageDate,\r\n 'RecommendedQuantity', RecommendedQuantity,\r\n 'RecommendedQuantityNormalized', RecommendedQuantityNormalized,\r\n 'RegionId', Location,\r\n 'RegionName', RegionName,\r\n 'SkuMeterId', coalesce(MeterId, MeterID),\r\n 'SkuPriceDetails', SkuProperties,\r\n 'SkuSize', coalesce(SKU, SkuName),\r\n 'SkuTerm', isoMonths(Term)\r\n ),\r\n dynamic({})\r\n )\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n ProviderName,\r\n SubAccountId = iff(isnotempty(SubscriptionId), strcat('/subscriptions/', SubscriptionId), ''),\r\n x_IngestionTime = ingestion_time(),\r\n x_EffectiveCostAfter = TotalCostWithReservedInstances,\r\n x_EffectiveCostBefore = CostWithNoReservedInstances,\r\n x_EffectiveCostSavings = NetSavings,\r\n x_RecommendationDate = FirstUsageDate + (toint(extract(@'^Last([0-9]+)Days$', 1, LookBackPeriod)) * 1d),\r\n x_RecommendationDetails,\r\n x_SourceName,\r\n x_SourceProvider,\r\n x_SourceType,\r\n x_SourceVersion\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Recommendations_final_v1_0 table\r\n.create-merge table Recommendations_final_v1_0 (\r\n ProviderName: string,\r\n SubAccountId: string,\r\n x_IngestionTime: datetime,\r\n x_EffectiveCostAfter: decimal,\r\n x_EffectiveCostBefore: decimal,\r\n x_EffectiveCostSavings: decimal,\r\n x_RecommendationDate: datetime,\r\n x_RecommendationDetails: dynamic,\r\n x_SourceName: string,\r\n x_SourceProvider: string,\r\n x_SourceType: string,\r\n x_SourceVersion: string\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Recommendations_raw -> Recommendations_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Recommendations_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Recommendations_raw\",\r\n \"Query\": \"Recommendations_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n\r\n\r\n//===| Transactions |===================================================================================================\r\n// Supported versions:\r\n// - MS CM EA reservation transactions: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-transactions-ea\r\n// - MS CM MCA reservation transactions: 2023-05-01 -- See https://learn.microsoft.com/en-us/azure/cost-management-billing/dataset-schema/reservation-transactions-mca\r\n//======================================================================================================================\r\n\r\n// Transactions_raw table\r\n.create-merge table Transactions_raw (\r\n AccountName: string, // MS CM EA resv trans 2023-05-01\r\n AccountOwnerEmail: string, // MS CM EA resv trans 2023-05-01\r\n Amount: decimal, // MS CM EA+MCA resv trans 2023-05-01\r\n ArmSkuName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n BillingFrequency: string, // MS CM EA+MCA resv trans 2023-05-01\r\n BillingMonth: string, // MS CM EA resv trans 2023-05-01\r\n BillingProfileId: string, // MS CM MCA resv trans 2023-05-01\r\n BillingProfileName: string, // MS CM MCA resv trans 2023-05-01\r\n CostCenter: string, // MS CM EA resv trans 2023-05-01\r\n Currency: string, // MS CM EA+MCA resv trans 2023-05-01\r\n CurrentEnrollmentId: string, // MS CM EA resv trans 2023-05-01\r\n DepartmentName: string, // MS CM EA resv trans 2023-05-01\r\n Description: string, // MS CM EA+MCA resv trans 2023-05-01\r\n EventDate: datetime, // MS CM EA+MCA resv trans 2023-05-01\r\n EventType: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Invoice: string, // MS CM EA+MCA resv trans 2023-05-01\r\n InvoiceId: string, // MS CM EA+MCA resv trans 2023-05-01\r\n InvoiceSectionId: string, // MS CM MCA resv trans 2023-05-01\r\n InvoiceSectionName: string, // MS CM MCA resv trans 2023-05-01\r\n MonetaryCommitment: decimal, // MS CM EA resv trans 2023-05-01\r\n Overage: decimal, // MS CM EA resv trans 2023-05-01\r\n PurchasingEnrollment: string, // MS CM EA resv trans 2023-05-01\r\n PurchasingSubscriptionGuid: string, // MS CM EA+MCA resv trans 2023-05-01\r\n PurchasingSubscriptionName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Quantity: decimal, // MS CM EA+MCA resv trans 2023-05-01\r\n Region: string, // MS CM EA+MCA resv trans 2023-05-01\r\n ReservationOrderId: string, // MS CM EA+MCA resv trans 2023-05-01\r\n ReservationOrderName: string, // MS CM EA+MCA resv trans 2023-05-01\r\n Term: string, // MS CM EA+MCA resv trans 2023-05-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string // Hubs add-on\r\n)\r\n\r\n// Transactions_raw ingestion mapping\r\n.create-or-alter table Transactions_raw ingestion parquet mapping \"Transactions_raw_mapping\"\r\n```\r\n[\r\n { \"Column\": \"AccountName\", \"Properties\": { \"Field\": \"AccountName\" } },\r\n { \"Column\": \"AccountOwnerEmail\", \"Properties\": { \"Field\": \"AccountOwnerEmail\" } },\r\n { \"Column\": \"Amount\", \"Properties\": { \"Field\": \"Amount\" } },\r\n { \"Column\": \"ArmSkuName\", \"Properties\": { \"Field\": \"ArmSkuName\" } },\r\n { \"Column\": \"BillingFrequency\", \"Properties\": { \"Field\": \"BillingFrequency\" } },\r\n { \"Column\": \"BillingMonth\", \"Properties\": { \"Field\": \"BillingMonth\" } },\r\n { \"Column\": \"BillingProfileId\", \"Properties\": { \"Field\": \"BillingProfileId\" } },\r\n { \"Column\": \"BillingProfileName\", \"Properties\": { \"Field\": \"BillingProfileName\" } },\r\n { \"Column\": \"CostCenter\", \"Properties\": { \"Field\": \"CostCenter\" } },\r\n { \"Column\": \"Currency\", \"Properties\": { \"Field\": \"Currency\" } },\r\n { \"Column\": \"CurrentEnrollmentId\", \"Properties\": { \"Field\": \"CurrentEnrollmentId\" } },\r\n { \"Column\": \"DepartmentName\", \"Properties\": { \"Field\": \"DepartmentName\" } },\r\n { \"Column\": \"Description\", \"Properties\": { \"Field\": \"Description\" } },\r\n { \"Column\": \"EventDate\", \"Properties\": { \"Field\": \"EventDate\" } },\r\n { \"Column\": \"EventType\", \"Properties\": { \"Field\": \"EventType\" } },\r\n { \"Column\": \"Invoice\", \"Properties\": { \"Field\": \"Invoice\" } },\r\n { \"Column\": \"InvoiceId\", \"Properties\": { \"Field\": \"InvoiceId\" } },\r\n { \"Column\": \"InvoiceSectionId\", \"Properties\": { \"Field\": \"InvoiceSectionId\" } },\r\n { \"Column\": \"InvoiceSectionName\", \"Properties\": { \"Field\": \"InvoiceSectionName\" } },\r\n { \"Column\": \"MonetaryCommitment\", \"Properties\": { \"Field\": \"MonetaryCommitment\" } },\r\n { \"Column\": \"Overage\", \"Properties\": { \"Field\": \"Overage\" } },\r\n { \"Column\": \"PurchasingEnrollment\", \"Properties\": { \"Field\": \"PurchasingEnrollment\" } },\r\n { \"Column\": \"PurchasingSubscriptionGuid\", \"Properties\": { \"Field\": \"PurchasingSubscriptionGuid\" } },\r\n { \"Column\": \"PurchasingSubscriptionName\", \"Properties\": { \"Field\": \"PurchasingSubscriptionName\" } },\r\n { \"Column\": \"Quantity\", \"Properties\": { \"Field\": \"Quantity\" } },\r\n { \"Column\": \"Region\", \"Properties\": { \"Field\": \"Region\" } },\r\n { \"Column\": \"ReservationOrderId\", \"Properties\": { \"Field\": \"ReservationOrderId\" } },\r\n { \"Column\": \"ReservationOrderName\", \"Properties\": { \"Field\": \"ReservationOrderName\" } },\r\n { \"Column\": \"Term\", \"Properties\": { \"Field\": \"Term\" } },\r\n { \"Column\": \"x_SourceName\", \"Properties\": { \"Field\": \"x_SourceName\" } },\r\n { \"Column\": \"x_SourceProvider\", \"Properties\": { \"Field\": \"x_SourceProvider\" } },\r\n { \"Column\": \"x_SourceType\", \"Properties\": { \"Field\": \"x_SourceType\" } },\r\n { \"Column\": \"x_SourceVersion\", \"Properties\": { \"Field\": \"x_SourceVersion\" } }\r\n]\r\n```\r\n\r\n// Transactions_raw retention policy\r\n.alter-merge table Transactions_raw policy retention softdelete = $$rawRetentionInDays$$d recoverability = disabled\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Transactions_transform_v1_0 function\r\n.create-or-alter function\r\nwith (docstring='All transactions transformed to FOCUS 1.0.', folder='Transactions')\r\nTransactions_transform_v1_0()\r\n{\r\n // NOTE: All open issues and questions are tracked @ https://github.com/microsoft/finops-toolkit/issues/1111\r\n let isoMonths = (duration: string) {\r\n let number = toint(replace_regex(duration, @'[PMY]', ''));\r\n toint(case(\r\n duration == '', toint(''),\r\n duration endswith \"Y\", number * 12,\r\n duration endswith \"M\", number,\r\n -1\r\n ))\r\n };\r\n Transactions_raw\r\n //\r\n // Set ProviderName\r\n | extend ProviderName = 'Microsoft'\r\n //\r\n // Set source columns\r\n | extend x_SourceName = coalesce(x_SourceName, iff(ProviderName == 'Microsoft', 'Cost Management', ProviderName))\r\n | extend x_SourceProvider = coalesce(x_SourceProvider, ProviderName)\r\n | extend x_SourceType = coalesce(x_SourceType, iff(ProviderName == 'Microsoft', 'ReservationTransactions', ''))\r\n | extend x_SourceVersion = coalesce(x_SourceVersion, iff(ProviderName == 'Microsoft', '2023-05-01', ''))\r\n //\r\n // Handle BillingPeriodStart/End\r\n | extend BillingMonth = tostring(BillingMonth)\r\n | extend BillingPeriodStart = iff(isempty(BillingMonth), datetime(null), todatetime(strcat(substring(BillingMonth, 0, 4), \"-\", substring(BillingMonth, 4, 2), \"-\", substring(BillingMonth, 6, 2))))\r\n | extend BillingPeriodEnd = iff(isempty(BillingMonth), datetime(null), startofmonth(endofmonth(BillingPeriodStart) + 1d))\r\n //\r\n // Sort columns and apply final transforms\r\n | project\r\n BilledCost = Amount,\r\n BillingAccountId = case(\r\n BillingProfileId startswith '/', BillingProfileId,\r\n isnotempty(CurrentEnrollmentId), strcat('/providers/Microsoft.Billing/billingAccounts/', CurrentEnrollmentId),\r\n isnotempty(BillingProfileId), strcat('/providers/Microsoft.Billing/billingProfiles/', BillingProfileId),\r\n ''\r\n ),\r\n BillingAccountName = coalesce(BillingProfileName, CurrentEnrollmentId),\r\n BillingCurrency = Currency,\r\n BillingPeriodEnd,\r\n BillingPeriodStart,\r\n ChargeCategory = case(\r\n EventType in ('Cancel', 'Purchase', 'Refund'), 'Purchase',\r\n 'Adjustment'\r\n ),\r\n ChargeClass = case(\r\n EventType == 'Cancel', 'Cancel', // FOCUS does not handle this scenario\r\n EventType == 'Refund', 'Correction',\r\n ''\r\n ),\r\n ChargeDescription = Description,\r\n ChargeFrequency = case(\r\n BillingFrequency == 'OneTime', 'One-Time',\r\n BillingFrequency == 'Recurring', 'Recurring',\r\n BillingFrequency\r\n ),\r\n ChargePeriodStart = EventDate,\r\n PricingQuantity = Quantity,\r\n PricingUnit = 'Reservations',\r\n ProviderName,\r\n RegionId = Region,\r\n RegionName = Region,\r\n SubAccountId = iff(isempty(PurchasingSubscriptionGuid), '', strcat('/subscriptions/', PurchasingSubscriptionGuid)),\r\n SubAccountName = iff(isempty(PurchasingSubscriptionGuid), '', PurchasingSubscriptionName),\r\n x_AccountName = AccountName,\r\n x_AccountOwnerId = AccountOwnerEmail,\r\n x_CostCenter = CostCenter,\r\n x_InvoiceId = InvoiceId,\r\n x_InvoiceNumber = Invoice,\r\n x_InvoiceSectionId = InvoiceSectionId,\r\n x_InvoiceSectionName = coalesce(InvoiceSectionName, DepartmentName),\r\n x_IngestionTime = ingestion_time(),\r\n x_MonetaryCommitment = MonetaryCommitment,\r\n x_Overage = Overage,\r\n x_PurchasingBillingAccountId = PurchasingEnrollment,\r\n x_SkuOrderId = ReservationOrderId,\r\n x_SkuOrderName = ReservationOrderName,\r\n x_SkuSize = ArmSkuName,\r\n x_SkuTerm = isoMonths(Term),\r\n x_SourceName,\r\n x_SourceProvider,\r\n x_SourceType,\r\n x_SourceVersion,\r\n x_SubscriptionId = PurchasingSubscriptionGuid,\r\n x_TransactionType = EventType\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Transactions_final_v1_0 table\r\n.create-merge table Transactions_final_v1_0 (\r\n BilledCost: decimal, // MS CM EA+MCA 2023-05-01\r\n BillingAccountId: string, // MS CM EA+MCA 2023-05-01\r\n BillingAccountName: string, // MS CM EA+MCA 2023-05-01\r\n BillingCurrency: string, // MS CM EA+MCA 2023-05-01\r\n BillingPeriodEnd: datetime, // MS CM EA+MCA 2023-05-01\r\n BillingPeriodStart: datetime, // MS CM EA+MCA 2023-05-01\r\n ChargeCategory: string, // Hubs add-on\r\n ChargeClass: string, // Hubs add-on\r\n ChargeDescription: string, // MS CM EA+MCA 2023-05-01\r\n ChargeFrequency: string, // MS CM EA+MCA 2023-05-01\r\n ChargePeriodStart: datetime, // MS CM EA+MCA 2023-05-01\r\n PricingQuantity: decimal, // MS CM EA+MCA 2023-05-01\r\n PricingUnit: string, // Hubs add-on\r\n ProviderName: string, // Hubs add-on\r\n RegionId: string, // MS CM EA+MCA 2023-05-01\r\n RegionName: string, // MS CM EA+MCA 2023-05-01\r\n SubAccountId: string, // MS CM EA+MCA 2023-05-01\r\n SubAccountName: string, // MS CM EA+MCA 2023-05-01\r\n x_AccountName: string, // MS CM EA 2023-05-01\r\n x_AccountOwnerId: string, // MS CM EA 2023-05-01\r\n x_CostCenter: string, // MS CM EA 2023-05-01\r\n x_InvoiceId: string, // MS CM MCA 2023-05-01\r\n x_InvoiceNumber: string, // MS CM MCA 2023-05-01\r\n x_InvoiceSectionId: string, // MS CM MCA 2023-05-01\r\n x_InvoiceSectionName: string, // MS CM MCA 2023-05-01\r\n x_IngestionTime: datetime, // Hubs add-on\r\n x_MonetaryCommitment: decimal, // MS CM EA 2023-05-01\r\n x_Overage: decimal, // MS CM EA 2023-05-01\r\n x_PurchasingBillingAccountId: string, // MS CM EA 2023-05-01\r\n x_SkuOrderId: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuOrderName: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuSize: string, // MS CM EA+MCA 2023-05-01\r\n x_SkuTerm: int, // MS CM EA+MCA 2023-05-01\r\n x_SourceName: string, // Hubs add-on\r\n x_SourceProvider: string, // Hubs add-on\r\n x_SourceType: string, // Hubs add-on\r\n x_SourceVersion: string, // Hubs add-on\r\n x_SubscriptionId: string, // MS CM EA+MCA 2023-05-01\r\n x_TransactionType: string // MS CM EA+MCA 2023-05-01\r\n)\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// Update policy for Transactions_raw -> Transactions_final_v1_0 table\r\n// NOTE: Must be after transform function is defined\r\n.alter table Transactions_final_v1_0 policy update\r\n```\r\n[{\r\n \"IsEnabled\": true,\r\n \"Source\": \"Transactions_raw\",\r\n \"Query\": \"Transactions_transform_v1_0()\",\r\n \"IsTransactional\": true,\r\n \"PropagateIngestionProperties\": true\r\n}]\r\n```\r\n",
+ "$fxv#8": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Common utility functions\r\n//\r\n// TIP: Use Ctrl+K,Ctrl+0 to collapse all regions in VS Code\r\n//======================================================================================================================\r\n\r\n\r\n//===| Date functions |=================================================================================================\r\n\r\n// monthstring\r\n.create-or-alter function \r\nwith (docstring = @'Returns the name of the month for the specified date (e.g. Jan or January)', folder =@'Common') \r\nmonthstring(['date']: datetime, length: int = 9)\r\n{\r\n substring(dynamic(['January','February','March','April','May','June','July','August','September','October','November','December'])[getmonth(['date']) - 1], 0, length)\r\n}\r\n\r\n// datestring\r\n.create-or-alter function \r\nwith (docstring = @'Converts 2 dates into a simple, user-friendly date range (e.g. Jan 1-Jan 3)', folder =@'Common') \r\ndatestring(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n let month = (d: datetime) { monthstring(d, 3) };\r\n let endDate = iff(end == datetime('0001-01-01'), start, end);\r\n let sameDate = startofday(start) == startofday(endDate);\r\n let sameMonth = startofmonth(start) == startofmonth(endDate);\r\n let sameYear = startofyear(start) == startofyear(endDate);\r\n let fullMonth = startofday(start) == startofmonth(start) and startofday(endDate) == startofday(endofmonth(endDate));\r\n let fullYear = startofday(start) == startofyear(start) and startofday(endDate) == startofday(endofyear(endDate));\r\n let currentYear = sameYear and startofyear(start) == startofyear(now());\r\n case(\r\n // Full year | yyyy (same year) / yyyy-yyyy (diff years)\r\n fullYear,\r\n strcat(getyear(start), iff(sameYear, '', strcat('-', getyear(endDate)))),\r\n // 1 full mo, same year | Mmm yyyy\r\n fullMonth and sameMonth and sameYear,\r\n strcat(month(start), ' ', getyear(start)),\r\n // 2+ full mo, same year | Mmm-Mmm (current year) / Mmm-Mmm yyyy (other year)\r\n fullMonth and sameYear,\r\n strcat(month(start), '-', month(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // Full mo, diff year | Mmm yyyy-Mmm yyyy\r\n fullMonth and not(sameYear),\r\n strcat(month(start), ' ', getyear(start), '-', month(endDate), ' ', getyear(endDate)),\r\n // Same date | Mmm d (current year) / Mmm d, yyyy (other year)\r\n sameDate,\r\n strcat(month(start), ' ', dayofmonth(start), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // 1 partial M, same Y | Mmm d-d (current year) / Mmm d-d, yyyy (other year)\r\n not(fullMonth) and sameMonth and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', dayofmonth(endDate), iff(currentYear, '', strcat(' ', getyear(endDate)))),\r\n // 2+ partial M, same Y | Mmm d-Mmm d (current year) / Mmm d-Mmm d, yyyy (other year)\r\n not(fullMonth) and not(sameMonth) and sameYear,\r\n strcat(month(start), ' ', dayofmonth(start), '-', month(endDate), ' ', dayofmonth(endDate), iff(currentYear, '', strcat(', ', getyear(endDate)))),\r\n // All other cases | Mmm d, yyyy-Mmm d, yyyy\r\n strcat(month(start), ' ', dayofmonth(start), ', ', getyear(start), '-', month(endDate), ' ', dayofmonth(endDate), ', ', getyear(endDate))\r\n )\r\n}\r\n\r\n// daterange\r\n.create-or-alter function \r\nwith (docstring = @'DEPRECATED: Please use datestring(); function will be removed on or after the Jan 2026 release', folder =@'Common') \r\ndaterange(start: datetime, end: datetime = datetime('0001-01-01'))\r\n{\r\n datestring(start, end)\r\n}\r\n\r\n// monthsago\r\n.create-or-alter function \r\nwith (docstring = 'DEPRECATED: Please use startofmonth(now(), -<# of months>); function will be removed on or after the Jan 2026 release', folder = 'Common')\r\nmonthsago(months: int)\r\n{\r\n datetime_add('month', -months, startofmonth(now()))\r\n}\r\n\r\n\r\n//===| Number functions |===============================================================================================\r\n// NOTE: Must be defined before string converters\r\n\r\n// delta\r\n.create-or-alter function \r\nwith (docstring = @'Compares 2 values and returns the percentage change from oldval to newval', folder =@'Common') \r\ndelta(oldval: double, newval: double)\r\n{\r\n (newval - todouble(oldval))/oldval\r\n}\r\n\r\n// percentOfTotal\r\n// NOTE: Must be before percent() function\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercentOfTotal(t: (Count: long), tot: long)\r\n{\r\n let total = todouble(tot);\r\n t \r\n | extend Percent = round(Count / total * 100, 3) \r\n | order by Count desc\r\n}\r\n\r\n// percent\r\n.create-or-alter function \r\nwith (docstring = @'Calculates the percentage of each record based on a required Count column', folder =@'Common') \r\npercent(t: (Count: long))\r\n{\r\n let total = todouble(toscalar(t | summarize sum(Count)));\r\n percentOfTotal(t, total)\r\n}\r\n\r\n// plusminus\r\n.create-or-alter function \r\nwith (docstring = 'Shows a +/- sign based on the direction of the number', folder = 'Common')\r\nplusminus(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, val, strcat('+', val))\r\n}\r\n\r\n// updown\r\n.create-or-alter function \r\nwith (docstring = 'Shows an up/down arrow based on the direction of the number', folder = 'Common')\r\nupdown(val: string)\r\n{\r\n let neg = substring(val, 0, 1) == '-';\r\n iff(neg, strcat('β', substring(val, 1)), strcat('β', val))\r\n}\r\n\r\n\r\n//===| String functions |===============================================================================================\r\n\r\n// percentstring\r\n// NOTE: Must be defined before deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a percentage and render as a string', folder = 'Common')\r\npercentstring(num: double, total: double = 1.0, places: int = 9)\r\n{\r\n let value = 1.0 * num / total * 100;\r\n strcat(case(\r\n places != 9, round(value, places),\r\n value < 10, round(value, 2),\r\n round(value, 1)\r\n ), '%')\r\n}\r\n\r\n//----------------------------------------------------------------------------------------------------------------------\r\n\r\n// arraystring\r\n.create-or-alter function \r\nwith (docstring = 'Convert an array to a comma-delimited string', folder = 'Common')\r\narraystring(arr: dynamic)\r\n{\r\n replace_string(replace_regex(replace_regex(replace_regex(replace_regex(replace_regex(\r\n tostring(arr)\r\n , @'^\\[\"', '')\r\n , @'\"\\]$', '')\r\n , @'^, ', '')\r\n , @', $', '')\r\n , @'^\\[]$', '')\r\n , '\",\"', ', ')\r\n}\r\n\r\n// deltastring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate a delta percentage and render as a string', folder = 'Common')\r\ndeltastring(oldval: double, newval: double, places: int = 1, useArrows: bool = false)\r\n{\r\n let d = delta(oldval, newval);\r\n strcat(case(useArrows and d > 0, 'β', useArrows and d < 0, 'β', d < 0, '-', ''), percentstring(abs(d), 1, places))\r\n}\r\n\r\n// diffstring\r\n.create-or-alter function \r\nwith (docstring = 'Calculate the difference and render as a string', folder = 'Common')\r\ndiffstring(oldval: double, newval: double, places: int = 1)\r\n{\r\n plusminus(round(newval - oldval, places))\r\n}\r\n\r\n// numberstring\r\n.create-or-alter function \r\nwith (docstring = 'Convert a number to a string', folder = 'Common')\r\nnumberstring(num: double, abbrev: bool = true)\r\n{\r\n replace_regex(case(\r\n num >= 10000000000000, strcat(round(1.0 * num / 1000000000000, 1), 'T'),\r\n num >= 1000000000000, strcat(round(1.0 * num / 1000000000000, 2), 'T'),\r\n num >= 10000000000, strcat(round(1.0 * num / 1000000000, 1), 'B'),\r\n num >= 1000000000, strcat(round(1.0 * num / 1000000000, 2), 'B'),\r\n num >= 10000000, strcat(round(1.0 * num / 1000000, 1), 'M'),\r\n num >= 1000000, strcat(round(1.0 * num / 1000000, 2), 'M'),\r\n num >= 10000, strcat(round(1.0 * num / 1000, 1), 'K'),\r\n // Kusto doesn't support back-refs yet -- num > 1000, replace_regex(tostring(num), @'(\\d)(?=(\\d{3})+\\.)', @'\\1,'), // See https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/re2-library\r\n num > 1000, replace_regex(tostring(num), @'([0-9]{3})$', @',\\1'), //num / 1000, ',', substring(tostring(num), 0) - (num / 1000 * 1000)),\r\n tostring(num)\r\n ), @'\\.0$', '')\r\n}\r\n\r\n\r\n//===| Other |==========================================================================================================\r\n\r\n// ifempty\r\n.create-or-alter function \r\nwith (docstring = 'Replaces an empty value with the specified default value', folder = 'Common')\r\nifempty(val: dynamic, defaultVal: dynamic)\r\n{\r\n iff(isempty(val), defaultVal, val)\r\n}\r\n",
+ "$fxv#9": "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//======================================================================================================================\r\n// Hub database\r\n// Used for querying and reporting.\r\n//\r\n// Versioning strategy:\r\n// - Each dataset includes a function that returns the latest version of the data (e.g., \"Costs()\").\r\n// - Every supported version of FOCUS should have a corresponding function (e.g., \"Costs_v1_0\").\r\n// - Each versioned function unions data from versioned tables in the Ingestion database and transforms it to that FOCUS version for back compat.\r\n// - Consumers should use the unversioned function for the latest and the versioned functions for back compat.\r\n//\r\n// To add a new FOCUS versions:\r\n// 1. Add new FOCUS version section after the latest version section and before existing version sections\r\n// 2. Create new *_vX_Y functions per dataset that transforms older data to the new FOCUS version\r\n// 3. Update the unversioned functions to use the new *_vX_Y functions\r\n// 4. Update older versioned functions to also pull from the new *_vX_Y functions and transform to the old schema\r\n//======================================================================================================================\r\n\r\n// For allowed commands, see https://learn.microsoft.com/azure/data-explorer/database-script\r\n\r\n\r\n//======================================================================================================================\r\n// FOCUS 1.0\r\n//======================================================================================================================\r\n\r\n// CommitmentDiscountUsage_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all commitment discount usage records aligned to FOCUS 1.0.', folder = 'CommitmentDiscountUsage')\r\nCommitmentDiscountUsage_v1_0()\r\n{\r\n database('Ingestion').CommitmentDiscountUsage_final_v1_0\r\n}\r\n\r\n\r\n// Costs_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all cost and usage records aligned to FOCUS 1.0.', folder = 'Costs')\r\nCosts_v1_0()\r\n{\r\n database('Ingestion').Costs_final_v1_0\r\n}\r\n\r\n\r\n// Prices_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all prices aligned to FOCUS 1.0.', folder = 'Prices')\r\nPrices_v1_0()\r\n{\r\n database('Ingestion').Prices_final_v1_0\r\n}\r\n\r\n\r\n// Recommendations_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all recommendations aligned to FOCUS 1.0.', folder = 'Recommendations')\r\nRecommendations_v1_0()\r\n{\r\n database('Ingestion').Recommendations_final_v1_0\r\n}\r\n\r\n\r\n// Transactions_final_v1_0\r\n.create-or-alter function\r\nwith (docstring = 'Gets all transactions aligned to FOCUS 1.0.', folder = 'Transactions')\r\nTransactions_v1_0()\r\n{\r\n database('Ingestion').Transactions_final_v1_0\r\n}\r\n\r\n\r\n//======================================================================================================================\r\n// Latest FOCUS version\r\n//======================================================================================================================\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all commitment discount usage records with the latest supported version of the FOCUS schema.', folder = 'CommitmentDiscountUsage')\r\nCommitmentDiscountUsage()\r\n{\r\n CommitmentDiscountUsage_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all cost and usage records with the latest supported version of the FOCUS schema.', folder = 'Costs')\r\nCosts()\r\n{\r\n Costs_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all prices with the latest supported version of the FOCUS schema.', folder = 'Prices')\r\nPrices()\r\n{\r\n Prices_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all recommendations with the latest supported version of the FOCUS schema.', folder = 'Recommendations')\r\nRecommendations()\r\n{\r\n Recommendations_v1_0()\r\n}\r\n\r\n\r\n.create-or-alter function\r\nwith (docstring = 'Gets all transactions with the latest supported version of the FOCUS schema.', folder = 'Transactions')\r\nTransactions()\r\n{\r\n Transactions_v1_0()\r\n}\r\n",
"ftkver": "[variables('$fxv#0')]",
"ftkVersion": "[if(contains(variables('ftkver'), '-'), split(variables('ftkver'), '-')[0], variables('ftkver'))]",
"ftkBranch": "[if(contains(variables('ftkver'), '-'), split(variables('ftkver'), '-')[1], '')]",
@@ -1791,102 +1776,205 @@
"Standard_L32s_v3": 32
}
},
- "resources": [
- {
+ "resources": {
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_1": {
"type": "Microsoft.Kusto/clusters/databases/scripts",
"apiVersion": "2023-08-15",
- "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'CommonFunctions')]",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_1')]",
"properties": {
"scriptContent": "[variables('$fxv#1')]",
"continueOnErrors": "[parameters('continueOnErrors')]",
"forceUpdateTag": "[parameters('forceUpdateTag')]"
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]"
+ "cluster::ingestionDb"
]
},
- {
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_2": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_2')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#2')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_3": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_3')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#3')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_4": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions_resource_type_4')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#4')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb"
+ ]
+ },
+ "cluster::ingestionDb::openDataScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'OpenDataFunctions')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#5')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_1",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_2",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_3",
+ "cluster::ingestionDb::OpenDataFunctions_resource_type_4"
+ ]
+ },
+ "cluster::ingestionDb::commonScript": {
+ "type": "Microsoft.Kusto/clusters/databases/scripts",
+ "apiVersion": "2023-08-15",
+ "name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'CommonFunctions')]",
+ "properties": {
+ "scriptContent": "[variables('$fxv#6')]",
+ "continueOnErrors": "[parameters('continueOnErrors')]",
+ "forceUpdateTag": "[parameters('forceUpdateTag')]"
+ },
+ "dependsOn": [
+ "cluster::ingestionDb",
+ "cluster::ingestionDb::openDataScript"
+ ]
+ },
+ "cluster::ingestionDb::setupScript": {
"type": "Microsoft.Kusto/clusters/databases/scripts",
"apiVersion": "2023-08-15",
"name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Ingestion', 'SetupScript')]",
"properties": {
- "scriptContent": "[replace(replace(replace(replace(variables('$fxv#2'), '$$adfPrincipalId$$', reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.principalId), '$$adfTenantId$$', reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.tenantId), '$$ftkOpenDataFolder$$', if(empty(variables('ftkBranch')), format('https://github.com/microsoft/finops-toolkit/releases/download/v{0}', variables('ftkVersion')), format('https://raw.githubusercontent.com/microsoft/finops-toolkit/{0}/src/open-data', variables('ftkBranch')))), '$$rawRetentionInDays$$', string(parameters('rawRetentionInDays')))]",
+ "scriptContent": "[replace(replace(replace(replace(variables('$fxv#7'), '$$adfPrincipalId$$', reference('dataFactory', '2018-06-01', 'full').identity.principalId), '$$adfTenantId$$', reference('dataFactory', '2018-06-01', 'full').identity.tenantId), '$$ftkOpenDataFolder$$', if(empty(variables('ftkBranch')), format('https://github.com/microsoft/finops-toolkit/releases/download/v{0}', variables('ftkVersion')), format('https://raw.githubusercontent.com/microsoft/finops-toolkit/{0}/src/open-data', variables('ftkBranch')))), '$$rawRetentionInDays$$', string(parameters('rawRetentionInDays')))]",
"continueOnErrors": "[parameters('continueOnErrors')]",
"forceUpdateTag": "[parameters('forceUpdateTag')]"
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'CommonFunctions')]",
- "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Ingestion')]"
+ "cluster::ingestionDb::commonScript",
+ "dataFactory",
+ "cluster::ingestionDb"
]
},
- {
+ "cluster::hubDb::commonScript": {
"type": "Microsoft.Kusto/clusters/databases/scripts",
"apiVersion": "2023-08-15",
"name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Hub', 'CommonFunctions')]",
"properties": {
- "scriptContent": "[variables('$fxv#3')]",
+ "scriptContent": "[variables('$fxv#8')]",
"continueOnErrors": "[parameters('continueOnErrors')]",
"forceUpdateTag": "[parameters('forceUpdateTag')]"
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Hub')]"
+ "cluster::hubDb"
]
},
- {
+ "cluster::hubDb::setupScript": {
"type": "Microsoft.Kusto/clusters/databases/scripts",
"apiVersion": "2023-08-15",
"name": "[format('{0}/{1}/{2}', parameters('clusterName'), 'Hub', 'SetupScript')]",
"properties": {
- "scriptContent": "[replace(replace(variables('$fxv#4'), '$$adfPrincipalId$$', reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.principalId), '$$adfTenantId$$', reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.tenantId)]",
+ "scriptContent": "[replace(replace(variables('$fxv#9'), '$$adfPrincipalId$$', reference('dataFactory', '2018-06-01', 'full').identity.principalId), '$$adfTenantId$$', reference('dataFactory', '2018-06-01', 'full').identity.tenantId)]",
"continueOnErrors": "[parameters('continueOnErrors')]",
"forceUpdateTag": "[parameters('forceUpdateTag')]"
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Hub', 'CommonFunctions')]",
- "[resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), 'Hub')]"
+ "cluster::hubDb::commonScript",
+ "dataFactory",
+ "cluster::hubDb"
]
},
- {
+ "cluster::adfClusterAdmin": {
"type": "Microsoft.Kusto/clusters/principalAssignments",
"apiVersion": "2023-08-15",
"name": "[format('{0}/{1}', parameters('clusterName'), 'adf-mi-cluster-admin')]",
"properties": {
"principalType": "App",
- "principalId": "[reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.principalId]",
- "tenantId": "[reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.tenantId]",
+ "principalId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]",
+ "tenantId": "[reference('dataFactory', '2018-06-01', 'full').identity.tenantId]",
"role": "AllDatabasesAdmin"
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]"
+ "cluster",
+ "dataFactory"
]
},
- {
+ "cluster::ingestionDb": {
"type": "Microsoft.Kusto/clusters/databases",
"apiVersion": "2023-08-15",
"name": "[format('{0}/{1}', parameters('clusterName'), 'Ingestion')]",
"location": "[parameters('location')]",
"kind": "ReadWrite",
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]"
+ "cluster"
]
},
- {
+ "cluster::hubDb": {
"type": "Microsoft.Kusto/clusters/databases",
"apiVersion": "2023-08-15",
"name": "[format('{0}/{1}', parameters('clusterName'), 'Hub')]",
"location": "[parameters('location')]",
"kind": "ReadWrite",
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]",
- "[resourceId('Microsoft.Kusto/clusters/databases/scripts', parameters('clusterName'), 'Ingestion', 'SetupScript')]"
+ "cluster",
+ "cluster::ingestionDb::setupScript"
]
},
- {
+ "dataFactory": {
+ "existing": true,
+ "type": "Microsoft.DataFactory/factories",
+ "apiVersion": "2018-06-01",
+ "name": "[parameters('dataFactoryName')]"
+ },
+ "blobPrivateDnsZone": {
+ "existing": true,
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.blob.{0}', environment().suffixes.storage)]"
+ },
+ "queuePrivateDnsZone": {
+ "existing": true,
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.queue.{0}', environment().suffixes.storage)]"
+ },
+ "tablePrivateDnsZone": {
+ "existing": true,
+ "type": "Microsoft.Network/privateDnsZones",
+ "apiVersion": "2024-06-01",
+ "name": "[format('privatelink.table.{0}', environment().suffixes.storage)]"
+ },
+ "storage": {
+ "existing": true,
+ "type": "Microsoft.Storage/storageAccounts",
+ "apiVersion": "2022-09-01",
+ "name": "[parameters('storageAccountName')]"
+ },
+ "cluster": {
"type": "Microsoft.Kusto/clusters",
"apiVersion": "2023-08-15",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Kusto/clusters'), parameters('tagsByResource')['Microsoft.Kusto/clusters'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Kusto/clusters'), createObject()))]",
"sku": {
"name": "[parameters('clusterSku')]",
"tier": "[if(startsWith(parameters('clusterSku'), 'Dev(No SLA)_'), 'Basic', 'Standard')]",
@@ -1896,40 +1984,51 @@
"type": "SystemAssigned"
},
"properties": {
+ "copy": [
+ {
+ "name": "trustedExternalTenants",
+ "count": "[length(parameters('clusterTrustedExternalTenants'))]",
+ "input": {
+ "value": "[parameters('clusterTrustedExternalTenants')[copyIndex('trustedExternalTenants')]]"
+ }
+ }
+ ],
"enableStreamingIngest": true,
"enableAutoStop": false,
"publicNetworkAccess": "[if(parameters('enablePublicAccess'), 'Enabled', 'Disabled')]"
}
},
- {
+ "clusterStorageAccess": {
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
"name": "[guid(parameters('clusterName'), subscription().id, 'Storage Blob Data Contributor')]",
"properties": {
"description": "Give \"Storage Blob Data Contributor\" to the cluster",
- "principalId": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15', 'full').identity.principalId]",
+ "principalId": "[reference('cluster', '2023-08-15', 'full').identity.principalId]",
"principalType": "ServicePrincipal",
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')]"
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]"
+ "cluster"
]
},
- {
+ "dataExplorerPrivateDnsZone": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2024-06-01",
"name": "[variables('dataExplorerPrivateDnsZoneName')]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones'), createObject()))]",
"properties": {}
},
- {
+ "dataExplorerPrivateDnsZoneLink": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2024-06-01",
"name": "[format('{0}/{1}', variables('dataExplorerPrivateDnsZoneName'), format('{0}-link', replace(variables('dataExplorerPrivateDnsZoneName'), '.', '-')))]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones/virtualNetworkLinks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
"properties": {
"virtualNetwork": {
"id": "[parameters('virtualNetworkId')]"
@@ -1937,15 +2036,16 @@
"registrationEnabled": false
},
"dependsOn": [
- "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]"
+ "dataExplorerPrivateDnsZone"
]
},
- {
+ "dataExplorerEndpoint": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2023-11-01",
"name": "[format('{0}-ep', parameters('clusterName'))]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), parameters('tagsByResource')['Microsoft.Network/privateEndpoints'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
"properties": {
"subnet": {
"id": "[parameters('privateEndpointSubnetId')]"
@@ -1963,10 +2063,11 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.Kusto/clusters', parameters('clusterName'))]"
+ "cluster"
]
},
- {
+ "dataExplorerPrivateDnsZoneGroup": {
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2023-11-01",
"name": "[format('{0}/{1}', format('{0}-ep', parameters('clusterName')), 'dataExplorer-endpoint-zone')]",
@@ -1999,11 +2100,11 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.Network/privateEndpoints', format('{0}-ep', parameters('clusterName')))]",
- "[resourceId('Microsoft.Network/privateDnsZones', variables('dataExplorerPrivateDnsZoneName'))]"
+ "dataExplorerEndpoint",
+ "dataExplorerPrivateDnsZone"
]
}
- ],
+ },
"outputs": {
"clusterId": {
"type": "string",
@@ -2017,7 +2118,7 @@
"metadata": {
"description": "The ID of the cluster system assigned managed identity."
},
- "value": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15', 'full').identity.principalId]"
+ "value": "[reference('cluster', '2023-08-15', 'full').identity.principalId]"
},
"clusterName": {
"type": "string",
@@ -2031,7 +2132,7 @@
"metadata": {
"description": "The URI of the cluster."
},
- "value": "[reference(resourceId('Microsoft.Kusto/clusters', parameters('clusterName')), '2023-08-15').uri]"
+ "value": "[reference('cluster').uri]"
},
"ingestionDbName": {
"type": "string",
@@ -2058,12 +2159,12 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]",
- "[resourceId('Microsoft.Resources/deployments', 'storage')]",
- "[resourceId('Microsoft.Resources/deployments', 'vnet')]"
+ "dataFactory",
+ "storage",
+ "vnet"
]
},
- {
+ "dataFactoryResources": {
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "dataFactoryResources",
@@ -2089,25 +2190,25 @@
"value": "[parameters('tagsByResource')]"
},
"storageAccountName": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.value]"
+ "value": "[reference('storage').outputs.name.value]"
},
"exportContainerName": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.exportContainer.value]"
+ "value": "[reference('storage').outputs.exportContainer.value]"
},
"configContainerName": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.configContainer.value]"
+ "value": "[reference('storage').outputs.configContainer.value]"
},
"ingestionContainerName": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.ingestionContainer.value]"
+ "value": "[reference('storage').outputs.ingestionContainer.value]"
},
- "dataExplorerName": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.clusterName.value))]",
- "dataExplorerPrincipalId": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.principalId.value))]",
- "dataExplorerIngestionDatabase": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.ingestionDbName.value))]",
- "dataExplorerIngestionCapacity": "[if(not(variables('deployDataExplorer')), createObject('value', 1), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.clusterIngestionCapacity.value))]",
- "dataExplorerUri": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.clusterUri.value))]",
- "dataExplorerId": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.clusterId.value))]",
+ "dataExplorerName": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.clusterName.value))]",
+ "dataExplorerPrincipalId": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.principalId.value))]",
+ "dataExplorerIngestionDatabase": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.ingestionDbName.value))]",
+ "dataExplorerIngestionCapacity": "[if(not(variables('deployDataExplorer')), createObject('value', 1), createObject('value', reference('dataExplorer').outputs.clusterIngestionCapacity.value))]",
+ "dataExplorerUri": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.clusterUri.value))]",
+ "dataExplorerId": "[if(not(variables('deployDataExplorer')), createObject('value', ''), createObject('value', reference('dataExplorer').outputs.clusterId.value))]",
"keyVaultName": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'keyVault'), '2022-09-01').outputs.name.value]"
+ "value": "[reference('keyVault').outputs.name.value]"
},
"remoteHubStorageUri": {
"value": "[parameters('remoteHubStorageUri')]"
@@ -2118,12 +2219,13 @@
},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "languageVersion": "2.0",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "5255016477364452066"
+ "version": "0.33.93.31351",
+ "templateHash": "12735875725202531386"
}
},
"functions": [
@@ -2297,7 +2399,7 @@
"$fxv#1": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n",
"$fxv#2": "# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n\r\nParam(\r\n [switch] $Stop\r\n)\r\n\r\n# Init outputs\r\n$DeploymentScriptOutputs = @{}\r\n\r\nif (-not $Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\n# Loop thru triggers\r\n$env:Triggers.Split('|') `\r\n| ForEach-Object {\r\n $trigger = $_\r\n if ($Stop)\r\n {\r\n Write-Output \"Stopping trigger $trigger...\"\r\n $triggerOutput = Stop-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force `\r\n -ErrorAction SilentlyContinue # Ignore errors, since the trigger may not exist\r\n }\r\n else\r\n {\r\n Write-Output \"Starting trigger $trigger...\"\r\n $triggerOutput = Start-AzDataFactoryV2Trigger `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -Name $trigger `\r\n -Force\r\n }\r\n if ($triggerOutput)\r\n {\r\n Write-Output \"done...\"\r\n }\r\n else\r\n {\r\n Write-Output \"failed...\"\r\n }\r\n $DeploymentScriptOutputs[$trigger] = $triggerOutput\r\n}\r\n\r\nif ($Stop)\r\n{\r\n Start-Sleep -Seconds 10\r\n}\r\n\r\nif (-not [string]::IsNullOrWhiteSpace($env:Pipelines))\r\n{\r\n $env:Pipelines.Split('|') `\r\n | ForEach-Object {\r\n Write-Output \"Running the init pipeline...\"\r\n Invoke-AzDataFactoryV2Pipeline `\r\n -ResourceGroupName $env:DataFactoryResourceGroup `\r\n -DataFactoryName $env:DataFactoryName `\r\n -PipelineName $_\r\n }\r\n}\r\n",
"focusSchemaVersion": "1.0",
- "ftkVersion": "0.7",
+ "ftkVersion": "0.8",
"exportApiVersion": "2023-07-01-preview",
"hubDataExplorerName": "hubDataExplorer",
"deployDataExplorer": "[not(empty(parameters('dataExplorerId')))]",
@@ -2342,15 +2444,33 @@
"18d7d88d-d35e-4fb5-a5c3-7773c20a72d9"
]
},
- "resources": [
- {
+ "resources": {
+ "dataFactory": {
+ "existing": true,
+ "type": "Microsoft.DataFactory/factories",
+ "apiVersion": "2018-06-01",
+ "name": "[parameters('dataFactoryName')]"
+ },
+ "storageAccount": {
+ "existing": true,
+ "type": "Microsoft.Storage/storageAccounts",
+ "apiVersion": "2022-09-01",
+ "name": "[parameters('storageAccountName')]"
+ },
+ "keyVault": {
+ "existing": true,
+ "type": "Microsoft.KeyVault/vaults",
+ "apiVersion": "2023-02-01",
+ "name": "[parameters('keyVaultName')]"
+ },
+ "managedVirtualNetwork": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.DataFactory/factories/managedVirtualNetworks",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('managedVnetName'))]",
"properties": {}
},
- {
+ "managedIntegrationRuntime": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.DataFactory/factories/integrationRuntimes",
"apiVersion": "2018-06-01",
@@ -2384,10 +2504,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks', parameters('dataFactoryName'), variables('managedVnetName'))]"
+ "managedVirtualNetwork"
]
},
- {
+ "storageManagedPrivateEndpoint": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints",
"apiVersion": "2018-06-01",
@@ -2397,14 +2517,15 @@
"groupId": "dfs",
"privateLinkResourceId": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
"fqdns": [
- "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2022-09-01').primaryEndpoints.dfs]"
+ "[reference('storageAccount').primaryEndpoints.dfs]"
]
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks', parameters('dataFactoryName'), variables('managedVnetName'))]"
+ "managedVirtualNetwork",
+ "storageAccount"
]
},
- {
+ "keyVaultManagedPrivateEndpoint": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints",
"apiVersion": "2018-06-01",
@@ -2414,14 +2535,15 @@
"groupId": "vault",
"privateLinkResourceId": "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]",
"fqdns": [
- "[reference(resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName')), '2023-02-01').vaultUri]"
+ "[reference('keyVault').vaultUri]"
]
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks', parameters('dataFactoryName'), variables('managedVnetName'))]"
+ "keyVault",
+ "managedVirtualNetwork"
]
},
- {
+ "dataExplorerManagedPrivateEndpoint": {
"condition": "[and(variables('deployDataExplorer'), not(parameters('enablePublicAccess')))]",
"type": "Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints",
"apiVersion": "2018-06-01",
@@ -2435,17 +2557,17 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks', parameters('dataFactoryName'), variables('managedVnetName'))]"
+ "managedVirtualNetwork"
]
},
- {
+ "triggerManagerIdentity": {
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2023-01-31",
"name": "[format('{0}_triggerManager', parameters('dataFactoryName'))]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), parameters('tagsByResource')['Microsoft.ManagedIdentity/userAssignedIdentities'], createObject()))]"
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.ManagedIdentity/userAssignedIdentities'), createObject()))]"
},
- {
+ "triggerManagerRoleAssignments": {
"copy": {
"name": "triggerManagerRoleAssignments",
"count": "[length(variables('autoStartRbacRoles'))]"
@@ -2456,14 +2578,14 @@
"name": "[guid(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), variables('autoStartRbacRoles')[copyIndex()], resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName'))))]",
"properties": {
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', variables('autoStartRbacRoles')[copyIndex()])]",
- "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName'))), '2023-01-31').principalId]",
+ "principalId": "[reference('triggerManagerIdentity').principalId]",
"principalType": "ServicePrincipal"
},
"dependsOn": [
- "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName')))]"
+ "triggerManagerIdentity"
]
},
- {
+ "factoryIdentityStorageRoleAssignments": {
"copy": {
"name": "factoryIdentityStorageRoleAssignments",
"count": "[length(variables('storageRbacRoles'))]"
@@ -2474,11 +2596,14 @@
"name": "[guid(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), variables('storageRbacRoles')[copyIndex()], resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')))]",
"properties": {
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', variables('storageRbacRoles')[copyIndex()])]",
- "principalId": "[reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.principalId]",
+ "principalId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]",
"principalType": "ServicePrincipal"
- }
+ },
+ "dependsOn": [
+ "dataFactory"
+ ]
},
- {
+ "deleteOldResources": {
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "[format('{0}_deleteOldResources', parameters('dataFactoryName'))]",
@@ -2490,7 +2615,7 @@
}
},
"kind": "AzurePowerShell",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), parameters('tagsByResource')['Microsoft.Resources/deploymentScripts'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]",
"properties": {
"azPowerShellVersion": "8.0",
"retentionInterval": "PT1H",
@@ -2512,11 +2637,11 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName')))]",
+ "triggerManagerIdentity",
"triggerManagerRoleAssignments"
]
},
- {
+ "stopTriggers": {
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "[format('{0}_stopTriggers', parameters('dataFactoryName'))]",
@@ -2555,11 +2680,11 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName')))]",
+ "triggerManagerIdentity",
"triggerManagerRoleAssignments"
]
},
- {
+ "linkedService_keyVault": {
"type": "Microsoft.DataFactory/factories/linkedservices",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), parameters('keyVaultName'))]",
@@ -2573,10 +2698,10 @@
"connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/integrationRuntimes', parameters('dataFactoryName'), 'ManagedIntegrationRuntime')]"
+ "managedIntegrationRuntime"
]
},
- {
+ "linkedService_storageAccount": {
"type": "Microsoft.DataFactory/factories/linkedservices",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), parameters('storageAccountName'))]",
@@ -2590,10 +2715,10 @@
"connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/integrationRuntimes', parameters('dataFactoryName'), 'ManagedIntegrationRuntime')]"
+ "managedIntegrationRuntime"
]
},
- {
+ "linkedService_dataExplorer": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.DataFactory/factories/linkedservices",
"apiVersion": "2018-06-01",
@@ -2609,16 +2734,17 @@
"typeProperties": {
"endpoint": "[parameters('dataExplorerUri')]",
"database": "@{linkedService().database}",
- "tenant": "[reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.tenantId]",
- "servicePrincipalId": "[reference(resourceId('Microsoft.DataFactory/factories', parameters('dataFactoryName')), '2018-06-01', 'full').identity.principalId]"
+ "tenant": "[reference('dataFactory', '2018-06-01', 'full').identity.tenantId]",
+ "servicePrincipalId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]"
},
"connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/integrationRuntimes', parameters('dataFactoryName'), 'ManagedIntegrationRuntime')]"
+ "dataFactory",
+ "managedIntegrationRuntime"
]
},
- {
+ "linkedService_remoteHubStorage": {
"condition": "[not(empty(parameters('remoteHubStorageUri')))]",
"type": "Microsoft.DataFactory/factories/linkedservices",
"apiVersion": "2018-06-01",
@@ -2641,11 +2767,11 @@
"connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('keyVaultName'))]",
- "[resourceId('Microsoft.DataFactory/factories/integrationRuntimes', parameters('dataFactoryName'), 'ManagedIntegrationRuntime')]"
+ "linkedService_keyVault",
+ "managedIntegrationRuntime"
]
},
- {
+ "linkedService_ftkRepo": {
"type": "Microsoft.DataFactory/factories/linkedservices",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), 'ftkRepo')]",
@@ -2665,10 +2791,10 @@
"connectVia": "[if(parameters('enablePublicAccess'), null(), createObject('referenceName', 'ManagedIntegrationRuntime', 'type', 'IntegrationRuntimeReference'))]"
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/integrationRuntimes', parameters('dataFactoryName'), 'ManagedIntegrationRuntime')]"
+ "managedIntegrationRuntime"
]
},
- {
+ "dataset_config": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
@@ -2693,10 +2819,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_manifest": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), 'manifest')]",
@@ -2721,10 +2847,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_msexports": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('safeExportContainerName'))]",
@@ -2757,10 +2883,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_msexports_gzip": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_gzip', variables('safeExportContainerName')))]",
@@ -2794,10 +2920,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_msexports_parquet": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_parquet', variables('safeExportContainerName')))]",
@@ -2826,10 +2952,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_ingestion": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('safeIngestionContainerName'))]",
@@ -2858,11 +2984,11 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), 'remoteHubStorage')]",
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_remoteHubStorage",
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_ingestion_files": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_files', variables('safeIngestionContainerName')))]",
@@ -2891,11 +3017,11 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), 'remoteHubStorage')]",
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), parameters('storageAccountName'))]"
+ "linkedService_remoteHubStorage",
+ "linkedService_storageAccount"
]
},
- {
+ "dataset_dataExplorer": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
@@ -2926,10 +3052,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), variables('hubDataExplorerName'))]"
+ "linkedService_dataExplorer"
]
},
- {
+ "dataset_ftkReleaseFile": {
"type": "Microsoft.DataFactory/factories/datasets",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), 'ftkReleaseFile')]",
@@ -2965,10 +3091,10 @@
"schema": []
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), 'ftkRepo')]"
+ "linkedService_ftkRepo"
]
},
- {
+ "trigger_ExportManifestAdded": {
"type": "Microsoft.DataFactory/factories/triggers",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('exportManifestAddedTriggerName'))]",
@@ -2998,11 +3124,11 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_ExecuteETL', variables('safeExportContainerName')))]",
- "[resourceId('Microsoft.Resources/deploymentScripts', format('{0}_stopTriggers', parameters('dataFactoryName')))]"
+ "pipeline_ExecuteExportsETL",
+ "stopTriggers"
]
},
- {
+ "trigger_IngestionManifestAdded": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.DataFactory/factories/triggers",
"apiVersion": "2018-06-01",
@@ -3032,11 +3158,11 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_ExecuteETL', variables('safeIngestionContainerName')))]",
- "[resourceId('Microsoft.Resources/deploymentScripts', format('{0}_stopTriggers', parameters('dataFactoryName')))]"
+ "pipeline_ExecuteIngestionETL",
+ "stopTriggers"
]
},
- {
+ "trigger_SettingsUpdated": {
"type": "Microsoft.DataFactory/factories/triggers",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('updateConfigTriggerName'))]",
@@ -3062,11 +3188,11 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_ConfigureExports', variables('safeConfigContainerName')))]",
- "[resourceId('Microsoft.Resources/deploymentScripts', format('{0}_stopTriggers', parameters('dataFactoryName')))]"
+ "pipeline_ConfigureExports",
+ "stopTriggers"
]
},
- {
+ "trigger_DailySchedule": {
"type": "Microsoft.DataFactory/factories/triggers",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('dailyTriggerName'))]",
@@ -3088,17 +3214,17 @@
"frequency": "Hour",
"interval": 24,
"startTime": "2023-01-01T01:01:00",
- "timeZone": "[reference(resourceId('Microsoft.Resources/deployments', 'azuretimezones'), '2022-09-01').outputs.Timezone.value]"
+ "timeZone": "[reference('azuretimezones').outputs.Timezone.value]"
}
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'azuretimezones')]",
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_StartExportProcess', variables('safeConfigContainerName')))]",
- "[resourceId('Microsoft.Resources/deploymentScripts', format('{0}_stopTriggers', parameters('dataFactoryName')))]"
+ "azuretimezones",
+ "pipeline_StartExportProcess",
+ "stopTriggers"
]
},
- {
+ "trigger_MonthlySchedule": {
"type": "Microsoft.DataFactory/factories/triggers",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), variables('monthlyTriggerName'))]",
@@ -3120,7 +3246,7 @@
"frequency": "Month",
"interval": 1,
"startTime": "2023-01-05T01:11:00",
- "timeZone": "[reference(resourceId('Microsoft.Resources/deployments', 'azuretimezones'), '2022-09-01').outputs.Timezone.value]",
+ "timeZone": "[reference('azuretimezones').outputs.Timezone.value]",
"schedule": {
"monthDays": [
5,
@@ -3131,12 +3257,12 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'azuretimezones')]",
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_StartExportProcess', variables('safeConfigContainerName')))]",
- "[resourceId('Microsoft.Resources/deploymentScripts', format('{0}_stopTriggers', parameters('dataFactoryName')))]"
+ "azuretimezones",
+ "pipeline_StartExportProcess",
+ "stopTriggers"
]
},
- {
+ "pipeline_InitializeHub": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
@@ -3607,14 +3733,14 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), variables('hubDataExplorerName'))]"
+ "dataset_config",
+ "linkedService_dataExplorer"
],
"metadata": {
"description": "Initializes the hub instance based on the configuration settings."
}
},
- {
+ "pipeline_StartBackfillProcess": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_StartBackfillProcess', variables('safeConfigContainerName')))]",
@@ -3872,14 +3998,14 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_RunBackfillJob', variables('safeConfigContainerName')))]"
+ "dataset_config",
+ "pipeline_RunBackfillJob"
],
"metadata": {
"description": "Runs the backfill job for each month based on retention settings."
}
},
- {
+ "pipeline_RunBackfillJob": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_RunBackfillJob', variables('safeConfigContainerName')))]",
@@ -4121,13 +4247,13 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]"
+ "dataset_config"
],
"metadata": {
"description": "Creates and triggers exports for all defined scopes for the specified date range."
}
},
- {
+ "pipeline_StartExportProcess": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_StartExportProcess', variables('safeConfigContainerName')))]",
@@ -4364,14 +4490,14 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_RunExportJobs', variables('safeConfigContainerName')))]"
+ "dataset_config",
+ "pipeline_RunExportJobs"
],
"metadata": {
"description": "Gets a list of all Cost Management exports configured for this hub based on the scopes defined in settings.json, then runs each export using the config_RunExportJobs pipeline."
}
},
- {
+ "pipeline_RunExportJobs": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_RunExportJobs', variables('safeConfigContainerName')))]",
@@ -4413,15 +4539,16 @@
},
"userProperties": [],
"typeProperties": {
+ "method": "POST",
"url": {
"value": "[format('@{{replace(toLower(concat(variables(''resourceManagementUri''),item().id)), ''com//'', ''com/'')}}/run?api-version={0}', variables('exportApiVersion'))]",
"type": "Expression"
},
- "method": "POST",
"headers": {
"x-ms-command-name": "[format('FinOpsToolkit.Hubs.config_RunExportJobs@{0}', variables('ftkVersion'))]",
"ClientType": "[format('FinOpsToolkit.Hubs@{0}', variables('ftkVersion'))]"
},
+ "body": "{}",
"authentication": {
"type": "MSI",
"resource": {
@@ -4460,13 +4587,13 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]"
+ "dataset_config"
],
"metadata": {
"description": "Runs the specified Cost Management exports."
}
},
- {
+ "pipeline_ConfigureExports": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ConfigureExports', variables('safeConfigContainerName')))]",
@@ -4764,13 +4891,13 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]"
+ "dataset_config"
],
"metadata": {
"description": "Creates Cost Management exports for all scopes."
}
},
- {
+ "pipeline_ExecuteExportsETL": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ExecuteETL', variables('safeExportContainerName')))]",
@@ -5600,18 +5727,18 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), 'manifest')]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeExportContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), format('{0}_gzip', variables('safeExportContainerName')))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), format('{0}_parquet', variables('safeExportContainerName')))]",
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_ETL_{1}', variables('safeExportContainerName'), variables('safeIngestionContainerName')))]"
+ "dataset_config",
+ "dataset_manifest",
+ "dataset_msexports",
+ "dataset_msexports_gzip",
+ "dataset_msexports_parquet",
+ "pipeline_ToIngestion"
],
"metadata": {
"description": "Queues the msexports_ETL_ingestion pipeline."
}
},
- {
+ "pipeline_ToIngestion": {
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
"name": "[format('{0}/{1}', parameters('dataFactoryName'), format('{0}_ETL_{1}', variables('safeExportContainerName'), variables('safeIngestionContainerName')))]",
@@ -6236,18 +6363,18 @@
"annotations": []
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeIngestionContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), format('{0}_files', variables('safeIngestionContainerName')))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeExportContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), format('{0}_gzip', variables('safeExportContainerName')))]",
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), format('{0}_parquet', variables('safeExportContainerName')))]"
+ "dataset_config",
+ "dataset_ingestion",
+ "dataset_ingestion_files",
+ "dataset_msexports",
+ "dataset_msexports_gzip",
+ "dataset_msexports_parquet"
],
"metadata": {
"description": "Transforms CSV data to a standard schema and converts to Parquet."
}
},
- {
+ "pipeline_ToDataExplorer": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
@@ -6684,14 +6811,14 @@
"annotations": []
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), variables('safeConfigContainerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/linkedservices', parameters('dataFactoryName'), variables('hubDataExplorerName'))]"
+ "dataset_config",
+ "linkedService_dataExplorer"
],
"metadata": {
"description": "Ingests parquet data into an Azure Data Explorer cluster."
}
},
- {
+ "pipeline_ExecuteIngestionETL": {
"condition": "[variables('deployDataExplorer')]",
"type": "Microsoft.DataFactory/factories/pipelines",
"apiVersion": "2018-06-01",
@@ -6943,19 +7070,19 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/datasets', parameters('dataFactoryName'), format('{0}_files', variables('safeIngestionContainerName')))]",
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_ETL_dataExplorer', variables('safeIngestionContainerName')))]"
+ "dataset_ingestion_files",
+ "pipeline_ToDataExplorer"
],
"metadata": {
"description": "Queues the ingestion_ETL_dataExplorer pipeline to account for Data Factory pipeline trigger limits."
}
},
- {
+ "startTriggers": {
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "[format('{0}_startTriggers', parameters('dataFactoryName'))]",
"location": "[if(startsWith(parameters('location'), 'china'), 'chinaeast2', parameters('location'))]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), parameters('tagsByResource')['Microsoft.Resources/deploymentScripts'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Resources/deploymentScripts'), createObject()))]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
@@ -6992,17 +7119,17 @@
]
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/pipelines', parameters('dataFactoryName'), format('{0}_InitializeHub', variables('safeConfigContainerName')))]",
- "[resourceId('Microsoft.DataFactory/factories/triggers', parameters('dataFactoryName'), variables('dailyTriggerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/triggers', parameters('dataFactoryName'), variables('exportManifestAddedTriggerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/triggers', parameters('dataFactoryName'), variables('ingestionManifestAddedTriggerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/triggers', parameters('dataFactoryName'), variables('monthlyTriggerName'))]",
- "[resourceId('Microsoft.DataFactory/factories/triggers', parameters('dataFactoryName'), variables('updateConfigTriggerName'))]",
- "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', format('{0}_triggerManager', parameters('dataFactoryName')))]",
+ "pipeline_InitializeHub",
+ "trigger_DailySchedule",
+ "trigger_ExportManifestAdded",
+ "trigger_IngestionManifestAdded",
+ "trigger_MonthlySchedule",
+ "trigger_SettingsUpdated",
+ "triggerManagerIdentity",
"triggerManagerRoleAssignments"
]
},
- {
+ "azuretimezones": {
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "azuretimezones",
@@ -7022,8 +7149,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "8239930466136045181"
+ "version": "0.33.93.31351",
+ "templateHash": "246200639922867735"
}
},
"parameters": {
@@ -7037,9 +7164,11 @@
"timezoneobject": {
"type": "object",
"defaultValue": {
- "australiaeast": "Australian Eastern Standard Time",
- "australiasoutheast": "Australian Eastern Standard Time",
- "brazilsouth": "Brasil Standard Time",
+ "australiaeast": "AUS Eastern Standard Time",
+ "australiacentral": "AUS Eastern Standard Time",
+ "australiacentral2": "AUS Eastern Standard Time",
+ "australiasoutheast": "AUS Eastern Standard Time",
+ "brazilsouth": "E. South America Standard Time",
"canadacentral": "Central Standard Time",
"canadaeast": "Eastern Standard Time",
"centralindia": "India Standard Time",
@@ -7047,26 +7176,26 @@
"eastasia": "China Standard Time",
"eastus": "Eastern Standard Time",
"eastus2": "Eastern Standard Time",
- "francecentral": "Central European Time",
- "germanynorth": "Central European Time",
- "germanywestcentral": "Central European Time",
+ "francecentral": "W. Europe Standard Time",
+ "germanynorth": "W. Europe Standard Time",
+ "germanywestcentral": "W. Europe Standard Time",
"japaneast": "Japan Standard Time",
"japanwest": "Japan Standard Time",
"koreacentral": "Korea Standard Time",
"koreasouth": "Korea Standard Time",
"northcentralus": "Central Standard Time",
- "northeurope": "Central European Time",
- "norwayeast": "Central European Time",
- "norwaywest": "Central European Time",
+ "northeurope": "GMT Standard Time",
+ "norwayeast": "W. Europe Standard Time",
+ "norwaywest": "W. Europe Standard Time",
"southcentralus": "Central Standard Time",
"southindia": "India Standard Time",
"southeastasia": "Singapore Standard Time",
- "switzerlandnorth": "Central European Time",
- "switzerlandwest": "Central European Time",
- "uksouth": "Greenwich Mean Time",
- "ukwest": "Greenwich Mean Time",
+ "switzerlandnorth": "W. Europe Standard Time",
+ "switzerlandwest": "W. Europe Standard Time",
+ "uksouth": "GMT Standard Time",
+ "ukwest": "GMT Standard Time",
"westcentralus": "Central Standard Time",
- "westeurope": "Central European Time",
+ "westeurope": "W. Europe Standard Time",
"westindia": "India Standard Time",
"westus": "Pacific Standard Time",
"westus2": "Pacific Standard Time"
@@ -7115,7 +7244,7 @@
}
}
},
- {
+ "getStoragePrivateEndpointConnections": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -7136,8 +7265,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "7643328362319067965"
+ "version": "0.33.93.31351",
+ "templateHash": "6596647335910944068"
}
},
"parameters": {
@@ -7183,10 +7312,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints', parameters('dataFactoryName'), variables('managedVnetName'), parameters('storageAccountName'))]"
+ "storageManagedPrivateEndpoint"
]
},
- {
+ "approveStoragePrivateEndpointConnections": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -7201,7 +7330,7 @@
"value": "[parameters('storageAccountName')]"
},
"privateEndpointConnections": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'GetStoragePrivateEndpointConnections'), '2022-09-01').outputs.privateEndpointConnections.value]"
+ "value": "[reference('getStoragePrivateEndpointConnections').outputs.privateEndpointConnections.value]"
}
},
"template": {
@@ -7210,8 +7339,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "7643328362319067965"
+ "version": "0.33.93.31351",
+ "templateHash": "6596647335910944068"
}
},
"parameters": {
@@ -7257,10 +7386,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'GetStoragePrivateEndpointConnections')]"
+ "getStoragePrivateEndpointConnections"
]
},
- {
+ "getKeyVaultPrivateEndpointConnections": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -7281,8 +7410,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "16000160238296855001"
+ "version": "0.33.93.31351",
+ "templateHash": "1305728532573520518"
}
},
"parameters": {
@@ -7327,10 +7456,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints', parameters('dataFactoryName'), variables('managedVnetName'), parameters('keyVaultName'))]"
+ "keyVaultManagedPrivateEndpoint"
]
},
- {
+ "approveKeyVaultPrivateEndpointConnections": {
"condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -7345,7 +7474,7 @@
"value": "[parameters('keyVaultName')]"
},
"privateEndpointConnections": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'GetKeyVaultPrivateEndpointConnections'), '2022-09-01').outputs.privateEndpointConnections.value]"
+ "value": "[reference('getKeyVaultPrivateEndpointConnections').outputs.privateEndpointConnections.value]"
}
},
"template": {
@@ -7354,8 +7483,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "16000160238296855001"
+ "version": "0.33.93.31351",
+ "templateHash": "1305728532573520518"
}
},
"parameters": {
@@ -7400,10 +7529,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'GetKeyVaultPrivateEndpointConnections')]"
+ "getKeyVaultPrivateEndpointConnections"
]
},
- {
+ "getDataExplorerPrivateEndpointConnections": {
"condition": "[and(variables('deployDataExplorer'), not(parameters('enablePublicAccess')))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -7424,8 +7553,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "11613917961554262427"
+ "version": "0.33.93.31351",
+ "templateHash": "12156003319680015068"
}
},
"parameters": {
@@ -7470,10 +7599,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories/managedVirtualNetworks/managedPrivateEndpoints', parameters('dataFactoryName'), variables('managedVnetName'), variables('hubDataExplorerName'))]"
+ "dataExplorerManagedPrivateEndpoint"
]
},
- {
+ "approveDataExplorerPrivateEndpointConnections": {
"condition": "[and(variables('deployDataExplorer'), not(parameters('enablePublicAccess')))]",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
@@ -7488,7 +7617,7 @@
"value": "[parameters('dataExplorerName')]"
},
"privateEndpointConnections": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'GetDataExplorerPrivateEndpointConnections'), '2022-09-01').outputs.privateEndpointConnections.value]"
+ "value": "[reference('getDataExplorerPrivateEndpointConnections').outputs.privateEndpointConnections.value]"
}
},
"template": {
@@ -7497,8 +7626,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "11613917961554262427"
+ "version": "0.33.93.31351",
+ "templateHash": "12156003319680015068"
}
},
"parameters": {
@@ -7543,10 +7672,10 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'GetDataExplorerPrivateEndpointConnections')]"
+ "getDataExplorerPrivateEndpointConnections"
]
}
- ],
+ },
"outputs": {
"resourceId": {
"type": "string",
@@ -7566,13 +7695,13 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.Resources/deployments', 'dataExplorer')]",
- "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]",
- "[resourceId('Microsoft.Resources/deployments', 'keyVault')]",
- "[resourceId('Microsoft.Resources/deployments', 'storage')]"
+ "dataExplorer",
+ "dataFactory",
+ "keyVault",
+ "storage"
]
},
- {
+ "keyVault": {
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-01",
"name": "keyVault",
@@ -7600,16 +7729,15 @@
"storageAccountKey": {
"value": "[parameters('remoteHubStorageKey')]"
},
- "virtualNetworkId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.vNetId.value]"
- },
- "privateEndpointSubnetId": {
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'vnet'), '2022-09-01').outputs.finopsHubSubnetId.value]"
+ "enablePublicAccess": {
+ "value": "[parameters('enablePublicAccess')]"
},
+ "virtualNetworkId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.vNetId.value))]",
+ "privateEndpointSubnetId": "[if(parameters('enablePublicAccess'), createObject('value', ''), createObject('value', reference('vnet').outputs.finopsHubSubnetId.value))]",
"accessPolicies": {
"value": [
{
- "objectId": "[reference(resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName')), '2018-06-01', 'full').identity.principalId]",
+ "objectId": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]",
"tenantId": "[subscription().tenantId]",
"permissions": {
"secrets": [
@@ -7626,8 +7754,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "1467534751337746235"
+ "version": "0.33.93.31351",
+ "templateHash": "1357795720924997394"
}
},
"parameters": {
@@ -7699,6 +7827,12 @@
"metadata": {
"description": "Required. Resource ID of the subnet for private endpoints."
}
+ },
+ "enablePublicAccess": {
+ "type": "bool",
+ "metadata": {
+ "description": "Optional. Enable public access to the data lake. Default: false."
+ }
}
},
"variables": {
@@ -7707,10 +7841,10 @@
"name": "formattedAccessPolicies",
"count": "[length(parameters('accessPolicies'))]",
"input": {
- "applicationId": "[if(contains(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'applicationId'), parameters('accessPolicies')[copyIndex('formattedAccessPolicies')].applicationId, '')]",
- "objectId": "[if(contains(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'objectId'), parameters('accessPolicies')[copyIndex('formattedAccessPolicies')].objectId, '')]",
+ "applicationId": "[coalesce(tryGet(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'applicationId'), '')]",
+ "objectId": "[coalesce(tryGet(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'objectId'), '')]",
"permissions": "[parameters('accessPolicies')[copyIndex('formattedAccessPolicies')].permissions]",
- "tenantId": "[if(contains(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'tenantId'), parameters('accessPolicies')[copyIndex('formattedAccessPolicies')].tenantId, tenant().tenantId)]"
+ "tenantId": "[coalesce(tryGet(parameters('accessPolicies')[copyIndex('formattedAccessPolicies')], 'tenantId'), tenant().tenantId)]"
}
}
],
@@ -7726,7 +7860,7 @@
"apiVersion": "2023-02-01",
"name": "[variables('keyVaultName')]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.KeyVault/vaults'), parameters('tagsByResource')['Microsoft.KeyVault/vaults'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.KeyVault/vaults'), createObject()))]",
"properties": {
"enabledForDeployment": true,
"enabledForTemplateDeployment": true,
@@ -7743,7 +7877,7 @@
},
"networkAcls": {
"bypass": "AzureServices",
- "defaultAction": "Deny"
+ "defaultAction": "[if(parameters('enablePublicAccess'), 'Allow', 'Deny')]"
}
}
},
@@ -7777,19 +7911,21 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones",
"apiVersion": "2024-06-01",
"name": "[variables('keyVaultPrivateDnsZoneName')]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.KeyVault/privateDnsZones'), parameters('tagsByResource')['Microsoft.KeyVault/privateDnsZones'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.KeyVault/privateDnsZones'), createObject()))]",
"properties": {}
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
"apiVersion": "2024-06-01",
"name": "[format('{0}/{1}', variables('keyVaultPrivateDnsZoneName'), format('{0}-link', replace(variables('keyVaultPrivateDnsZoneName'), '.', '-')))]",
"location": "global",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), parameters('tagsByResource')['Microsoft.Network/privateDnsZones/virtualNetworkLinks'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateDnsZones/virtualNetworkLinks'), createObject()))]",
"properties": {
"virtualNetwork": {
"id": "[parameters('virtualNetworkId')]"
@@ -7801,11 +7937,12 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2023-11-01",
"name": "[format('{0}-ep', variables('keyVaultName'))]",
"location": "[parameters('location')]",
- "tags": "[union(parameters('tags'), if(contains(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), parameters('tagsByResource')['Microsoft.Network/privateEndpoints'], createObject()))]",
+ "tags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Network/privateEndpoints'), createObject()))]",
"properties": {
"subnet": {
"id": "[parameters('privateEndpointSubnetId')]"
@@ -7827,6 +7964,7 @@
]
},
{
+ "condition": "[not(parameters('enablePublicAccess'))]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2023-11-01",
"name": "[format('{0}/{1}', format('{0}-ep', variables('keyVaultName')), 'keyvault-endpoint-zone')]",
@@ -7872,11 +8010,11 @@
}
},
"dependsOn": [
- "[resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName'))]",
- "[resourceId('Microsoft.Resources/deployments', 'vnet')]"
+ "dataFactory",
+ "vnet"
]
}
- ],
+ },
"outputs": {
"name": {
"type": "string",
@@ -7892,7 +8030,7 @@
},
"value": "[parameters('location')]"
},
- "dataFactorytName": {
+ "dataFactoryName": {
"type": "string",
"metadata": {
"description": "Name of the Data Factory."
@@ -7904,56 +8042,56 @@
"metadata": {
"description": "Resource ID of the storage account created for the hub instance. This must be used when creating the Cost Management export."
},
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.resourceId.value]"
+ "value": "[reference('storage').outputs.resourceId.value]"
},
"storageAccountName": {
"type": "string",
"metadata": {
"description": "Name of the storage account created for the hub instance. This must be used when connecting FinOps toolkit Power BI reports to your data."
},
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.value]"
+ "value": "[reference('storage').outputs.name.value]"
},
"storageUrlForPowerBI": {
"type": "string",
"metadata": {
"description": "URL to use when connecting custom Power BI reports to your data."
},
- "value": "[format('https://{0}.dfs.{1}/{2}', reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.name.value, environment().suffixes.storage, reference(resourceId('Microsoft.Resources/deployments', 'storage'), '2022-09-01').outputs.ingestionContainer.value)]"
+ "value": "[format('https://{0}.dfs.{1}/{2}', reference('storage').outputs.name.value, environment().suffixes.storage, reference('storage').outputs.ingestionContainer.value)]"
},
"clusterId": {
"type": "string",
"metadata": {
"description": "The resource ID of the Data Explorer cluster."
},
- "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.clusterId.value)]"
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.clusterId.value)]"
},
"clusterUri": {
"type": "string",
"metadata": {
"description": "The URI of the Data Explorer cluster."
},
- "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.clusterUri.value)]"
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.clusterUri.value)]"
},
"ingestionDbName": {
"type": "string",
"metadata": {
"description": "The name of the Data Explorer database used for ingesting data."
},
- "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.ingestionDbName.value)]"
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.ingestionDbName.value)]"
},
"hubDbName": {
"type": "string",
"metadata": {
"description": "The name of the Data Explorer database used for querying data."
},
- "value": "[if(not(variables('deployDataExplorer')), '', reference(resourceId('Microsoft.Resources/deployments', 'dataExplorer'), '2022-09-01').outputs.hubDbName.value)]"
+ "value": "[if(not(variables('deployDataExplorer')), '', reference('dataExplorer').outputs.hubDbName.value)]"
},
"managedIdentityId": {
"type": "string",
"metadata": {
"description": "Object ID of the Data Factory managed identity. This will be needed when configuring managed exports."
},
- "value": "[reference(resourceId('Microsoft.DataFactory/factories', variables('dataFactoryName')), '2018-06-01', 'full').identity.principalId]"
+ "value": "[reference('dataFactory', '2018-06-01', 'full').identity.principalId]"
},
"managedIdentityTenantId": {
"type": "string",
@@ -7982,12 +8120,12 @@
},
"value": "[parameters('location')]"
},
- "dataFactorytName": {
+ "dataFactoryName": {
"type": "string",
"metadata": {
"description": "Name of the Data Factory."
},
- "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.dataFactorytName.value]"
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', 'hub'), '2022-09-01').outputs.dataFactoryName.value]"
},
"storageAccountId": {
"type": "string",
diff --git a/docs/deploy/finops-workbooks-0.8.json b/docs/deploy/finops-workbooks-0.8.json
new file mode 100644
index 000000000..a55d7e08f
--- /dev/null
+++ b/docs/deploy/finops-workbooks-0.8.json
@@ -0,0 +1,20933 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "12338140091055370020"
+ }
+ },
+ "parameters": {
+ "displayNamePrefix": {
+ "type": "string",
+ "defaultValue": "FinOps",
+ "metadata": {
+ "description": "Optional. Display name prefix to use for all workbooks. Default: \"FinOps\"."
+ }
+ },
+ "includeOptimization": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Indicates whether to deploy the optimization workbook. Default: true."
+ }
+ },
+ "includeGovernance": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Indicates whether to deploy the governance workbook. Default: true."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Location of the resources. Default: Same as deployment. See https://aka.ms/azureregions."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags for all resources."
+ }
+ },
+ "tagsByResource": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags to apply to resources based on their resource type. Resource type specific tags will be merged with tags for all resources."
+ }
+ },
+ "enableDefaultTelemetry": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases."
+ }
+ }
+ },
+ "variables": {
+ "telemetryId": "00f120b5-2007-6120-0000-a7730126b006",
+ "finOpsToolkitVersion": "0.8",
+ "resourceTags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Insights/workbooks'), createObject()), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', 'FinOps workbooks'))]"
+ },
+ "resources": [
+ {
+ "condition": "[parameters('enableDefaultTelemetry')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]",
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "FinOps toolkit",
+ "version": "[variables('finOpsToolkitVersion')]"
+ }
+ },
+ "resources": []
+ }
+ }
+ },
+ {
+ "condition": "[parameters('includeOptimization')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('{0}-Optimization', parameters('displayNamePrefix'))]",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "displayName": {
+ "value": "[format('{0} - Optimization', parameters('displayNamePrefix'))]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "enableDefaultTelemetry": {
+ "value": false
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "10544991197071991923"
+ }
+ },
+ "parameters": {
+ "displayName": {
+ "type": "string",
+ "defaultValue": "Cost optimization",
+ "metadata": {
+ "description": "Optional. Display name for the workbook used in the Gallery. Must be unique in the resource group."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Location of the resources. Default: Same as deployment. See https://aka.ms/azureregions."
+ }
+ },
+ "description": {
+ "type": "string",
+ "defaultValue": "Reports to help you optimize your cost.",
+ "metadata": {
+ "description": "Optional. Workbook description."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags for all resources."
+ }
+ },
+ "enableDefaultTelemetry": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": {
+ "version": "Notebook/1.0",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "ca40468d-4518-43bf-ac6e-0a11d7331e12",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Overview",
+ "subTarget": "Welcome",
+ "style": "link"
+ },
+ {
+ "id": "f280fc2a-f42a-42a4-ad4b-be37ab3e8b48",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Rate optimization",
+ "subTarget": "RateOptimization",
+ "style": "link"
+ },
+ {
+ "id": "26b3c7ef-1a00-4a3f-a773-677f00db9343",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Usage optimization",
+ "subTarget": "UsageOptimization",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - MainTabs"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "28fdc6e9-2946-4016-8e75-b812ff8f853d",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Compute",
+ "subTarget": "Compute",
+ "style": "link"
+ },
+ {
+ "id": "4e0a0d2d-1d61-4d04-a35d-93e38d1bac29",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Storage",
+ "subTarget": "Storage",
+ "style": "link"
+ },
+ {
+ "id": "22d04714-50f4-4d72-baec-e8ccddddc7f3",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Networking",
+ "subTarget": "Networking",
+ "style": "link"
+ },
+ {
+ "id": "eaedbb0e-e895-4940-80ad-f743c3ab1041",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Top 10 services",
+ "subTarget": "Top10Services",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - UsageOptimization tabs"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "51aa3a9b-14e0-4c22-a60d-abdbf8813f00",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "f342a111-002a-47fd-807f-0d4ccac0618a",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "2336f06b-ddaa-4a9e-b72f-a2bec1ea84a9",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "d6776ffe-e4f6-4c08-8f9e-a2fe2b3b6634",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "f73dc4a1-ef8b-45c5-a30b-a11bb077a3cc",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "37ceb1c3-3930-4689-a90b-22f26e42bd81",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "08f5fe68-c2e3-4882-9300-b3e33f572dfe",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "4fea3013-df84-4930-a453-8a6bd0375130",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "8412f39d-ee67-4979-b887-47463b8848c2",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "50c68f38-13a0-4aff-a259-4426c83b7cc0",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure App Service",
+ "subTarget": "webapp",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Kubernetes Service",
+ "subTarget": "AKS",
+ "style": "link"
+ },
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Synapse",
+ "subTarget": "Synapse",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "820d600c-8ab3-4622-ba5a-52f60574d111",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Monitoring",
+ "subTarget": "Monitoring",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Storage"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Synapse\r\nA Synapse Workspace is considered unused if it doesn't have any SQL pools attached to it\r\n",
+ "style": "upsell"
+ },
+ "name": "Synapse"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'Microsoft.Synapse/workspaces'\r\n| join kind=leftouter (\r\n Resources\r\n | where type =~ 'Microsoft.Synapse/workspaces/sqlPools'\r\n | extend SynapseWorkspaceResourceId = substring(id, 0, indexof(id, '/sqlPools/'))\r\n | summarize sqlpoolCount = count() by SynapseWorkspaceResourceId\r\n) on $left.id == $right.SynapseWorkspaceResourceId\r\n| join kind=leftouter (\r\n Resources\r\n | where type =~ 'Microsoft.Synapse/workspaces/bigDataPools'\r\n | extend SynapseWorkspaceResourceId = substring(id, 0, indexof(id, '/bigDataPools/'))\r\n | summarize bigdatapoolCount = count() by SynapseWorkspaceResourceId\r\n) on $left.id == $right.SynapseWorkspaceResourceId\r\n| where (isnull(sqlpoolCount) or sqlpoolCount == 0) and (isnull(bigdatapoolCount) or bigdatapoolCount == 0)\r\n| project id, resourceGroup, subscriptionId, location\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Unused Synapase workspace",
+ "noDataMessage": "All of your Synapse workspaces have SQL pools.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "storageaccount",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ }
+ },
+ "name": "Get-Synapse1"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Synapse"
+ },
+ "name": "SynapseGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Azure Kubernetes Service\r\n- Enable cluster autoscaler to automatically adjust the number of agent nodes in response to resource constraints\r\n\r\n- Consider using Azure Spot VMs for workloads that can handle interruptions, early terminations, or evictions. For example, workloads such as batch processing jobs, development and testing environments, and large compute workloads may be good candidates to be scheduled on a spot node pool.\r\n\r\n- Utilize the Horizontal pod autoscaler to adjust the number of pods in a deployment depending on CPU utilization or other select metrics.\r\n\r\n- Use the Start/Stop feature in Azure Kubernetes Services (AKS).\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "Azure Kubernetes Service"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "\tresources\r\n | where resourceGroup in ({ResourceGroup})\r\n\t| where type == \"microsoft.containerservice/managedclusters\"\r\n\t| extend AKSname=name,location=location,Sku=tostring(sku.name),Tier=tostring(sku.tier),AgentPoolProfiles=properties.agentPoolProfiles\r\n | project id,AKSname,resourceGroup,subscriptionId,Sku,Tier,AgentPoolProfiles,location\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n\t| mvexpand AgentPoolProfiles\r\n\t| extend ProfileName = tostring(AgentPoolProfiles.name) ,mode=AgentPoolProfiles.mode,AutoScaleEnabled = AgentPoolProfiles.enableAutoScaling ,SpotVM=AgentPoolProfiles.scaleSetPriority, VMSize=tostring(AgentPoolProfiles.vmSize),minCount=tostring(AgentPoolProfiles.minCount),maxCount=tostring(AgentPoolProfiles.maxCount) , nodeCount=tostring(AgentPoolProfiles.['count'])\r\n | project id,ProfileName,Sku,Tier,mode,AutoScaleEnabled,SpotVM, VMSize,nodeCount,minCount,maxCount,location,resourceGroup,subscriptionId,AKSname\r\n \r\n",
+ "size": 0,
+ "noDataMessage": "You have no AKS clusters!",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "AKS Name",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "Insights",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "mode",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "System",
+ "representation": "Gear",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "User",
+ "representation": "Person",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "AutoScaleEnabled",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "true",
+ "representation": "success",
+ "text": "Enabled"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "disabled",
+ "text": "Disabled"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SpotVM",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "2",
+ "text": "{0}{1}Not Spot VM"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "AKSname",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "AKSname"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "ProfileName",
+ "label": "Profile Name"
+ },
+ {
+ "columnId": "Sku",
+ "label": "SKU"
+ },
+ {
+ "columnId": "Tier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "mode",
+ "label": "Mode"
+ },
+ {
+ "columnId": "AutoScaleEnabled",
+ "label": "Autoscale enabled?"
+ },
+ {
+ "columnId": "SpotVM",
+ "label": "Spot VM?"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "VM SKU"
+ },
+ {
+ "columnId": "nodeCount",
+ "label": "Number of nodes"
+ },
+ {
+ "columnId": "minCount",
+ "label": "Minimum nodes"
+ },
+ {
+ "columnId": "maxCount",
+ "label": "Maximum nodes"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "AKSname",
+ "label": "AKS Name"
+ }
+ ]
+ }
+ },
+ "name": "Get-All-AKS"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "AKS"
+ },
+ "name": "AKSGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Azure App Service\r\n## Save with Premium v3 reserved instances\r\nWhen you commit to an Azure App Service Premium v3 reserved instance you can save money. The reservation discount is applied automatically to the number of running instances that match the reservation scope and attributes - you don't need to assign a reservation to a specific instance to get the discounts.\r\n\r\n## Determine the right reserved instance size before you buy\r\nBefore you buy a reservation, you should determine the size of the Premium v3 reserved instance that you need. The following sections will help you determine the right Premium v3 reserved instance size.\r\n\r\n## Use Autoscale appropriately\r\nAutoscale can be used to provision resources for when they're needed or on demand, which allows you to minimize costs when your environment is idle.\r\n",
+ "style": "upsell"
+ },
+ "name": "Azure App Service"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'Microsoft.Web/sites'\r\n| extend WebAppRG=resourceGroup, WebAppName=name, AppServicePlan=tostring(properties.serverFarmId), SKU=tostring(properties.sku), Type=kind, Status=tostring(properties.state), WebAppLocation=location, SubscriptionName=subscriptionId\r\n| project id,WebAppName, Type, Status, WebAppLocation, AppServicePlan, WebAppRG,SubscriptionName\r\n| order by id asc\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "Never"
+ },
+ "name": "query - WebFunctionStatus"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type == \"microsoft.web/serverfarms\" and sku.tier !~ 'Free'\r\n| extend planId=tolower(tostring(id)),skuname = tostring(sku.name) , skutier = tostring(sku.tier), workers=tostring(properties.numberOfWorkers),webRG=resourceGroup,maxworkers=tostring(properties.maximumNumberOfWorkers), Sites=tostring(properties.numberOfSites), SubscriptionName=subscriptionId\r\n| project planId, name, skuname, skutier, workers, maxworkers, webRG, Sites, SubscriptionName\r\n| join kind=leftouter (resources | where type ==\"microsoft.insights/autoscalesettings\" | project planId=tolower(tostring(properties.targetResourceUri)), PredictiveAutoscale=properties.predictiveAutoscalePolicy.scaleMode, AutoScaleProfiles=properties.profiles,resourceGroup) on planId\r\n",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "Never"
+ },
+ "name": "query - AppServiceplandetails"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\",\"mergeType\":\"inner\",\"leftTable\":\"query - AppServiceplandetails\",\"rightTable\":\"query - WebFunctionStatus\",\"leftColumn\":\"planId\",\"rightColumn\":\"AppServicePlan\"}],\"projectRename\":[{\"originalName\":\"[query - AppServiceplandetails].type\",\"mergedName\":\"type\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].tenantId\",\"mergedName\":\"tenantId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].kind\",\"mergedName\":\"kind\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].location\",\"mergedName\":\"location\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].managedBy\",\"mergedName\":\"managedBy\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].sku\",\"mergedName\":\"sku\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].plan\",\"mergedName\":\"plan\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].properties\",\"mergedName\":\"properties\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].tags\",\"mergedName\":\"tags\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].identity\",\"mergedName\":\"identity\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].zones\",\"mergedName\":\"zones\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].extendedLocation\",\"mergedName\":\"extendedLocation\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].planId\",\"mergedName\":\"planId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - WebFunctionStatus].id\",\"mergedName\":\"id\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].name\",\"mergedName\":\"name\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].Status\",\"mergedName\":\"Status\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].Type\",\"mergedName\":\"Type\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].skuname\",\"mergedName\":\"skuname\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].skutier\",\"mergedName\":\"skutier\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].PredictiveAutoscale\",\"mergedName\":\"PredictiveAutoscale\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].AutoScaleProfiles\",\"mergedName\":\"AutoScaleProfiles\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].workers\",\"mergedName\":\"workers\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].maxworkers\",\"mergedName\":\"maxworkers\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].webRG\",\"mergedName\":\"webRG\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].planId1\",\"mergedName\":\"planId1\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].resourceGroup\",\"mergedName\":\"resourceGroup\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].WebAppName\",\"mergedName\":\"WebAppName\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].WebAppLocation\",\"mergedName\":\"WebAppLocation\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].AppServicePlan\",\"mergedName\":\"AppServicePlan\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].WebAppRG\",\"mergedName\":\"WebAppRG\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].Sites\",\"mergedName\":\"Sites\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - WebFunctionStatus].SubscriptionName\"},{\"originalName\":\"[query - WebFunctionStatus].id1\"},{\"originalName\":\"[query - AppServiceplandetails].resourceGroup1\"}]}",
+ "size": 0,
+ "title": "Web Apps",
+ "noDataMessage": "You have no WebApps!",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Name",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Running",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Stopped",
+ "representation": "disabled",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "webRG",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "planId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WebAppName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AppServicePlan",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WebAppRG",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "name"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "planId",
+ "label": "Plan ID"
+ },
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "skuname",
+ "label": "SKU"
+ },
+ {
+ "columnId": "skutier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "PredictiveAutoscale",
+ "label": "Autoscale Enabled?"
+ },
+ {
+ "columnId": "AutoScaleProfiles",
+ "label": "Autoscale Profile"
+ },
+ {
+ "columnId": "workers",
+ "label": "Workers"
+ },
+ {
+ "columnId": "maxworkers",
+ "label": "Max. Workers"
+ },
+ {
+ "columnId": "webRG",
+ "label": "Application Resource Group"
+ },
+ {
+ "columnId": "WebAppName",
+ "label": "Application Name"
+ },
+ {
+ "columnId": "WebAppLocation",
+ "label": "Application Location"
+ },
+ {
+ "columnId": "AppServicePlan",
+ "label": "App Service Plan"
+ },
+ {
+ "columnId": "WebAppRG",
+ "label": "Application Resource Group"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-WebApp"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type == \"microsoft.web/serverfarms\" and properties.numberOfSites == \"0\"\r\n| extend id, planId=tolower(tostring(id)),skuname = tostring(sku.name) , skutier = tostring(sku.tier), workers=tostring(properties.numberOfWorkers),webRG=resourceGroup,maxworkers=tostring(properties.maximumNumberOfWorkers), Sites=tostring(properties.numberOfSites), SubscriptionName=subscriptionId\r\n| project id, planId, name, skuname, skutier, workers, maxworkers, webRG, Sites, SubscriptionName\r\n| join kind=leftouter (resources | where type ==\"microsoft.insights/autoscalesettings\" | project planId=tolower(tostring(properties.targetResourceUri)), PredictiveAutoscale=properties.predictiveAutoscalePolicy.scaleMode, AutoScaleProfiles=properties.profiles,resourceGroup) on planId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n ) on id",
+ "size": 0,
+ "noDataMessage": "All of your App Service's plan have at least one website.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxworkers",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "planId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "PredictiveAutoscale",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AutoScaleProfiles",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "planId",
+ "label": "App Service Plan "
+ },
+ {
+ "columnId": "name",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "skuname",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "skutier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "workers",
+ "label": "Number of Workers "
+ },
+ {
+ "columnId": "maxworkers",
+ "label": "Number of websites"
+ },
+ {
+ "columnId": "webRG",
+ "label": "Resource Group "
+ },
+ {
+ "columnId": "Sites",
+ "label": "Number of websites"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ }
+ ]
+ }
+ },
+ "name": "query - IdleServicePlans"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "webapp"
+ },
+ "name": "WebAppGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Log Analytics workspace\r\nA [Log Analytics workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-workspace-overview) is a unique environment for log data from Azure Monitor and other Azure services, such as Microsoft Sentinel and Microsoft Defender for Cloud. Each workspace has its own data repository and configuration but might combine data from multiple services. The following advices could be of help in cost optimization:\r\n\r\n1. Adopt [commitment tiers](https://learn.microsoft.com/azure/azure-monitor/logs/cost-logs#commitment-tiers) where applicable.\r\n2. Adopt [Azure Monitor Logs dedicated cluster](https://learn.microsoft.com/azure/azure-monitor/logs/cost-logs#dedicated-clusters) if a single workspace does not ingest enough data as per the minimum commitment tier (100 GB/day) or if it is possible to aggregate ingestion costs from more than one workspace in the same region.\r\n3. Convert the free tier based workspace to **Pay-as-you-go** model and add them to an Azure Monitor Logs dedicated cluster where possible.",
+ "style": "upsell"
+ },
+ "name": "MonitoringRecommendations"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'microsoft.operationalinsights/workspaces'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend \r\n state = trim(' ', tostring(properties.provisioningState)),\r\n sku = trim(' ', tostring(properties.sku.name)),\r\n skuUpdate = trim(' ', tostring(properties.sku.lastSkuUpdate)),\r\n retentionDays = toint(properties.retentionInDays),\r\n dailyquotaGB = trim(' ', tostring(properties.workspaceCapping.dailyQuotaGb))\r\n| extend dailyquotaGB = iif(dailyquotaGB !=-1.0, dailyquotaGB,\"--\")\r\n| project id, resourceGroup, location, retentionDays, dailyquotaGB, sku, subscriptionId\r\n| join kind = inner (\r\n resources\r\n | where type =~ 'microsoft.operationalinsights/workspaces'\r\n | where resourceGroup in ({ResourceGroup})\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags[tagName])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | summarize arg_max(tagName, tagValue) by id\r\n) on id\r\n| extend resourceGroup = tostring(split(id,'/providers/')[0])\r\n| project-away id1",
+ "size": 0,
+ "title": "Log Analytics Workspaces",
+ "showRefreshButton": true,
+ "exportMultipleValues": true,
+ "exportedParameters": [
+ {
+ "fieldName": "id",
+ "parameterName": "selectedWorkspaceId",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "retentionDays",
+ "formatter": 4,
+ "formatOptions": {
+ "min": 1,
+ "max": 730,
+ "palette": "blue",
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "dailyquotaGB",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "sku",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "lacluster",
+ "representation": "green",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "free",
+ "representation": "gray",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "capacityreservation",
+ "representation": "green",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "red",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "tagName",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "Blank",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Tags",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "tagValue",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "Blank",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Tags",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Workspace"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "retentionDays",
+ "label": "Retention (days)"
+ },
+ {
+ "columnId": "dailyquotaGB",
+ "label": "Daily Cap (GB)"
+ },
+ {
+ "columnId": "sku",
+ "label": "Pricing Tier"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "tagName",
+ "label": "Tag Name"
+ },
+ {
+ "columnId": "tagValue",
+ "label": "Tag Value"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "name": "logAnalyticsWorkspaces",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "π‘_Select one or more workspaces from the list above to see daily ingestion trend_"
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedWorkspaceId",
+ "comparison": "isEqualTo"
+ },
+ "name": "text - 3",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "d9c04e61-453f-4f85-8d7e-1a34037d836b",
+ "version": "KqlParameterItem/1.0",
+ "name": "selectedWorkspaces",
+ "type": 5,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces'\r\n| where id in ({selectedWorkspaceId})",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 2592000000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ },
+ {
+ "id": "2108523c-fb80-49b3-9ff1-ea5e5eca2091",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "label": "Time range",
+ "type": 4,
+ "isRequired": true,
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 172800000
+ },
+ {
+ "durationMs": 604800000
+ },
+ {
+ "durationMs": 1209600000
+ },
+ {
+ "durationMs": 2592000000
+ }
+ ]
+ },
+ "timeContext": {
+ "durationMs": 2592000000
+ },
+ "value": {
+ "durationMs": 2592000000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "_",
+ "comparison": "isEqualTo",
+ "value": "_"
+ },
+ "name": "parameters - 2"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Usage\r\n| where StartTime >= startofday({TimeRange:start}) and EndTime < startofday(now())\r\n| where IsBillable == true\r\n| project Quantity, ResourceUri, TimeGenerated\r\n| summarize BillableDataGB = sum(Quantity / 1024.) by bin(TimeGenerated, 1d)\r\n| project TimeGenerated, BillableDataGB",
+ "size": 0,
+ "aggregation": 5,
+ "title": "Total Daily Ingestion for selected workspaces - Trend by {TimeRange:label}",
+ "timeContextFromParameter": "TimeRange",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{selectedWorkspaces}"
+ ],
+ "visualization": "barchart",
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "BillableDataGB",
+ "label": "Ingested data"
+ }
+ ],
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 39,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedWorkspaceId",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "dailyIngestionTrend",
+ "styleSettings": {
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Monitoring"
+ },
+ "name": "MonitoringGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| where properties.impactedField has \"Workspaces\"\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Impact=properties.impact,resourceGroup,subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Recommendation=tostring(properties.shortDescription.problem), Impact=properties.impact,resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| where Category == 'Cost' \r\n| where SubCategory has \"Workspaces\"\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Monitoring",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Monitoring"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where type has \"microsoft.operationalinsights/workspaces\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "rowLimit": 10000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all network resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Monitoring\",\"rightTable\":\"query - tags - list all network resources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].AffectedResource\",\"mergedName\":\"Affected Resource\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].Category\",\"mergedName\":\"Recommendation Category\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].SubCategory\",\"mergedName\":\"Affected Resource Type\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].subscriptionId\",\"mergedName\":\"Subscription ID\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].id\",\"mergedName\":\"id\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].stableId\",\"mergedName\":\"stableId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].recommendationTypeId\",\"mergedName\":\"recommendationTypeId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].maxCpuP95\",\"mergedName\":\"maxCpuP95\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].excludeRecomm\",\"mergedName\":\"excludeRecomm\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].lowCpuThreshold\",\"mergedName\":\"lowCpuThreshold\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].AdditionaInfo\",\"mergedName\":\"AdditionaInfo\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].isActive1\",\"mergedName\":\"isActive1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].excludeProperty\",\"mergedName\":\"excludeProperty\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[query - tags - list all network resources].id\",\"mergedName\":\"id1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeProperty\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].isActive1\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].AdditionaInfo\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].lowCpuThreshold\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeRecomm\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].maxCpuP95\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].recommendationTypeId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].stableId\"},{\"originalName\":\"[query - tags - list all network resources].id\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].id\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Monitoring",
+ "noDataMessageStyle": 3,
+ "queryType": 7
+ },
+ "showPin": false,
+ "name": "query - Merge - Monitoring Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Monitoring"
+ },
+ "name": "AdvisorGroupMonitoring"
+ }
+ ]
+ },
+ "name": "group - 0 "
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Top10Services"
+ }
+ ],
+ "name": "group - Top10Services"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "7a720abf-5b4a-4fb1-adaf-2383e70f625d",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "a29babbc-5092-46c5-b03b-932c90aa61c9",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "4b9c84b6-14ab-4663-b8b7-8bf0c351bbb5",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "6637e003-5323-4c6d-9990-426388c833e9",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "d390e2b5-aa2f-494b-bbb8-0b18c8de9063",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ae7eb928-8873-46f8-a3ff-77f45c207fb3",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Networking cost optimization recommendations",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ae7eb928-8873-46f8-a3ff-77f45c207fb3",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "e5d97e9d-97e6-45f2-871c-376799213b6a",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Firewall",
+ "subTarget": "firewall",
+ "style": "link"
+ },
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Application Gateway",
+ "subTarget": "appGateway",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "61595d5e-9f25-4919-95a6-1462739f4657",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Load Balancer",
+ "subTarget": "loadBalancer",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Public IP Address",
+ "subTarget": "publicIP",
+ "style": "link"
+ },
+ {
+ "id": "79e7a97a-1413-41e8-b4c6-ebd1d0a45e2e",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual Network Gateway",
+ "subTarget": "vpnGw",
+ "style": "link"
+ },
+ {
+ "id": "5655ef75-a5ec-4f4b-badf-a99191a0493f",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "NAT Gateway",
+ "subTarget": "natgw",
+ "style": "link"
+ },
+ {
+ "id": "68a77162-06c2-4648-83e0-f8f41c4fbda7",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "ExpressRoute",
+ "subTarget": "ER",
+ "style": "link"
+ },
+ {
+ "id": "5dd4cb39-5aa1-4de9-bc4c-338e15b8d389",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Private DNS & Private Endpoint",
+ "subTarget": "privatedns",
+ "style": "link"
+ },
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Advisor recommendations",
+ "subTarget": "advisorNetworking",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Networking"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Application Gateways\r\nReview Application Gateways which include backend pools with no targets. Resources listed with 2 red signs are considered idle.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for Application Gateways"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'Microsoft.Network/applicationGateways' and resourceGroup in ({ResourceGroup})\r\n| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier= tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id, name, SKUName, SKUTier, SKUCapacity,resourceGroup,subscriptionId\r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Network/applicationGateways' and resourceGroup in ({ResourceGroup})\r\n | mvexpand backendPools = properties.backendAddressPools\r\n | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)\r\n | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses)\r\n | extend backendPoolName = backendPools.properties.backendAddressPools.name\r\n | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id\r\n) on id\r\n| project-away id1\r\n| where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))\r\n| order by id asc\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Application gateways with empty backend pools",
+ "noDataMessage": "You don't have any Application Gateways with empty backendpools",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SKUCapacity",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "backendIPCount",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": "No Backend IPs"
+ },
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": "Backend IP configured"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "backendAddressesCount",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": "No Backend targets"
+ },
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": "Backend targets available"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Recommendation",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "No Backend targets",
+ "representation": "redBright",
+ "text": "No Backend targets"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "green",
+ "text": "Backend targets enabled"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "backendPoolIPTarget",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "backendPoolVMTarget",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "disabled",
+ "text": ""
+ },
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Recommednation",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "No Backend targets",
+ "representation": "redBright",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "green",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SKUCapacity",
+ "label": "Capacity"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ },
+ {
+ "columnId": "backendIPCount",
+ "label": "Has backend pool for IPs?"
+ },
+ {
+ "columnId": "backendAddressesCount",
+ "label": "Has backend pool for VMs?"
+ },
+ {
+ "columnId": "id1",
+ "label": "ResourceID"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-AppGW"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "appGateway"
+ },
+ "name": "NetworkingAppGateway"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Load Balancers\r\nReview Load balancers with no backend pools, and remove them if not needed.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for Load Balancers"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| extend resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup), SKUName=tostring(sku.name),SKUTier=tostring(sku.tier),location,backendAddressPools = properties.backendAddressPools\r\n| where type =~ 'microsoft.network/loadbalancers' and array_length(backendAddressPools) == 0 and sku.name!='Basic'\r\n| order by id asc\r\n| project id,name, SKUName,SKUTier,backendAddressPools, location,resourceGroup, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Load Balancers with empty backend pools",
+ "noDataMessage": "You don't have any Load Balancers with empty backendpools",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "backendAddressPools",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": "Empty Backend Pool"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "backendAddressPools",
+ "label": "Has backend pool?"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "id1",
+ "label": "ResourceID"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-LB"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "loadBalancer"
+ },
+ "name": "LoadBalancerGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Public IP Addresses\r\nReview unattached Public IP addresses, as they may represent additional cost.\r\n This query will also show Public IPs attached to Idle network cards.\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for PIP"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'Microsoft.Network/publicIPAddresses' and isempty(properties.ipConfiguration) and isempty(properties.natGateway) and properties.publicIPAllocationMethod =~ 'Static'\r\n| extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location ,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId\r\n| union (\r\n Resources \r\n | where type =~ 'microsoft.network/networkinterfaces' and isempty(properties.virtualMachine) and isnull(properties.privateEndpoint) and isnotempty(properties.ipConfigurations) \r\n | extend IPconfig = properties.ipConfigurations \r\n | mv-expand IPconfig \r\n | extend PublicIpId= tostring(IPconfig.properties.publicIPAddress.id)\r\n | project PublicIpId\r\n | join ( \r\n resources \r\n | where type =~ 'Microsoft.Network/publicIPAddresses'\r\n | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, resourceGroup, Location=location \r\n ) on PublicIpId\r\n | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId\r\n)\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | extend PublicIpId=id\r\n | distinct PublicIpId\r\n )\r\n on PublicIpId\r\n",
+ "size": 0,
+ "title": "Unattached Public IPs",
+ "noDataMessage": "You have no unattached Public IPs",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "PublicIpId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PublicIpId",
+ "label": "ID"
+ },
+ {
+ "columnId": "IPName",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "AllocationMethod",
+ "label": "Allocation Method"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "PublicIpId1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-PIP"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Routing Preference\r\n\r\nAzure routing preference enables you to choose how your traffic routes between Azure and the Internet. You can choose to route traffic either via the Microsoft network or via the ISP network (public internet). By default, traffic is routed via the Microsoft global network for all Azure services.\r\n\r\nRouting preference choices include:\r\n\r\n- **Microsoft Network**: Both ingress and egress traffic stays bulk of the travel on the Microsoft global network. This routing is also known as cold potato routing. This option has a higher ingress/egress cost.\r\n\r\n- **Public Internet (ISP network)**: The new routing choice Internet routing minimizes travel on the Microsoft global network and uses the transit ISP network to route your traffic. This routing is also known as hot potato routing.\r\n\r\nFor more information about routing preference, see [What is routing preference?](https://learn.microsoft.com/azure/virtual-network/ip-services/ip-services-overview#routing-preference).\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'Microsoft.Network/publicIPAddresses' and isnotempty(properties.ipConfiguration)\r\n| where tostring(properties.ipTags)== \"[]\"\r\n| extend PublicIpId=id, RoutingMethod=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location ,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project PublicIpId,IPName, RoutingMethod,SKUName, resourceGroup, Location, AllocationMethod, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | extend PublicIpId=id\r\n | distinct PublicIpId\r\n )\r\n on PublicIpId",
+ "size": 0,
+ "title": "Public IP Addresses ",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "RoutingMethod",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "info",
+ "text": "Microsoft Network"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "PublicIpId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PublicIpId",
+ "label": "ID"
+ },
+ {
+ "columnId": "IPName",
+ "label": "Name"
+ },
+ {
+ "columnId": "RoutingMethod",
+ "label": "Routing Method"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "AllocationMethod",
+ "label": "Allocation Method"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "SubscriptionId"
+ },
+ {
+ "columnId": "PublicIpId1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "name": "Query-PIP-RoutingPreference"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# DDoS IP Protection\r\nIf you need to protect fewer than 15 public IP resources, the IP Protection tier is the more cost-effective option. However, if you have more than 15 public IP resources to protect, then the Network Protection tier becomes more cost-effective. \r\n\r\nThis query will surface all Public IP (PIP) addressess with the DDoS Protection enabled. If there are more than 15 Public IP Addresses with DDoS protection in the same virtual network, then it is cheaper to enable DDoS Network protection.\r\n\r\nThe Network Protection tier also provides additional features, including:\r\n\r\n- DDoS Protection Rapid Response (DRR)\r\n- Cost protection guarantees\r\n- Web Application Firewall (WAF) discounts\r\n\r\nFor more information about DDoS protection, see [Which Azure DDoS Protection tier should I choose?](https://learn.microsoft.com/azure/ddos-protection/ddos-faq?source=recommendations#which-azure-ddos-protection-tier-should-i-choose-).",
+ "style": "upsell"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/publicipaddresses\"\r\n| project ddosProtection=tostring(properties.ddosSettings), name\r\n| where ddosProtection has \"Enabled\"\r\n| count\r\n| project TotalIpsProtected = Count\r\n| extend CheckIpsProtected = iff(TotalIpsProtected >= 15,\"Enable Network Protection tier\", \"Enable PIP DDoS Protection\")",
+ "size": 0,
+ "title": "Public IP Addresses DDoS Protection",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "RoutingMethod",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "info",
+ "text": "Microsoft Network"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "PublicIpId1",
+ "formatter": 5
+ }
+ ]
+ }
+ },
+ "name": "Query-PIP-DDoSProtection"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "publicIP"
+ },
+ "name": "PIPGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Virtual Network Gateways\r\nReview idle Virtual Network Gateways that have no connections defined, as they may represent additional cost.\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle virtualNetworkGateways"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/virtualnetworkgateways\"\r\n| extend resourceGroup =strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id, GWName=name,resourceGroup,location,subscriptionId\r\n| join kind = leftouter(\r\n resources\r\n | where type == \"microsoft.network/connections\"\r\n | extend id = tostring(properties.virtualNetworkGateway1.id)\r\n | project id\r\n | union (\r\n resources\r\n | where type == \"microsoft.network/connections\"\r\n | extend id = tostring(properties.virtualNetworkGateway2.id)\r\n | project id\r\n )\r\n) on id\r\n| where isempty(id1)\r\n| project id, GWName,resourceGroup,location,subscriptionId,status=id",
+ "size": 0,
+ "title": "Idle Virtual Network Gateways",
+ "noDataMessage": "No Idle Virtual Network Gateways found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Error-Connection not configured"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "GWName",
+ "label": "VPN Gateway Name"
+ },
+ {
+ "columnId": "status",
+ "label": "Is connected?"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle Virtual Network gateways"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "vpnGw"
+ },
+ "name": "VPNGW Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| where properties.impactedField has \"Network\"\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Impact=properties.impact,resourceGroup,subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Recommendation=tostring(properties.shortDescription.problem), Impact=properties.impact,resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| where Category == 'Cost' \r\n| where SubCategory has \"Network\"\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Networking",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Networking"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where type has \"Microsoft.Network\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all network resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Networking\",\"rightTable\":\"query - tags - list all network resources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Networking].AffectedResource\",\"mergedName\":\"AffectedResource\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].Category\",\"mergedName\":\"Category\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].SubCategory\",\"mergedName\":\"SubCategory\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].resourceGroup\",\"mergedName\":\"resourceGroup\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeProperty\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].isActive1\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].AdditionaInfo\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].lowCpuThreshold\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeRecomm\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].maxCpuP95\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].recommendationTypeId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].stableId\"},{\"originalName\":\"[query - tags - list all network resources].id\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].id\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Networking",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 7
+ },
+ "showPin": false,
+ "name": "query - Merge - Network Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "advisorNetworking"
+ },
+ "name": "AdvisorGroupNetworking"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for NAT Gateways\r\nReview idle NAT Gateways that have no subnet defined, as they may represent additional cost.\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle NAT Gateway"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/natgateways\" and isnull(properties.subnets)\r\n| project id, GWName=name, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), Location=location ,resourceGroup=tostring(strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)),subnet=tostring(properties.subnet), subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Idle NAT Gateways",
+ "noDataMessage": "No idle NAT gateways found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subnet",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not associated."
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "GWName",
+ "label": "NAT Gateway Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subnet",
+ "label": "Subnet"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle NAT gateways"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "natgw"
+ },
+ "name": "NATGW Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Private DNS\r\nReview private DNS without [Virtual Network Links](https://learn.microsoft.com/azure/dns/private-dns-virtual-network-links).\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle private dns"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/privatednszones\" and properties.numberOfVirtualNetworkLinks == 0\r\n| project id, PrivateDNSName=name, NumberOfRecordSets=tostring(properties.numberOfRecordSets),resourceGroup=tostring(strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)),vNets=tostring(properties.properties.numberOfVirtualNetworkLinks), subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Idle private DNS ",
+ "noDataMessage": "No idle private DNS found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "vNets",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "2",
+ "text": "Not associated to any vNET"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not associated to any vNET"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subnet",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not associated."
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "PrivateDNSName",
+ "label": "Private DNS name"
+ },
+ {
+ "columnId": "NumberOfRecordSets",
+ "label": "Number of DNS records"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "vNets",
+ "label": "vNETs associated"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle private DNS"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Private endpoints\r\nReview [Private Endpoints](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) that are not connected to any resource.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle private endpoints"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ \"microsoft.network/privateendpoints\"\r\n| extend connection = iff(array_length(properties.manualPrivateLinkServiceConnections) > 0, properties.manualPrivateLinkServiceConnections[0], properties.privateLinkServiceConnections[0])\r\n| extend subnetId = properties.subnet.id\r\n| extend subnetIdSplit = split(subnetId, \"/\")\r\n| extend vnetId = strcat_array(array_slice(subnetIdSplit,0,8), \"/\")\r\n| extend serviceId = tostring(connection.properties.privateLinkServiceId)\r\n| extend serviceIdSplit = split(serviceId, \"/\")\r\n| extend serviceName = tostring(serviceIdSplit[8])\r\n| extend serviceTypeEnum = iff(isnotnull(serviceIdSplit[6]), tolower(strcat(serviceIdSplit[6], \"/\", serviceIdSplit[7])), \"microsoft.network/privatelinkservices\")\r\n| extend stateEnum = tostring(connection.properties.privateLinkServiceConnectionState.status)\r\n| extend stateDescription = tostring(connection.properties.privateLinkServiceConnectionState.description)\r\n| extend groupIds = tostring(connection.properties.groupIds[0])\r\n| where stateEnum == \"Disconnected\"\r\n| extend Details = pack_all()\r\n| project id, PrivateDNSName=name, stateEnum, stateDescription, resourceGroup=tostring(strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)),serviceName, serviceTypeEnum, groupIds, vnetId, subnetId,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Idle private endpoints",
+ "noDataMessage": "No idle private endpoints found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "serviceTypeEnum",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "vnetId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subnetId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "PrivateDNSName",
+ "label": "Private Endpoint name"
+ },
+ {
+ "columnId": "stateEnum",
+ "label": "State"
+ },
+ {
+ "columnId": "stateDescription",
+ "label": "State description"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "serviceName",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "serviceTypeEnum",
+ "label": "Service Type"
+ },
+ {
+ "columnId": "groupIds",
+ "label": "Resource Sub-type"
+ },
+ {
+ "columnId": "vnetId",
+ "label": "Subnet"
+ },
+ {
+ "columnId": "subnetId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle private endpoint"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "privatedns"
+ },
+ "name": "Private DNS and Private Endpoints Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Azure Firewall\r\n\r\n## Azure Firewall Premium SKU\r\nThis table identifies Azure Firewalls with Premium SKU and evaluates whether the associated policy incorporates premium-only features or not. If a Premium SKU Firewall lacks a policy with premium features, such as TLS or intrusion detection it will be shown here. To learn more about Azure Firewall skus, check this [SKU comparison table](https://learn.microsoft.com/azure/firewall/choose-firewall-sku). ",
+ "style": "upsell"
+ },
+ "name": "Recommendations for premium Firewall"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'Microsoft.Network/azureFirewalls' and properties.sku.tier==\"Premium\"\r\n| project FWID=id, firewallName = name, SkuTier = tostring(properties.sku.tier), resourceGroup, location\r\n| join kind=inner (\r\n resources\r\n | where type =~ 'microsoft.network/firewallpolicies'\r\n | mv-expand properties.firewalls\r\n | extend intrusionDetection = tostring(properties.intrusionDetection contains \"Alert\" or properties.intrusionDetection contains \"Deny\"), transportSecurity = tostring(properties.transportSecurity contains \"keyVaultSecretId\")\r\n | extend FWID=tostring(properties_firewalls.id)\r\n | where intrusionDetection == \"False\" and transportSecurity == \"False\"\r\n | project PolicyName = name, PolicySKU=tostring(properties.sku.tier), intrusionDetection, transportSecurity, FWID\r\n) on FWID",
+ "size": 0,
+ "title": "Azure Firewall Premium",
+ "noDataMessage": "No Azure Firewall Premium found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "firewallName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "FWID1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Error-Connection not configured"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "FWID",
+ "label": "Firewall Name"
+ },
+ {
+ "columnId": "firewallName",
+ "label": "FWName"
+ },
+ {
+ "columnId": "SkuTier",
+ "label": "SKU"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "PolicyName",
+ "label": "Policy Name"
+ },
+ {
+ "columnId": "PolicySKU",
+ "label": "Policy SKU"
+ },
+ {
+ "columnId": "intrusionDetection",
+ "label": "Is Intrusion Detection enabled?"
+ },
+ {
+ "columnId": "transportSecurity",
+ "label": "Is TLS enabled?"
+ }
+ ]
+ }
+ },
+ "name": "query - Optimize Premium AZ Firewall"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Avoid multiple Firewall instances in the same region\r\nOptimize the use of Azure Firewall by having a central instance of Azure Firewall in the hub virtual network or Virtual WAN secure hub and share the same firewall across many spoke virtual networks that are connected to the same hub from the same region. Ensure there's no unexpected cross-region traffic as part of the hub-spoke topology nor multiple Azure firewall instances deployed to the same region. To learn more about Azure Firewall design principles, check [Azure Well-Architected Framework review - Azure Firewall](https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall#cost-optimization).",
+ "style": "upsell"
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'Microsoft.Network/azureFirewalls'\r\n| mv-expand properties.ipConfigurations\r\n| project FWID=id, firewallName = name, SkuTier = tostring(properties.sku.tier), FWRG=resourceGroup, FWLocation=location, SubnetID=tostring(properties_ipConfigurations.properties.subnet.id)\r\n| join (\r\nresources\r\n| where type =~ 'Microsoft.Network/virtualNetworks' \r\n| mv-expand properties.subnets\r\n| where properties_subnets.id has 'AzureFirewallSubnet'\r\n| extend SubnetID=tostring(properties_subnets.id), SubnetName=name, SubnetLocation=location, SubnetRG=resourceGroup) on SubnetID\r\n| project FWID, FWRG,FWLocation, SubnetID,SubnetName, SubnetRG, SubnetLocation\r\n",
+ "size": 0,
+ "title": "Azure Firewall per location",
+ "noDataMessage": "No Firewall deployed",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SubnetName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "firewallName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "FWID1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Error-Connection not configured"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "FWID",
+ "label": "Firewall Name"
+ },
+ {
+ "columnId": "FWRG",
+ "label": "Firewall Resource Group"
+ },
+ {
+ "columnId": "FWLocation",
+ "label": "Firewall Location"
+ },
+ {
+ "columnId": "SubnetID",
+ "label": "Vnet / Subnet Name"
+ },
+ {
+ "columnId": "SubnetName",
+ "label": "Subnet extended Name"
+ },
+ {
+ "columnId": "SubnetRG",
+ "label": "Subnet Resource Group"
+ },
+ {
+ "columnId": "SubnetLocation",
+ "label": "Subnet Location"
+ }
+ ]
+ }
+ },
+ "name": "query - Firewall per Location"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "firewall"
+ },
+ "name": "Firewall Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for ExpressRoute\r\n\r\nReview idle ExpressRoute circuits that has not been provisioned (service provider has not completed provisioning or has deprovisioned), as they may represent additional cost.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for ExpressRoute"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'Microsoft.Network/expressRouteCircuits' and properties.serviceProviderProvisioningState == \"NotProvisioned\"\r\n| extend ServiceLocation=tostring(properties.serviceProviderProperties.peeringLocation), ServiceProvider=tostring(properties.serviceProviderProperties.serviceProviderName), BandwidthInMbps=tostring(properties.serviceProviderProperties.bandwidthInMbps)\r\n| project ERId=id,ERName = name, ERRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), SKUFamily=tostring(sku.family), ERLocation = location, ServiceLocation, ServiceProvider, BandwidthInMbps\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | extend ERId=id\r\n | distinct ERId\r\n )\r\n on ERId\r\n\r\n",
+ "size": 0,
+ "title": "Idle ExpressRoute circuits",
+ "noDataMessage": "No idle ExpressRoute circuits found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ERId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "ERId",
+ "label": "ExpressRoute ID"
+ },
+ {
+ "columnId": "ERName",
+ "label": "ER Name"
+ },
+ {
+ "columnId": "ERRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SKUFamily",
+ "label": "SKU Family"
+ },
+ {
+ "columnId": "ERLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "ServiceLocation",
+ "label": "Service Location"
+ },
+ {
+ "columnId": "ServiceProvider",
+ "label": "Service Provider"
+ },
+ {
+ "columnId": "BandwidthInMbps",
+ "label": "Bandwidth in Mbps"
+ }
+ ]
+ }
+ },
+ "name": "Idle ExpressRoute circuits"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "ER"
+ },
+ "name": "ExpressRoute Group"
+ }
+ ]
+ },
+ "name": "networking - Subscription"
+ }
+ ]
+ },
+ "name": "group - 0"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Networking"
+ }
+ ],
+ "name": "NetworkingGroup",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "title": "Storage cost optimization recommendations",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "37ceb1c3-3930-4689-a90b-22f26e42bd81",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "08f5fe68-c2e3-4882-9300-b3e33f572dfe",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "4fea3013-df84-4930-a453-8a6bd0375130",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "8412f39d-ee67-4979-b887-47463b8848c2",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "50c68f38-13a0-4aff-a259-4426c83b7cc0",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Storage Accounts",
+ "subTarget": "Storage",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Managed Disks",
+ "subTarget": "Disks",
+ "style": "link"
+ },
+ {
+ "id": "86ff248b-1ce4-4194-8cd4-b1e0a9956b5d",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Backup",
+ "subTarget": "Backup",
+ "style": "link"
+ },
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Advisor recommendations",
+ "subTarget": "advisorStorage",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Storage"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Idle backups\r\n\r\nReview protected items backup activity to determine if there are items that have not been backed up in the last 90 days. This could either mean that the underlying resource that's being backed up doesn't exist anymore or there's some issue with the resource that's preventing backups from being taken reliably.\r\n",
+ "style": "upsell"
+ },
+ "name": "text - idleBackup"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "recoveryservicesresources\r\n| where type =~ 'microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems'\r\n| extend vaultId = tostring(properties.vaultId),resourceId = tostring(properties.sourceResourceId),idleBackup= datetime_diff('day', now(), todatetime(properties.lastBackupTime)) > 90, resourceType=tostring(properties.workloadType), protectionState=tostring(properties.protectionState),lastBackupTime=tostring(properties.lastBackupTime), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),lastBackupDate=todatetime(properties.lastBackupTime)\r\n| where idleBackup != 0\r\n| project resourceId,vaultId,idleBackup,lastBackupDate,resourceType,protectionState,lastBackupTime,location,resourceGroup,subscriptionId\r\n| join kind = inner(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend vaultId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | project vaultId\r\n )\r\n on vaultId\r\n | project-away vaultId1",
+ "size": 0,
+ "title": "Idle backups",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "idleBackup",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "2",
+ "text": "No backup in the last 90 days"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "resourceId",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "idleBackup",
+ "label": "Backup activity"
+ },
+ {
+ "columnId": "lastBackupDate",
+ "label": "Last backup date"
+ },
+ {
+ "columnId": "resourceType",
+ "label": "Resource type"
+ },
+ {
+ "columnId": "protectionState",
+ "label": "Protection state"
+ },
+ {
+ "columnId": "lastBackupTime",
+ "label": "Last backup time"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "name": "query - idleBackups"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Backup storage redundancy settings\r\n\r\nBy default, when you configure backup for resources, geo-redundant storage (GRS) replication is applied to these backups. While this is the recommended storage replication option as it creates more redundancy for your critical data, you can choose to protect items using locally-redundant storage (LRS) if that meets your backup availability needs for dev-test workloads. Using LRS instead of GRS halves the cost of your backup storage. \r\n\r\nπ±οΈClick on each vault to see the configured storage replication\r\n",
+ "style": "upsell"
+ },
+ "name": "text - backupReplication"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type == 'microsoft.recoveryservices/vaults'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend skuTier = tostring(sku['tier']), skuName = tostring(sku['name']), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),redundancySettings = tostring(properties.redundancySettings['standardTierStorageRedundancy'])\r\n| order by id asc\r\n| project id,redundancySettings, resourceGroup, location,subscriptionId, skuTier, skuName\r\n| join kind = innerunique (\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend vaultId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | project id\r\n)\r\non id\r\n| project-away id1\r\n",
+ "size": 0,
+ "title": "Recovery vaults storage replication ",
+ "exportedParameters": [
+ {
+ "fieldName": "RGVault",
+ "parameterName": "resourceGroupVault",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "subscriptionId",
+ "parameterName": "subscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "name",
+ "parameterName": "vaultName",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "redundancySettings",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "GeoRedundant",
+ "representation": "Globe",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "ResourceFlat",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "RGVault",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ }
+ ]
+ }
+ },
+ "name": "query - backupStorageReplication"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Backup"
+ },
+ "name": "group - Backup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Storage accounts\r\nGeneral-purpose v2 storage accounts support the latest Azure Storage features and incorporate all of the functionality of general-purpose v1 and Blob storage accounts. General-purpose v2 accounts are recommended for most storage scenarios.\r\n\r\n1. General-purpose v2 accounts deliver the lowest per-gigabyte capacity prices for Azure Storage, as well as industry-competitive transaction prices.\r\n2. General-purpose v2 accounts support default account access tiers of hot or cool and blob level tiering between hot, cool, or archive.\r\n3. General-purpose v2 accounts allows you to also use lifecycle management to optimize your storage cost",
+ "style": "upsell"
+ },
+ "name": "Storage accounts"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'Microsoft.Storage/StorageAccounts' and kind !='StorageV2' and kind !='FileStorage' and kind != 'BlockBlobStorage'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend StorageAccountName=name, SAKind=kind,AccessTier=tostring(properties.accessTier),SKUName=sku.name, SKUTier=sku.tier, Location=location\r\n| order by id asc\r\n| project id,StorageAccountName, SKUName, SKUTier, SAKind,AccessTier, resourceGroup, Location, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Storage accounts which are not v2",
+ "noDataMessage": "All storage accounts are General-purpose v2",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SKUName",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SKUTier",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SAKind",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "AccessTier",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "storageaccount",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ }
+ ],
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_id_0",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "StorageAccountName",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SAKind",
+ "label": "Kind"
+ },
+ {
+ "columnId": "AccessTier",
+ "label": "Access Tier"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_id_0",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "name": "Get-Storagev1"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Storage"
+ },
+ "name": "group - StorageAccount"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Unattached Managed Disks\r\n\r\nReview Managed Disks that are not attached to any Virtual machine.\r\n\r\n## Last Modified Date\r\nClick on a cell in the specified row to view the last modified date. This may help identify when the disk became idle.\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/disks' and managedBy == \"\"\r\n| extend diskState = tostring(properties.diskState)\r\n| where (tags !contains \"kubernetes.io-created-for-pvc\") and tags !contains \"ASR-ReplicaDisk\" and tags !contains \"asrseeddisk\" and tags !contains \"RSVaultBackup\"\r\n| where (managedBy == \"\" and diskState != 'ActiveSAS')\r\nor (diskState == 'Unattached' and diskState != 'ActiveSAS')\r\n| extend DiskId=id, DiskIDfull=id, DiskName=name, SKUName=sku.name, SKUTier=sku.tier, DiskSizeGB=tostring(properties.diskSizeGB), Location=location, TimeCreated=tostring(properties.timeCreated), QuickFix=id, SubId=subscriptionId\r\n| order by DiskId asc \r\n| project DiskId,DiskIDfull, DiskName, DiskSizeGB, SKUName, SKUTier, resourceGroup, QuickFix, Location, TimeCreated, subscriptionId,SubId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend DiskId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct DiskId\r\n )\r\n on DiskId",
+ "size": 0,
+ "title": "Unattached disks",
+ "noDataMessage": "There aren't any unattached disks!",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "DiskIDfull",
+ "parameterName": "DiskID"
+ },
+ {
+ "fieldName": "DiskName",
+ "parameterName": "DiskName",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "resourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubId",
+ "parameterName": "subscriptionId",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "DiskIDfull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "ArmAction",
+ "linkLabel": "Remove Idle Disk",
+ "linkIsContextBlade": true,
+ "templateRunContext": {
+ "componentIdSource": "column",
+ "componentId": "DiskId",
+ "templateUriSource": "static",
+ "templateUri": "https://raw.githubusercontent.com/sebassem/MS-learn-Workbooks/main/Deploy-Tag.json",
+ "templateParameters": [
+ {
+ "name": "DiskID",
+ "source": "static",
+ "value": "DiskId",
+ "kind": "stringValue"
+ }
+ ],
+ "titleSource": "static",
+ "title": "Remove Idle Disk",
+ "descriptionSource": "static",
+ "description": "# Description\r\nThis ARM Template will remove the selected disk.\r\n\r\n# Actions:\r\n- Click \"Remove Idle Disk\" to remove the selected item.\r\n- Click View Template to examine the template and parameters used during deployment\r\n\r\n\r\n\r\n",
+ "runLabelSource": "static",
+ "runLabel": "Remove Idle Disk"
+ },
+ "armActionContext": {
+ "path": "/{DiskID}?api-version=2021-04-01",
+ "headers": [],
+ "params": [
+ {
+ "key": "DiskID",
+ "value": ""
+ }
+ ],
+ "httpMethod": "DELETE",
+ "title": "Remove Idle Disks",
+ "description": "# Disk Deletion Warning: {DiskName}\r\n\r\n**Attention!**\r\n\r\nThis action will permanently remove the disk with the name **{DiskName}**. Please ensure that this disk is not currently in use and that you are deleting the correct disk.\r\n\r\n**Resource Details:**\r\n\r\n- Disk Name: {DiskName}\r\n- Resource Group: {ResourceGroup}\r\n\r\n### Required RBAC Permissions\r\n\r\nTo perform this action, you need to have **Contributor** permissions on the Resource Group where the disk is located.\r\n\r\nPlease review the information carefully before proceeding with the deletion.\r\n",
+ "actionName": "Removing Idle Dsk",
+ "runLabel": "I understand, remove disk {DiskName}"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "labelSettings": [
+ {
+ "columnId": "DiskId",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "DiskName",
+ "label": "Name"
+ },
+ {
+ "columnId": "DiskSizeGB",
+ "label": "Disk Size (GB)"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "QuickFix",
+ "label": "Delete disk?"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "TimeCreated",
+ "label": "Time Created"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "customWidth": "80",
+ "name": "Get-Idle-Disk"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{subscriptionId}/resources?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-04-01\"},{\"key\":\"$expand\",\"value\":\"createdTime,changedTime,provisioningState\"},{\"key\":\"$filter\",\"value\":\"name eq '{DiskName}' and resourceGroup eq'{ResourceGroup}'\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"$..id\",\"columnid\":\"id\"},{\"path\":\"$..createdTime\",\"columnid\":\"createdTime\"},{\"path\":\"$..changedTime\",\"columnid\":\"changedTime\"},{\"path\":\"$.name\",\"columnid\":\"name\"}]}}]}",
+ "size": 0,
+ "title": "Disk last modified date",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "createdTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Name"
+ },
+ {
+ "columnId": "createdTime",
+ "label": "Created time"
+ },
+ {
+ "columnId": "changedTime",
+ "label": "Last change time"
+ }
+ ]
+ }
+ },
+ "customWidth": "20",
+ "conditionalVisibility": {
+ "parameterName": "DiskID",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ "name": "IdleDisk date"
+ }
+ ]
+ },
+ "name": "Idle Disks Group"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Premium disks attached to powered off virtual machines\r\nIf the VM associated with these premium disks has been deallocated for an extended period, consider changing the disk SKU to a less expensive option to save on costs. Premium disks are typically used for high-performance workloads, and if the VM is not in use, it might be more economical to downgrade the disk.",
+ "style": "upsell"
+ },
+ "name": "text - premiumAttachedToPoweredOffVMs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend vmId = tolower(tostring(id)), vmName = name, vmState = tostring(properties.extended.instanceView.powerState.displayStatus),VMRG=resourceGroup\r\n| where vmState == \"VM stopped\" or vmState == \"VM deallocated\"\r\n| extend storageProfile = parse_json(tostring(properties.storageProfile.osDisk))\r\n| extend managedDiskId = tolower(tostring(storageProfile.managedDisk.id))\r\n| join kind=inner (\r\n resources\r\n | where type == \"microsoft.compute/disks\"\r\n | where sku.name == \"Premium_LRS\" or sku.name == \"Premium_ZRS\"\r\n | extend diskId = tolower(tostring(id)), diskName = name, diskSKU=tostring(sku.name), diskTier=tostring(sku.tier)\r\n) on $left.managedDiskId == $right.diskId\r\n| project vmId, vmName, vmState, diskName,VMRG, diskId, diskSKU,diskTier\r\n",
+ "size": 0,
+ "title": "Premium disks attached to powered off VMs",
+ "noDataMessage": "None of your deallocated VMs have premium disks",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "vmName",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "vmId",
+ "label": "VM ID"
+ },
+ {
+ "columnId": "vmName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "vmState",
+ "label": "VM state"
+ },
+ {
+ "columnId": "diskName",
+ "label": "Disk name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "VM RG"
+ },
+ {
+ "columnId": "diskId",
+ "label": "Disk ID"
+ },
+ {
+ "columnId": "diskSKU",
+ "label": "Disk SKU"
+ },
+ {
+ "columnId": "diskTier",
+ "label": "Disk Tier"
+ }
+ ]
+ }
+ },
+ "name": "query-PremiumDiskDeallocatedVM"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Old Managed Disks snapshots\r\n\r\nReview Managed Disks snapshots that are older than 30 days\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 4"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend TimeCreated = properties.timeCreated\r\n| extend resourceGroup=strcat(\"/subscriptions/\",subscriptionId,\"/resourceGroups/\",resourceGroup)\r\n| where TimeCreated < ago(30d)\r\n| order by id asc \r\n| project id, resourceGroup, location, TimeCreated ,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Disk Snapshots with + 30 Days",
+ "noDataMessage": "No Snapshots with more than 30 days.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "TimeCreated",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Name"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "TimeCreated",
+ "label": "Time Created"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ }
+ },
+ "name": "Get-Old-Snapshots"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Managed Disks snapshots using Premium storage\r\n\r\nTo save 60% of cost, we recommend storing your snapshots in Standard Storage, regardless of the storage type of the parent disk. It is the default option for Managed Disks snapshots. Migrate your snapshot from Premium to Standard Storage.\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend StorageSku = tostring(sku.tier), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),diskSize=tostring(properties.diskSizeGB)\r\n| where StorageSku == \"Premium\"\r\n| project id,name,StorageSku,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
+ "size": 0,
+ "title": "Snapshots using premium storage",
+ "noDataMessage": "No snapshots are using Premium storage",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Id"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "StorageSku",
+ "label": "SKU"
+ },
+ {
+ "columnId": "diskSize",
+ "label": "Disk Size (GB)"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Id"
+ }
+ ]
+ }
+ },
+ "name": "query - Snapshots using premium storage"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Orphaned Managed Disks snapshots\r\n\r\nReview snapshots with deleted source disks.\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 6"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend parentDisk = properties.creationData.sourceResourceId, diskSize=tostring(properties.diskSizeGB),resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id,parentDisk,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
+ "size": 0,
+ "title": "All Managed Disks snapshots",
+ "noDataMessage": "No snapshots found",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Id"
+ },
+ {
+ "columnId": "parentDisk",
+ "label": "Parent Disk Resource Id"
+ },
+ {
+ "columnId": "diskSize",
+ "label": "Disk size (GB)"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Id"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "IsVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - Retrieve all snapshots"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/disks'\r\n| project id\r\n",
+ "size": 0,
+ "title": "All managed disks",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Id"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "True"
+ },
+ "name": "query - Retrieve all managed disks"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\",\"mergeType\":\"leftanti\",\"leftTable\":\"query - Retrieve all snapshots\",\"rightTable\":\"query - Retrieve all managed disks\",\"leftColumn\":\"parentDisk\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[query - Retrieve all snapshots].id\",\"mergedName\":\"Resource Id\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].parentDisk\",\"mergedName\":\"Parent Disk Resource Id\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].diskSize\",\"mergedName\":\"Disk size (GB)\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].location\",\"mergedName\":\"Location\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].subscriptionId\",\"mergedName\":\"Subscription Id\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].id1\",\"mergedName\":\"id1\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"}]}",
+ "size": 0,
+ "title": "Snapshots with deleted source disk",
+ "noDataMessage": "No orphaned snapshots found",
+ "noDataMessageStyle": 3,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Parent Disk Resource Id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Subscription Id",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Resource Id",
+ "label": "Resource Id"
+ },
+ {
+ "columnId": "Parent Disk Resource Id",
+ "label": "Parent Disk resource Id"
+ },
+ {
+ "columnId": "Disk size (GB)",
+ "label": "Disk size (GB)"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "Resource Group",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "Subscription Id",
+ "label": "Subscription Id"
+ }
+ ]
+ }
+ },
+ "showPin": false,
+ "name": "query - orphaned snapshots"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Disks"
+ },
+ "name": "Managed Disks Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Impact=tostring(properties.impact),resourceGroup,subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| where SubCategory has \"Microsoft.Storage\"\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Recommendation=tostring(properties.shortDescription.problem), Impact=tostring(properties.impact),resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2\r\n| where resourceGroup in ({ResourceGroup})",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Storage",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Storage"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where type has \"Microsoft.Storage\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all storageresources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"e84cba0d-e501-4f55-a761-9126fb305030\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Storage\",\"rightTable\":\"query - tags - list all storageresources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Storage].AffectedResource\",\"mergedName\":\"Affected Resource\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].Category\",\"mergedName\":\"Recommendation Category\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].SubCategory\",\"mergedName\":\"Affected Resource Type\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].subscriptionId\",\"mergedName\":\"Subscription ID\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[query - tags - list all storageresources].id\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].excludeProperty\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].isActive1\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].AdditionaInfo\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].lowCpuThreshold\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].excludeRecomm\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].recommendationTypeId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].maxCpuP95\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].stableId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].id\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Storage",
+ "noDataMessageStyle": 3,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Affected Resource Type",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Subscription ID",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ]
+ }
+ }
+ },
+ "showPin": false,
+ "name": "query - Merge - Storage Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "advisorStorage"
+ },
+ "name": "AdvisorGroupStorage"
+ }
+ ]
+ },
+ "name": "group - 0"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Storage"
+ }
+ ],
+ "name": "StorageGroup",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "94bd2bd0-5aa8-4df6-8cf7-603407f4e2d8",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "faa42c49-ab77-42a1-9aaf-d8508b9408af",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "99a44dfa-30e2-4b2e-80a8-e05d2daab672",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "a02c21a6-cd5e-4e02-bb87-00993a06d8e8",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "add52b5b-2e8d-45d3-a304-f6d8f4b205f7",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "1fc44b9a-2dd3-4b1f-bebd-b89d4ba6dfec",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual machines",
+ "subTarget": "VM",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "8a2fa734-a30e-404e-bf99-927c1891d4b9",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual machine scale sets",
+ "subTarget": "VMSS",
+ "style": "link"
+ },
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Advisor recommendations",
+ "subTarget": "advisorCompute",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Compute"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Virtual Machines\r\n## Stopped virtual machines\r\nA virtual machine in a stopped state is still allocated the resources it was assigned, such as CPU and memory, but the VM itself is powered off. This allows for a quick startup when needed, but you are still billed for the allocated resources.",
+ "style": "upsell"
+ },
+ "name": "text - StoppedVM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/virtualmachines' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM deallocated' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM running'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| order by id asc\r\n| project id, PowerState, VMLocation, resourceGroup, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n | project-away id1",
+ "size": 0,
+ "title": "Virtual Machines in a Stopped State",
+ "noDataMessage": "You have no VMs in a stopped state",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "name": "Get-StoppedVM"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Deallocated virtual machines\r\nA virtual machine in a deallocated state is not only powered off, but the underlying host infrastructure is also released, resulting in no charges for the allocated resources while the VM is in this state. However, some Azure resources such as disks and networking continue to incur charges.",
+ "style": "upsell"
+ },
+ "name": "text - DeallocatedVM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/virtualmachines' and tostring(properties.extended.instanceView.powerState.displayStatus) == 'VM deallocated'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| order by id asc\r\n| project id, PowerState, VMLocation, resourceGroup, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n | project-away id1",
+ "size": 0,
+ "title": "Virtual Machines in a deallocated State",
+ "noDataMessage": "You have no VMs in a deallocated state",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true
+ }
+ },
+ "name": "query - vmDeallocatedState"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "### Explore Different Processor Architectures to Optimize Costs\r\n\r\nDifferent processor architectures may offer cost advantages depending on your workload requirements. By exploring various processor types, you may find opportunities to reduce compute costs.\r\n\r\nConsider evaluating different architectures to determine the best fit for your needs.\r\n",
+ "style": "info"
+ },
+ "name": "Text Processor type"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/virtualmachines'\r\n| extend vmSize = properties.hardwareProfile.vmSize\r\n| extend processorType = case(\r\n // ARM Processors\r\n vmSize has \"Epsv5\" or vmSize has \"Epdsv5\" or vmSize has \"Dpsv5\" or vmSize has \"Dpdsv\", \"ARM\",\r\n // AMD Processors\r\n vmSize has \"Standard_D2a\" or vmSize has \"Standard_D4a\" or vmSize has \"Standard_D8a\" or vmSize has \"Standard_D16a\" or vmSize has \"Standard_D32a\" or vmSize has \"Standard_D48a\" or vmSize has \"Standard_D64a\" or vmSize has \"Standard_D96a\" or vmSize has \"Standard_D2as\" or vmSize has \"Standard_D4as\" or vmSize has \"Standard_D8as\" or vmSize has \"Standard_D16as\" or vmSize has \"Standard_D32as\" or vmSize has \"Standard_D48as\" or vmSize has \"Standard_D64as\" or vmSize has \"Standard_D96as\", \"AMD\",\r\n \"Intel\"\r\n)\r\n| summarize count() by processorType\r\n",
+ "size": 0,
+ "title": "ProcessorType per VM",
+ "noDataMessage": "There are no VMs in your environment.",
+ "noDataMessageStyle": 5,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "customWidth": "50",
+ "name": "ProcessorType per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/virtualmachines'\r\n| extend vmSize = properties.hardwareProfile.vmSize\r\n| extend processorType = case(\r\n // ARM Processors\r\n vmSize has \"Epsv5\" or vmSize has \"Epdsv5\" or vmSize has \"Dpsv5\" or vmSize has \"Dpdsv\", \"ARM\",\r\n // AMD Processors\r\n vmSize has \"Standard_D2a\" or vmSize has \"Standard_D4a\" or vmSize has \"Standard_D8a\" or vmSize has \"Standard_D16a\" or vmSize has \"Standard_D32a\" or vmSize has \"Standard_D48a\" or vmSize has \"Standard_D64a\" or vmSize has \"Standard_D96a\" or vmSize has \"Standard_D2as\" or vmSize has \"Standard_D4as\" or vmSize has \"Standard_D8as\" or vmSize has \"Standard_D16as\" or vmSize has \"Standard_D32as\" or vmSize has \"Standard_D48as\" or vmSize has \"Standard_D64as\" or vmSize has \"Standard_D96as\" or vmSize has \"Standard_D2ads\" or vmSize has \"Standard_D4ads\"or vmSize has \"Standard_D8ads\" or vmSize has \"Standard_D16ads\" or vmSize has \"Standard_D32ads\"or vmSize has \"Standard_D48ads\"or vmSize has \"Standard_D64ads\"or vmSize has \"Standard_D96ads\", \"AMD\",\r\n \"Intel\"\r\n)\r\n| project vmName = name, processorType, vmSize, resourceGroup\r\n",
+ "size": 0,
+ "title": "List of VMs per processor type",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "customWidth": "50",
+ "name": "query - 1"
+ }
+ ]
+ },
+ "name": "Group VM per Processor Type"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ },
+ "name": "group - VMs"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Impact=tostring(properties.impact),subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Recommendation=tostring(properties.shortDescription.problem), Impact=tostring(properties.impact),resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=tostring(properties.impact),resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| where Category == 'Cost' \r\n| where SubCategory has \"Microsoft.Compute\" or SubCategory has \"Container\" or SubCategory has \"Web\"\r\n| where SubCategory !has \"Microsoft.Compute/disks\"\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Compute",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "IsVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Compute"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where (type has \"Microsoft.Compute\" or type has \"Microsoft.ContainerService\" or type has \"serverfarms\") and type !has \"Disks\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all compute resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d446799d-b1af-4bca-9d72-84ba2d870039\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Compute\",\"rightTable\":\"query - tags - list all compute resources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Compute].AffectedResource\",\"mergedName\":\"Affected Resource\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].Category\",\"mergedName\":\"Recommendation Category\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].SubCategory\",\"mergedName\":\"Affected Resource Type\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].subscriptionId\",\"mergedName\":\"Subscription ID\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].id\",\"mergedName\":\"id\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].stableId\",\"mergedName\":\"stableId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].recommendationTypeId\",\"mergedName\":\"recommendationTypeId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].maxCpuP95\",\"mergedName\":\"maxCpuP95\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].excludeRecomm\",\"mergedName\":\"excludeRecomm\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].lowCpuThreshold\",\"mergedName\":\"lowCpuThreshold\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].AdditionaInfo\",\"mergedName\":\"AdditionaInfo\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].isActive1\",\"mergedName\":\"isActive1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].excludeProperty\",\"mergedName\":\"excludeProperty\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[query - tags - list all compute resources].id\",\"mergedName\":\"id1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].location\",\"mergedName\":\"location\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Compute",
+ "noDataMessageStyle": 3,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Affected Resource Type",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Resource Group",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription ID",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ]
+ }
+ }
+ },
+ "showPin": false,
+ "name": "query - Merge - Compute Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "advisorCompute"
+ },
+ "name": "AdvisorGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Virtual Machine Scale Sets\r\n## Save with Azure Spot VMs on Virtual Machine Scale Sets\r\nUsing Azure Spot Virtual Machines on scale sets allows you to take advantage of our unused capacity at a significant cost savings. At any point in time when Azure needs the capacity back, the Azure infrastructure will evict Azure Spot Virtual Machine instances. Therefore, Azure Spot Virtual Machine instances are great for workloads that can handle interruptions like batch processing jobs, dev/test environments, large compute workloads, and more.\r\n\r\n## Spot Priority Mix\r\nAzure allows you to have the flexibility of running a mix of uninterruptible standard VMs and interruptible Spot VMs for Virtual Machine Scale Set deployments. You're able to deploy this Spot Priority Mix using Flexible orchestration to easily balance between high-capacity availability and lower infrastructure costs according to your workload requirements\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 8"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/virtualmachinescalesets'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend SpotVMs=tostring(properties.virtualMachineProfile.priority), SpotPriorityMix=tostring(properties.priorityMixPolicy), SKU=tostring(sku.name), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id, SKU, SpotVMs,SpotPriorityMix,subscriptionId,resourceGroup, location\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SpotVMs",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Spot",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not using Spot VMs"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SpotPriorityMix",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "2",
+ "text": "Not using Spot Priority Mix"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "SKU",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SpotVMs",
+ "label": "Spot VMs"
+ },
+ {
+ "columnId": "SpotPriorityMix",
+ "label": "Spot Priority Mix"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ }
+ ]
+ }
+ },
+ "name": "query - 9"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VMSS"
+ },
+ "name": "group - VMSS"
+ }
+ ]
+ },
+ "name": "Compute - Subscription"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Compute"
+ }
+ ],
+ "name": "ComputeGroup",
+ "styleSettings": {
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ "name": "group - usage optimization"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Commitment-based savings\r\nTo maximize your Azure savings, consider savings plans for flexible usage and reserved instances for persistent needs. Azure Savings plans offer reduced rates with a fixed hourly spend and reserved instances allow pre-purchasing VM base price. Both options provide discounts and adapt to your usage patterns, helping you manage costs effectively. Below is an estimate of how much you can potentially save with 1-Year commitment for each option based on your usage pattern for the last 30 days.β",
+ "style": "upsell"
+ },
+ "customWidth": "50",
+ "name": "text - P1YTotalSavings"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Commitment-based savings\r\nTo maximize your Azure savings, consider savings plans for flexible usage and reserved instances for persistent needs. Savings plans offer reduced rates with a fixed hourly spend, while reserved instances allow pre-purchasing VM base price. Both options provide discounts and adapt to your usage patterns, helping you manage costs effectively. Below is an estimate of how much you can save with 3-Year commitment for each option based on your usage pattern for the last 30 days.β",
+ "style": "upsell"
+ },
+ "customWidth": "50",
+ "name": "text - P3YTotalSavings - Copy"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and (properties.shortDescription.solution contains \"Reserved Instance\" or properties.shortDescription.solution contains \"savings plan\")\r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"P1Y\" and lookbackPeriod == \"Last 30 days\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId),\r\ntypeOfRecommendation = iif(properties.shortDescription.solution contains \"Reserved Instance\", \"Reservations\", \"Savings plan\")\r\n| where term == \"P1Y\" and lookbackPeriod == \"Last 30 days\"\r\n| summarize bin (sum(savings), 0.01) by typeOfRecommendation,currency\r\n| order by sum_savings desc\r\n",
+ "size": 0,
+ "title": "1 year total commitment-based savings",
+ "noDataMessage": "There are no commitment-based recommendations",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "value::all"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Reservations",
+ "label": "Azure Reservations"
+ },
+ {
+ "seriesName": "Savings plan",
+ "label": "Azure Savings Plan for Compute"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "name": "query - CommitmentBasedSavingsP1Y"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and (properties.shortDescription.solution contains \"Reserved Instance\" or properties.shortDescription.solution contains \"savings plan\")\r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"P3Y\" and lookbackPeriod == \"Last 30 days\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId),\r\ntypeOfRecommendation = iif(properties.shortDescription.solution contains \"Reserved Instance\", \"Reservations\", \"Savings plan\")\r\n| where term == \"P3Y\" and lookbackPeriod == \"Last 30 days\"\r\n| summarize bin (sum(savings), 0.01) by typeOfRecommendation,currency\r\n| order by sum_savings desc\r\n",
+ "size": 0,
+ "title": "3 years total commitment-based savings",
+ "noDataMessage": "There are no commitment-based recommendations",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "value::all"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Reservations",
+ "label": "Azure Reservations"
+ },
+ {
+ "seriesName": "Savings plan",
+ "label": "Azure Savings Plan for Compute"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "name": "query - CommitmentBasedSavingsP3Y"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "792df0b2-35da-403d-999d-ff81ea8d4f56",
+ "cellValue": "selectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Hybrid Benefit",
+ "subTarget": "AHB",
+ "style": "link"
+ },
+ {
+ "id": "56eb4166-cb7c-4384-94a9-c5f201e1316d",
+ "cellValue": "selectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Reservations",
+ "subTarget": "Reservations",
+ "style": "link"
+ },
+ {
+ "id": "799d4fc7-5790-467c-84cc-ce4b4cc34a3f",
+ "cellValue": "selectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure savings plan for compute",
+ "subTarget": "SavingsPlan",
+ "style": "link"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ "name": "links - rate optimization tabs"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "**Reserved instances** can provide a significant discount over on-demand prices. With reserved instances, you can pre-purchase the base costs for your virtual machines. \r\n Discounts will automatically apply to new or existing VMs that have the same size and region as your reserved instance. We analyzed your usage over selected Term, look-back period and recommend money-saving reserved instancesβ.\r\n This query will only provide you recommendations for single scope reserved instances. *To learn more about Reserved Instances, go to this [link.](https://learn.microsoft.com/azure/cost-management-billing/manage/understand-vm-reservation-charges)*",
+ "style": "info"
+ },
+ "name": "text - advisorReservationdDisclaimer"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "a1960768-9da4-455d-b6f6-6d43098cff76",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "2b8ca845-75ba-4f4b-acad-54ee50d66d54",
+ "version": "KqlParameterItem/1.0",
+ "name": "LookBackPeriod",
+ "label": "Look back period",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n {\"value\": \"Last 7 days\"},\r\n {\"value\": \"Last 30 days\"},\r\n {\"value\": \"Last 60 days\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Last 60 days"
+ },
+ {
+ "id": "953c9e4c-af03-4fb7-bf30-3f1bfdf09199",
+ "version": "KqlParameterItem/1.0",
+ "name": "term",
+ "label": "Term",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[[\r\n {\r\n \"value\": \"P1Y\",\r\n \"Selected\": \"true\"\r\n },\r\n {\r\n \"value\": \"P3Y\"\r\n }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "P3Y"
+ },
+ {
+ "id": "c46193fe-f1b2-49d1-a9bc-c9f5149f0194",
+ "version": "KqlParameterItem/1.0",
+ "name": "resourceType",
+ "label": "Resource type",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"Reserved Instance\"\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType)\r\n| distinct reservedResourceType",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - reservationsParams"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"Reserved Instance\" \r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| summarize Subscriptions=dcount(resources), \r\n bin (sum(savings), 0.01) by Recommendation ,reservedResourceType ,lookbackPeriod,scope,term ,currency\r\n| order by sum_savings desc\r\n",
+ "size": 0,
+ "title": "Reservations Summary",
+ "noDataMessage": "No reservations recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "categoricalbar",
+ "gridSettings": {
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "reservedResourceType",
+ "label": "Resource type"
+ },
+ {
+ "columnId": "lookbackPeriod",
+ "label": "Look back period"
+ },
+ {
+ "columnId": "scope",
+ "label": "Scope"
+ },
+ {
+ "columnId": "term",
+ "label": "Term"
+ },
+ {
+ "columnId": "currency",
+ "label": "Currency"
+ },
+ {
+ "columnId": "sum_savings",
+ "label": "Total annual savings"
+ }
+ ]
+ },
+ "chartSettings": {
+ "xAxis": "reservedResourceType",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Reservations Summary"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"Reserved Instance\" \r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nsubscription = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| project Recommendation,reservedResourceType,displaySKU,displayQty,savings,currency,lookbackPeriod,term,region,subscription\r\n| order by savings desc\r\n",
+ "size": 0,
+ "title": "Reservations details",
+ "noDataMessage": "No reservations recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Recommendation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "reservedResourceType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscription",
+ "reservedResourceType"
+ ],
+ "expandTopLevel": false
+ },
+ "labelSettings": [
+ {
+ "columnId": "displaySKU",
+ "label": "SKU"
+ },
+ {
+ "columnId": "displayQty",
+ "label": "Quantity"
+ },
+ {
+ "columnId": "savings",
+ "label": "Total annual savings"
+ },
+ {
+ "columnId": "currency",
+ "label": "Currency"
+ },
+ {
+ "columnId": "lookbackPeriod",
+ "label": "Look back period"
+ },
+ {
+ "columnId": "term",
+ "label": "Term"
+ },
+ {
+ "columnId": "region",
+ "label": "Region"
+ },
+ {
+ "columnId": "subscription",
+ "label": "Subscription"
+ }
+ ]
+ },
+ "chartSettings": {
+ "xAxis": "reservedResourceType",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Reservations details"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Reservations"
+ }
+ ],
+ "name": "group - Reservations"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "We analyzed your compute usage over the last 30 days and recommend adding a savings plan to increase your savings. The savings plan unlocks lower prices on select compute services when you commit to spend a fixed hourly amount for 1 or 3 years. As you use select compute services globally, your usage is covered by the plan at reduced prices. During the times when your usage is above your hourly commitment, youβll simply be billed at your regular pay-as-you-go prices. With savings automatically applying across compute usage globally, youβll continue saving even as your usage needs change over time. Savings plan are more suited for dynamic workloads while accommodating for planned or unplanned changes while reservations are more suited for stable, predictable workloads with no planned changes. Saving estimates are calculated for individual subscriptions and the usage pattern observed over last 30 days. **Shared scope savings plans are available in purchase experience and can further increase savings.** \r\nTo learn more about Savings Plan, check out this [link.](https://learn.microsoft.com/azure/cost-management-billing/savings-plan/purchase-recommendations)β",
+ "style": "info"
+ },
+ "name": "text - advisorSavingsPlanDisclaimer"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "a1960768-9da4-455d-b6f6-6d43098cff76",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "2b8ca845-75ba-4f4b-acad-54ee50d66d54",
+ "version": "KqlParameterItem/1.0",
+ "name": "LookBackPeriod",
+ "label": "Look back period",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n {\"value\": \"Last 7 days\"},\r\n {\"value\": \"Last 30 days\"},\r\n {\"value\": \"Last 60 days\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Last 30 days"
+ },
+ {
+ "id": "953c9e4c-af03-4fb7-bf30-3f1bfdf09199",
+ "version": "KqlParameterItem/1.0",
+ "name": "term",
+ "label": "Term",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[[\r\n {\r\n \"value\": \"P1Y\",\r\n \"Selected\": \"true\"\r\n },\r\n {\r\n \"value\": \"P3Y\"\r\n }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "P1Y"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - savingsPlanParams"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"savings plan\"\r\n| extend recommendationTypeId = tostring(properties.recommendationTypeId),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId),\r\ncommitment = tostring(properties.extendedProperties.commitment)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\ncommitment = tostring(properties.extendedProperties.commitment),\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend lookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId),\r\ncommitment = tostring(properties.extendedProperties.commitment)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| summarize Subscriptions=dcount(resources), \r\n bin (sum(savings), 0.01) by subscription ,commitment ,lookbackPeriod,scope,term ,currency\r\n| order by sum_savings desc\r\n| join (\r\nresourcecontainers\r\n| where type == 'microsoft.resources/subscriptions'\r\n| extend subscription = subscriptionId\r\n| project name,subscription\r\n) on subscription\r\n| project-away subscription1,subscription\r\n",
+ "size": 0,
+ "title": "Savings plan Summary",
+ "noDataMessage": "No savings plan recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "categoricalbar",
+ "gridSettings": {
+ "filter": true
+ },
+ "chartSettings": {
+ "xAxis": "name",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Saving plan Summary"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"savings plan\"\r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId),\r\ncommitment = tostring(properties.extendedProperties.commitment)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\nstableId = name,\r\ncommitment = tostring(properties.extendedProperties.commitment),\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend lookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\ncommitment = tostring(properties.extendedProperties.commitment),\r\nregion = tostring(properties.extendedProperties.region),\r\nsubscription = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| project Recommendation,savings,commitment,currency,lookbackPeriod,term,subscription\r\n| order by savings desc\r\n| join (\r\nresourcecontainers\r\n| where type == 'microsoft.resources/subscriptions'\r\n| extend subscription = subscriptionId\r\n| project id,name,subscription\r\n) on subscription\r\n| project-away subscription1,subscription\r\n",
+ "size": 0,
+ "title": "Savings plan details",
+ "noDataMessage": "No savings plan recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Recommendation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "reservedResourceType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscription",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "id"
+ ]
+ },
+ "labelSettings": [
+ {
+ "columnId": "savings",
+ "label": "Total annual savings"
+ },
+ {
+ "columnId": "commitment",
+ "label": "Commitment"
+ },
+ {
+ "columnId": "currency",
+ "label": "Currency"
+ },
+ {
+ "columnId": "lookbackPeriod",
+ "label": "Look back period"
+ },
+ {
+ "columnId": "term",
+ "label": "Term"
+ }
+ ]
+ },
+ "chartSettings": {
+ "xAxis": "reservedResourceType",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Savings plan details"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "SavingsPlan"
+ }
+ ],
+ "name": "group - SavingsPlan"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "2b43eb64-bca3-444a-8003-003554236fe7",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "03fbf28a-892d-4b68-929c-3ba5056f4b94",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "566c43ae-f300-43be-aa0d-61d92ba8da87",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "a9df02ed-7100-4130-952f-a3d9d5d364af",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "66406915-1f07-448f-8170-2f3b0dc6dc00",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibility": {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "f74bc7f5-2b16-4440-8053-106e040b73b6",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadType": "always",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Azure Hybrid Benefit\r\nFor customers with Software Assurance, Azure Hybrid Benefit for Windows Server allows you to use your on-premises Windows Server licenses to run Windows virtual machines on Azure at a reduced cost. This article discusses how to deploy new VMs with Azure Hybrid Benefit for Windows Server enabled, and how you can update any existing running VMs. For more information about Azure Hybrid Benefit for Windows Server licensing and cost savings, see the [Azure Hybrid Benefit for Windows Server licensing page](https://azure.microsoft.com/pricing/hybrid-use-benefit/)\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "Azure Hybrid Benefit"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "API-Get_VM_SKU"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "3f12a4b6-b18d-4191-8c1c-6045a7edcb6b",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "VM/VMSS",
+ "subTarget": "VM",
+ "style": "link"
+ },
+ {
+ "id": "78ac1878-4b69-4f32-af1f-a8f095afbed5",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL",
+ "subTarget": "SQL",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 1"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Virtual Machines",
+ "subTarget": "VM",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Linux Virtual Machines",
+ "subTarget": "LinuxVM",
+ "style": "link"
+ },
+ {
+ "id": "79e7a97a-1413-41e8-b4c6-ebd1d0a45e2e",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "VM Scale Set",
+ "subTarget": "VMSS",
+ "style": "link"
+ },
+ {
+ "id": "be820ada-a0f4-4c51-b17b-3e506edd1410",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Custom Images",
+ "subTarget": "CustomImages",
+ "style": "link"
+ },
+ {
+ "id": "1dda3cc4-59ba-4758-9c51-d6c9fab18647",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Arc",
+ "subTarget": "arc",
+ "style": "link"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ },
+ "name": "links - 4"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "CustomImageAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType != \"Windows\"\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ },
+ "name": "CustomImageAHBDisabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Custom Images - Windows Azure Hybrid Benefit (AHB) Overview\r\n#### Note: This tab contains information only about Custom Images where the OS is Windows."
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors-CustomImages",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name, SubId=id\r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows, SubId, SubscriptionName\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SubId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "finalBy": "SubscriptionName"
+ },
+ "labelSettings": [
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckAHBWindows",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB per Subscription - Custom Images"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "Prioritize AHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "showPin": false,
+ "name": "ConsumedCoresPerAhubpriority-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "30",
+ "showPin": false,
+ "name": "ConsumedCoresPerVM-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"}]}",
+ "size": 0,
+ "title": "Required CPU cores for AHB activation on remaining VMs",
+ "noDataMessage": "All VMs within the current scope have AHB enabled",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "36",
+ "showPin": false,
+ "name": "CoresNotEnabledperAHBPriority-CustomImages"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBEnabled",
+ "label": "See VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBDisabled",
+ "label": "See VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VM AHB Enabled - CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"ConsumedCoresPerAhubpriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBEnabeld-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"CoresNotEnabledperAHBPriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit not enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBDisabled-CustomImages"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "CustomImages"
+ },
+ "name": "CustomImages"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "3f12a4b6-b18d-4191-8c1c-6045a7edcb6b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server ESU licenses",
+ "subTarget": "windowsEsu",
+ "style": "link"
+ },
+ {
+ "id": "0ca197b7-6f96-4def-9be4-dc26bb09538a",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server Management enabled by Azure Arc",
+ "subTarget": "arcAHB",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 1"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server ESU licenses",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| project name, status, operatingSystem, esuStatus\r\n| summarize count() by esuStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not enabled",
+ "color": "red"
+ },
+ {
+ "seriesName": "Enabled",
+ "color": "green"
+ },
+ {
+ "seriesName": "Enabled by Volume License",
+ "color": "greenDarkDark"
+ },
+ {
+ "seriesName": "License deactivated",
+ "color": "yellow"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Review Your Current License Usage\r\n\r\nTo review your current license usage, go to the [Azure Arc](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/usageOverview) resource blade.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "e24ddae0-37c5-46a7-b52f-b307baaa6f51",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleLicenses",
+ "label": "View eligible licenses?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Windows Server 2012 or 2012 R2 machines running Arc agent version below 1.34 are ineligible for Extended Security Updates (ESUs). Upgrade to the latest version of the Azure Arc agent to allow enabling ESU on these machines.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| extend esuStatusIcon = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), '8',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' or properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '7',\r\n '91'\r\n)\r\n| project name, status, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags, esuStatus, esuStatusIcon, agentVersion\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesEsu','Microsoft.HybridCompute/machines'))\r\n| project name,esuStatus,esuStatusIcon,operatingSystem,resourceGroup,subscriptionDisplayName,status,type,id,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "windowsEsu"
+ },
+ "name": "group-Esu"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server Management enabled by Azure Arc",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Benefits of Windows Server Management with Azure Arc\r\n\r\nWindows Server Management enabled by Azure Arc offers customers with Windows Server licenses that have active Software Assurances or Windows Server licenses that are active subscription licenses a few benefits, including access to Azure Update Management, Azure Change Tracking and Inventory and Windwos best practices assessment. FOr the full list of benefits, visit [Windows Server Management enabled by Azure Arc.](https://learn.microsoft.com/azure/azure-arc/servers/windows-server-management-overview?tabs=portal)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| summarize count() by benefitsStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not activated",
+ "color": "red"
+ },
+ {
+ "seriesName": "Activated",
+ "color": "green"
+ },
+ {
+ "seriesName": "Activated via Pay-as-you-go",
+ "color": "greenDarkDark"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Yes"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "To enable Windows Server Management with Azure Arc, visit the [Arc service blade.](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/softwareAssurance)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleAHBResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "benefitsStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "3",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcAHBResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arcAHB"
+ },
+ "name": "group-ahbArc"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arc"
+ },
+ "name": "Arc"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Virtual Machines",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) has \"Windows\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "VMRG",
+ "formatter": 0,
+ "tooltipFormat": {
+ "tooltip": "test"
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "WindowsAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| where properties.changeType == \"Update\" and properties.targetResourceType == \"microsoft.compute/virtualmachines\"\r\n| mv-expand changes = properties.changes\r\n| mv-expand LicenseChanges=changes.['properties.licenseType']\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| where isnotnull(LicenseChanges)\r\n| where tostring(LicenseChanges.newValue) has \"Windows\"\r\n| project VMID=properties.targetResourceId, NewLicense=tostring(LicenseChanges.newValue), DateofChange=todatetime(properties.changeAttributes.timestamp)\r\n",
+ "size": 0,
+ "title": "VM Latest Change Last 7 days",
+ "noDataMessage": "AHB was not enabled in the last 7 days.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "VM Latest Change Last 7 days"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - Get VM vCPU"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Windows Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckAHBWindows\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "sortBy": [
+ {
+ "itemKey": "SubscriptionName",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "SubscriptionName",
+ "sortOrder": 1
+ }
+ ],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckAHBWindows",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB per Subscription"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"WindowsAHBEnabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[WindowsAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "noDataMessage": "None of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per AHB Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26130\",\"mergeType\":\"inner\",\"leftTable\":\"WindowsAHBEnabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].Name\",\"mergedName\":\"Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ConsumedCores",
+ "formatter": 0,
+ "formatOptions": {
+ "aggregation": "Sum"
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {},
+ "leftContent": {
+ "columnMatch": "ConsumedCores",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "blue"
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0
+ },
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"AHB Disabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Cores NOT enabled per AHB Priority"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBEnabled",
+ "label": "See VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBDisabled",
+ "label": "See VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ },
+ {
+ "id": "20a00706-a89b-42aa-8dea-9c44c93e8014",
+ "version": "KqlParameterItem/1.0",
+ "name": "LastAHB",
+ "label": "See VMs AHB enabled in the last 7 days",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VM AHB Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Windows VMs without Hybrid Benefit groupped by Subscription.",
+ "style": "info"
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "List of Windows VMs without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"AHB Disabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].VMName\",\"mergedName\":\"VM Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[AHB Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[AHB Disabled].WindowsId\"},{\"originalName\":\"[AHB Disabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "VMs without AHB",
+ "noDataMessage": "All of your VMs have AHB enabled",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "VMIDFull",
+ "parameterName": "WindowsID"
+ },
+ {
+ "fieldName": "VMRG",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "VM Name",
+ "parameterName": "VMName",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Prioritize AHB?",
+ "parameterName": "AHBPriority",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "ArmAction",
+ "linkLabel": "Apply Hybrid Benefit",
+ "linkIsContextBlade": true,
+ "armActionContext": {
+ "path": "/{WindowsID}?api-version=2023-03-01",
+ "headers": [],
+ "params": [],
+ "body": "{\r\n \"properties\": {\r\n \"licenseType\": \"Windows_Server\"\r\n }\r\n}\r\n\r\n",
+ "httpMethod": "PATCH",
+ "title": "Apply Hybrid Benefit to VM {VMName}",
+ "description": "# Windows Hybrid Benefit Application Information: VM \"{VMName}\"\n\n\n{WindowsID}\n\n**Attention!**\n\nThis action will apply the Windows Hybrid Benefit to the virtual machine with the name **{VMName}**. Please ensure that you are applying the benefit to the correct VM.\n\n**Resource Details:**\n\n- VM Name: {VMName}\n- Resource Group: {ResourceGroup}\n- Prioritize AHB: {AHBPriority}\n\n### Required RBAC Permissions\n\nTo perform this action, you need to have **Contributor** permissions on the Resource Group where the VM is located.\n\nPlease review the information carefully before proceeding with applying the Windows Hybrid Benefit.\n",
+ "actionName": "Applying Hybrid benefit to VM {VMName}",
+ "runLabel": "Apply Hybrid Benefit to VM: \"{VMName}\""
+ }
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ },
+ "tooltipFormat": {
+ "tooltip": "The virtual machines (VMs) with less than 8 cores are categorized as Low Priority, while those with 8 or more cores are classified as High Priority. "
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "HyperVGenerations",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "vCPUsPerCore",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "VM Name",
+ "label": "VM Name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "QuickFix",
+ "label": "Enable AHB"
+ },
+ {
+ "columnId": "Prioritize AHB?",
+ "label": "AHB Priority"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS Type"
+ },
+ {
+ "columnId": "OsVersion",
+ "label": "OS Version"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "MemoryGB",
+ "label": "Memory"
+ },
+ {
+ "columnId": "MaxNetworkInterfaces",
+ "label": "Max. NICs"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VM+SKU+vCores"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Windows VMs with Hybrid Benefit groupped by Subscription.",
+ "style": "info"
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "AHB By SUbscription"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"WindowsAHBEnabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[WindowsAHBEnabled].WindowsId\",\"mergedName\":\"VM Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\",\"mergedName\":\"Resource Group\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMSize\",\"mergedName\":\"VM SKU\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\",\"mergedName\":\"License Type\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\",\"mergedName\":\"Location\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\",\"mergedName\":\"OS Type\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\",\"mergedName\":\"OS Version\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"},{\"originalName\":\"[WindowsAHBEnabled].VMName\"}]}",
+ "size": 0,
+ "title": "VMs with AHB",
+ "noDataMessage": "None of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "2",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Subscription Name",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "WindowsId1",
+ "label": "VM ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VM+SKU+vCores-AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26168\",\"mergeType\":\"inner\",\"leftTable\":\"VM Latest Change Last 7 days\",\"rightTable\":\"VM+SKU+vCores-AHB\",\"leftColumn\":\"VMID\",\"rightColumn\":\"VM Name\"}],\"projectRename\":[{\"originalName\":\"[VM Latest Change Last 7 days].VMID\",\"mergedName\":\"VMID\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].NewLicense\",\"mergedName\":\"NewLicense\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].DateofChange\",\"mergedName\":\"DateofChange\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].VM Name\",\"mergedName\":\"VM Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Resource Group\",\"mergedName\":\"Resource Group\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].VM SKU\",\"mergedName\":\"VM SKU\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Prioritize AHB?\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].License Type\",\"mergedName\":\"License Type\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Consumed Cores per VM\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Location\",\"mergedName\":\"Location\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Type\",\"mergedName\":\"OS Type\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Version\",\"mergedName\":\"OS Version\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VM+SKU+vCores-AHB].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Total Cores Enabled last 7 Days",
+ "noDataMessage": "Windows AHB hasn't been enabled in the last 7 days",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "barchart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LastAHB",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "Total Cores Enabled last 7 Days"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26168\",\"mergeType\":\"inner\",\"leftTable\":\"VM Latest Change Last 7 days\",\"rightTable\":\"VM+SKU+vCores-AHB\",\"leftColumn\":\"VMID\",\"rightColumn\":\"VM Name\"}],\"projectRename\":[{\"originalName\":\"[VM+SKU+vCores-AHB].VM Name\",\"mergedName\":\"VM Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Resource Group\",\"mergedName\":\"Resource Group\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].NewLicense\",\"mergedName\":\"NewLicense\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].DateofChange\",\"mergedName\":\"DateofChange\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].VM SKU\",\"mergedName\":\"VM SKU\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Consumed Cores per VM\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Prioritize AHB?\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Location\",\"mergedName\":\"Location\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VM+SKU+vCores-AHB].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[VM Latest Change Last 7 days].VMID\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Type\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Version\"},{\"originalName\":\"[VM+SKU+vCores-AHB].License Type\"}]}",
+ "size": 0,
+ "title": "Total Cores Enabled last 7 Days - Detailed view",
+ "noDataMessage": "No AHB has been enabled in the last 7 days",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "table",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LastAHB",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "Total Cores Enabled last 7 Days - Details"
+ }
+ ]
+ },
+ "name": "VM"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ },
+ {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ }
+ ],
+ "name": "VM/VMSS-RGFilter"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL Server VMs",
+ "subTarget": "SQLVM",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "79e7a97a-1413-41e8-b4c6-ebd1d0a45e2e",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL DB",
+ "subTarget": "SQLDB",
+ "style": "link"
+ },
+ {
+ "id": "1f381e5b-7071-41ce-a354-c2df93445cae",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL Managed Instances",
+ "subTarget": "SQLMI",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 4"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and tostring(properties.['sqlServerLicenseType']) != 'AHUB' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n ) on subscriptionId \r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Compute/virtualmachines'\r\n | project VMName = tolower(name), VMSize = tostring(properties.hardwareProfile.vmSize)\r\n ) on VMName\r\n| order by id asc \r\n| project SQLID,VMName,VMRG, VMLocation, VMSize, SQLVersion, SQLSKU, SQLAgentType, LicenseType, SubscriptionName\r\n| where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID",
+ "size": 0,
+ "title": "SQL VM AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-SQL-AHB-Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and tostring(properties.['sqlServerLicenseType']) == 'AHUB' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n ) on subscriptionId \r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Compute/virtualmachines'\r\n | project VMName = tolower(name), VMSize = tostring(properties.hardwareProfile.vmSize)\r\n ) on VMName\r\n| order by id asc \r\n| project SQLID,VMName,VMRG, VMLocation, VMSize, SQLVersion, SQLSKU, SQLAgentType, LicenseType, SubscriptionName\r\n| where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID",
+ "size": 0,
+ "title": "SQL VM AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 5,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-SQL-AHB-Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## SQL Virtual Machines Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "SQL Text"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "SQL License Info",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL on VMs with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": "AHB Overview21"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n | where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID\r\n | extend CheckSQLVMAHB = case(\r\n type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines', iif((properties.['sqlServerLicenseType'])\r\n !has 'AHUB', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckSQLVMAHB",
+ "size": 0,
+ "title": "Summary of SQL on VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckSQLVMAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of Resources"
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLVMAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL on VMs with or without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n | where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID\r\n | extend CheckSQLVMAHB = case(\r\n type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines', iif((properties.['sqlServerLicenseType'])\r\n !has 'AHUB', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by CheckSQLVMAHB",
+ "size": 0,
+ "title": "Summary SQL Enabled and Disabled",
+ "noDataMessage": "You don't have any SQL VM",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary SQL Enabled and Disabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL running on Virtual Machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses123"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores to enable SQL AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640e8\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Enabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Consumed Cores per VM",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQL+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640e8\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Enabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMName\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "showPin": false,
+ "name": "Summary SQL+SKU AHB Enabled -"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640b5\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Disabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] +3) & ~3\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "warning",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "sortBy": [],
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "showMetrics": false,
+ "showLegend": true
+ }
+ },
+ "customWidth": "33",
+ "name": " Summary - SQL Cores AHB Disabled "
+ }
+ ]
+ },
+ "name": "SQL Overview RG"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLAVMHUBEnabled",
+ "label": "See SQL VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLVMAHBDisabled",
+ "label": "See SQL VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "value": "Yes"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL AHB Disabled"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640b5\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Disabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID\",\"mergedName\":\"VM Name\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMName\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMRG\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMLocation\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLVersion\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLSKU\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLAgentType\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].LicenseType\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SubscriptionName\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMSize\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "warning",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "VM Name",
+ "label": "Name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "vCPUs",
+ "label": "Number of vCPU"
+ },
+ {
+ "columnId": "Consumed Cores",
+ "label": "Consumed Cores"
+ },
+ {
+ "columnId": "SQLVersion",
+ "label": "SQL Version"
+ },
+ {
+ "columnId": "SQLSKU",
+ "label": "SQL SKU"
+ },
+ {
+ "columnId": "SQLAgentType",
+ "label": "SQL Agent"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLID1",
+ "label": "Resource ID"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLVMAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL+SKU AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640e8\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Enabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMName\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SQLID",
+ "label": "Name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "vCPUs",
+ "label": "Number of vCPU"
+ },
+ {
+ "columnId": "Consumed Cores",
+ "label": "Consumed Cores"
+ },
+ {
+ "columnId": "SQLVersion",
+ "label": "SQL Version"
+ },
+ {
+ "columnId": "SQLSKU",
+ "label": "SQL SKU"
+ },
+ {
+ "columnId": "SQLAgentType",
+ "label": "SQL Agent"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLAVMHUBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL+SKU AHB Enabled"
+ }
+ ]
+ },
+ "name": "SQL Detailed Info"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "SQLVM"
+ },
+ "name": "SQL VM"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "SQL Database",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## SQL Databases Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "SQL Databases AHB"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "e4aa368f-dcf2-44a6-88f9-a395c04eb21f",
+ "cellValue": "SQLType",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL Database",
+ "subTarget": "SQLDatabase",
+ "style": "link"
+ },
+ {
+ "id": "a94e8dc2-34be-4d97-934d-c27e1816c4fe",
+ "cellValue": "SQLType",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL ElasticPool",
+ "subTarget": "SQLElastic",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 8"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "SQLDB"
+ },
+ "name": "text - 0"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and tostring(properties.['licenseType']) == 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])\r\n| extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/databases', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n )\r\n) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, CheckSQLDBAHB,SQLLocation, LicenseType, StorageAccountType, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n",
+ "size": 0,
+ "title": "AHB Disabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLDB AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and tostring(properties.['licenseType']) != 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=sku.name, SKUTier=sku.tier, SQLLocation = location, vCores=tostring(sku.capacity), LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, SQLLocation, LicenseType, StorageAccountType, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n\r\n",
+ "size": 0,
+ "title": "AHB Enabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLDB AHB Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.\r\n\r\nFor Azure SQL Database, Azure Hybrid Benefit is only available when using the provisioned compute tier of the vCore-based purchasing model. Azure Hybrid Benefit doesn't apply to DTU-based purchasing models or the serverless compute tier.",
+ "style": "info"
+ },
+ "name": "Apply to SQL Server 1 to 4 vCPUs "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL Databases with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": " AHB Overview SQL DB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL DB Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n | extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=sku.name, SKUTier=sku.tier, SQLLocation = location, LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/databases', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL DBs with or without AHB per subs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n | extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=sku.name, SKUTier=sku.tier, SQLLocation = location, LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/databases', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL DBs with or without AHB "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL Databases\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Total number of SQL licenses cores consumed"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Text SQL DB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Consumed Cores per VM",
+ "noDataMessage": "None of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "SQLName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Enabled - per Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Disabled - per Priority"
+ }
+ ]
+ },
+ "name": "SQL DB Info"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBHUBEnabled",
+ "label": "See SQL DBs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBAHBDisabled",
+ "label": "See SQL DBs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL DB Without AHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071ed\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Disabled",
+ "noDataMessage": "All of your SQL DBs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Server Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "StorageAccountType",
+ "label": "Storage Account Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071f9\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Enabled",
+ "noDataMessage": "None of you SQL DBs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "StorageAccountType",
+ "label": "Storage Account Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBHUBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB AHB Enabled"
+ }
+ ]
+ },
+ "name": "Load SQL DB Detailed Info"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLType",
+ "comparison": "isEqualTo",
+ "value": "SQLDatabase"
+ },
+ "name": "SQLDatabase"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "SQL Elastic Pool"
+ },
+ "name": "text - 0"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and tostring(properties.['licenseType']) == 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n )\r\n) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, CheckSQLDBAHB,SQLLocation, LicenseType, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n",
+ "size": 0,
+ "title": "AHB Disabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLElastic AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and tostring(properties.['licenseType']) != 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, SQLLocation, LicenseType, CheckSQLDBAHB, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n\r\n",
+ "size": 0,
+ "title": "AHB Enabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLElastic AHB Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.\r\n\r\nFor Azure SQL Database, Azure Hybrid Benefit is only available when using the provisioned compute tier of the vCore-based purchasing model. Azure Hybrid Benefit doesn't apply to DTU-based purchasing models or the serverless compute tier.",
+ "style": "info"
+ },
+ "name": "Apply to SQL Elastic Server 1 to 4 vCPUs "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL Databases with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": " AHB Overview SQL Elastic"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL DB Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL Elastic with or without AHB per subs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL DBs with or without AHB "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL Databases\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Total number of SQL licenses cores consumed"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Text SQL DB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"}]}",
+ "size": 0,
+ "title": "SQL DB Elastic Pools AHB Consumed Cores per VM",
+ "noDataMessage": "None of your SQL DB Elastic Pools have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "SQLName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLElastic+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"}]}",
+ "size": 0,
+ "title": "SQL Elastic AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your SQL DB Elastic Pools have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLElastic+SKU AHB Enabled - per Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Disabled - per Priority"
+ }
+ ]
+ },
+ "name": "SQL Elastic Info"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBHUBEnabled",
+ "label": "See SQL DBs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBAHBDisabled",
+ "label": "See SQL DBs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL DB Without AHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071ed\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Disabled",
+ "noDataMessage": "All of your SQL DBs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Server Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071f9\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Enabled",
+ "noDataMessage": "None of you SQL DBs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBHUBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB AHB Enabled"
+ }
+ ]
+ },
+ "name": "Load SQL DB Detailed Info"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLType",
+ "comparison": "isEqualTo",
+ "value": "SQLElastic"
+ },
+ "name": "SQLElasticPool"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "SQLDB"
+ },
+ "name": "SQLDBGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "SQL Managed Instance",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances' and tostring(properties.['licenseType']) == 'LicenseIncluded'\r\n | extend ManagedInstance=id, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n | project ManagedInstance,SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n | where SQLRG in ({ResourceGroup})\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLMIAHBDisabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances' and tostring(properties.['licenseType']) != 'LicenseIncluded'\r\n | extend ManagedInstance=id, SQLName=name, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n | project ManagedInstance, SQLName, SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n | where SQLRG in ({ResourceGroup})\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance\r\n ",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLMIAHBEnabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# SQL Managed Instances Azure Hybrid Benefit (AHB) Overview\r\n"
+ },
+ "name": "SQL Managed Instances AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "Apply to SQL Server 1 to 4 vCPUs exchange"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL Databases with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": "SQL Databases with and without SQL AHB."
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL MI Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances' \r\n | extend ManagedInstance=id, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n| project ManagedInstance,SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n| summarize count() by SubscriptionName, CheckSQLMIAHB",
+ "size": 0,
+ "title": "Summary of SQL MI with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLMIAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName"
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false
+ },
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "group": "CheckSQLMIAHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL MI with or without AHB per subs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" \r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances'\r\n | extend ManagedInstance=id, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n| project ManagedInstance,SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n| summarize count() by SubscriptionName, CheckSQLMIAHB",
+ "size": 0,
+ "title": "Summary of SQL Managed Instance with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "group": "CheckSQLMIAHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL MI with or without AHB "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL Managed Instances.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores to enable SQL "
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance1\",\"mergedName\":\"ManagedInstance1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Consumed Cores per VM",
+ "noDataMessage": "None of your SQL MI have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "SQLName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLMI+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance1\",\"mergedName\":\"ManagedInstance1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your SQL MI have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLMI+SKU AHB Enabled - per Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLMIAHBDisabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].ManagedInstance1\",\"mergedName\":\"ManagedInstance1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instances AHB Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your SQL MI have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLMI+SKU AHB Disabled - per Priority"
+ }
+ ]
+ },
+ "name": "SQL MI Info"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLMIAHBEnabled",
+ "label": "See SQL MIs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLMIAHBDisabled",
+ "label": "See SQL MIs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL MI AHB Disabled"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071ed\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[SQLMIAHBDisabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Disabled",
+ "noDataMessage": "All of your SQL MIs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLMIAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL MI Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071f9\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Enabled",
+ "noDataMessage": "None of you SQL MIs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLMIAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL MI AHB Enabled"
+ }
+ ]
+ },
+ "name": "SQL MI Detailed"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "SQLMI"
+ },
+ "name": "SQL MI"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "SQL"
+ },
+ "name": "SQLAHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Linux Hybrid Benefit",
+ "loadType": "explicit",
+ "loadButtonText": "Load Linux Recommendations",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Linux Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "Linux Text"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "API-Get_VMLinux_SKU"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' and (properties.storageProfile.imageReference.publisher == 'suse' or properties.storageProfile.imageReference.publisher=='RedHat')\r\n| where isnull ((properties.['licenseType']))\r\n| extend LinuxId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.publisher), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n| order by type asc \r\n| project LinuxId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), LinuxId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct LinuxId\r\n )\r\n on LinuxId",
+ "size": 0,
+ "title": "AHB Disabled",
+ "noDataMessage": "None of your Linux VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "LinuxAHBDisabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' and (properties.storageProfile.imageReference.publisher == 'suse' or properties.storageProfile.imageReference.publisher=='RedHat')\r\n| where isnotnull ((properties.['licenseType']))\r\n| extend LinuxId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.publisher), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n| order by type asc \r\n| project LinuxId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), LinuxId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct LinuxId\r\n )\r\n on LinuxId",
+ "size": 0,
+ "title": "AHB Enabled",
+ "noDataMessage": "All of your Linux VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "LinuxAHBRGEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' and (properties.storageProfile.imageReference.publisher == 'suse' or properties.storageProfile.imageReference.publisher=='RedHat')\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend LinuxId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), LinuxId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct LinuxId\r\n )\r\n on LinuxId\r\n| extend CheckAHBLinux = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets',\r\n iff(isnull((properties.['licenseType'])),\r\n \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Linux\"\r\n )\r\n| summarize count() by CheckAHBLinux",
+ "size": 0,
+ "title": "Summary of Linux VMs with or without AHB",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Linux VMs with or without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26130\",\"mergeType\":\"inner\",\"leftTable\":\"LinuxAHBRGEnabled\",\"rightTable\":\"API-Get_VMLinux_SKU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId\",\"mergedName\":\"LinuxId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId1\",\"mergedName\":\"LinuxId1\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "noDataMessage": "None of your Linux VM have AHB enabled",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ConsumedCores",
+ "formatter": 0,
+ "formatOptions": {
+ "aggregation": "Sum"
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {},
+ "leftContent": {
+ "columnMatch": "ConsumedCores",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "blue"
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0
+ },
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Linux Consumed Cores per VM"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "LinuxAHBEnabled",
+ "label": "See Linux VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "4c3ff9fa-d9c8-4d35-94d4-48ba3a1547fd",
+ "version": "KqlParameterItem/1.0",
+ "name": "LinuxAHBDisabled",
+ "label": "See Linux VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "Linux VMs without AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Linux VMs with Hybrid Benefit groupped by Subscription."
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "Linux VMs with Hybrid Benefit"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\",\"mergeType\":\"inner\",\"leftTable\":\"LinuxAHBRGEnabled\",\"rightTable\":\"API-Get_VMLinux_SKU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId\",\"mergedName\":\"VM ID\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId1\",\"mergedName\":\"LinuxId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[LinuxAHBEnabled].VMName\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[LinuxAHBEnabled].VMSSize\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMName\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Linux VMs with AHB",
+ "noDataMessage": "None of your Linux VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "yes"
+ },
+ "name": "Linux-VM+SKU+vCores-AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Linux VMs without Hybrid Benefit groupped by Subscription."
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "LinuxAHBDisabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\",\"mergeType\":\"inner\",\"leftTable\":\"LinuxAHBDisabled\",\"rightTable\":\"API-Get_VMLinux_SKU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[LinuxAHBDisabled].LinuxId\",\"mergedName\":\"LinuxId\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].LinuxId1\",\"mergedName\":\"LinuxId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[LinuxAHBEnabled].VMName\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[LinuxAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Linux VMs without AHB",
+ "noDataMessage": "None of your Linux VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "Linux-VM+SKU+vCores-AHBDisabled"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "LinuxVM"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ }
+ ],
+ "name": "Linux"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "VMSS",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Windows Azure Hybrid Benefit (AHB) Overview - VM Scale Set"
+ },
+ "name": "AHB Overview - VM Scale Set"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "Each two-processor license or each set of 16-core licenses"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' and tostring(properties.virtualMachineProfile.licenseType) == \"Windows_Server\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType), OSVersion = tostring(properties.virtualMachineProfile.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.virtualMachineProfile.licenseType), VMSSize=tostring(sku.name)\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OSVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "LoadVMSSTab",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ }
+ ],
+ "name": "VMSSAHBEnabled-RG"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows'\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) !has 'Windows'\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType), OsVersion = tostring(properties.virtualMachineProfile.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.virtualMachineProfile.licenseType), VMSSize=tostring(sku.name)\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "LoadVMSSTab",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ }
+ ],
+ "name": "VMSSAHBDisabled-RG"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Windows virtual machine"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores to AHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load VMSS Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\" ([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Cores NOT enabled per AHB Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\" ([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "noDataMessage": "None of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per AHB Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26130\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per VMSS",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ConsumedCores",
+ "formatter": 0,
+ "formatOptions": {
+ "aggregation": "Sum"
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {},
+ "leftContent": {
+ "columnMatch": "ConsumedCores",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "blue"
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0
+ },
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per VMSS"
+ }
+ ]
+ },
+ "name": "VMSS RG Overview"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "VMSSAHBEnabled",
+ "label": "See VMSS with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "VMSSAHBDisabled",
+ "label": "See VMSS without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VMSS Without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"},{\"originalName\":\"[WindowsAHBEnabled].VMName\"},{\"originalName\":\"[VMSSAHBEnabled].VMSize\"},{\"originalName\":\"[VMSSAHBEnabled].VMName\"},{\"originalName\":\"[VMSSAHBEnabled-Tag].VMName\"},{\"originalName\":\"[VMSSAHBEnabled-Tag].VMSize\"}]}",
+ "size": 0,
+ "title": "VMSS with AHB",
+ "noDataMessage": "None of your VMSS have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "2",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription Name",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMSSAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VMSS+SKU+vCores-AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBDisabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[VMSSAHBDisabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[VMSS-AHB-Disabled].VMName\"},{\"originalName\":\"[VMSS-AHB-Disabled-Tag].VMSize\"},{\"originalName\":\"[VMSS-AHB-Disabled-Tag].VMName\"}]}",
+ "size": 0,
+ "title": "VMSS without AHB",
+ "noDataMessage": "All of your VMSS have AHB enabled",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMSSAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VMSS+SKU+vCores"
+ }
+ ]
+ },
+ "name": "VMSS RG Details"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VMSS"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ }
+ ],
+ "name": "VMSS-RG"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ }
+ ],
+ "name": "AHB Overview"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ "name": "group - RateOptimization group"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "6b8c0a46-6867-498b-9a3e-799a2475a11a",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Welcome",
+ "subTarget": "instructions",
+ "style": "link"
+ },
+ {
+ "id": "da748ed1-f329-42d4-962d-9b2339baf7c4",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Resources overview",
+ "subTarget": "resourcesMap",
+ "style": "link"
+ },
+ {
+ "id": "a4b4de18-b90e-4212-86a2-ea5fabc4f40c",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Security recommendations",
+ "subTarget": "securityRecommendations",
+ "style": "link"
+ },
+ {
+ "id": "a18f24d2-3320-4c53-a86d-db32c920c8f7",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Reliability recommendations",
+ "subTarget": "reliabilityRecommendations",
+ "style": "link"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ "name": "tabs - overview tabs"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "6a9ccf8c-9f3e-4ee0-b45b-f511401f8656",
+ "version": "KqlParameterItem/1.0",
+ "name": "mapSubscriptions",
+ "label": "Subscriptions",
+ "type": 6,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isNotEqualTo",
+ "value": "instructions"
+ }
+ ],
+ "name": "parameters - OverviewSubscriptions"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type == \"microsoft.advisor/recommendations\"\r\n| where tostring (properties.category) has \"Security\"\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=tostring(properties.impact),Recommendation=tostring(properties.shortDescription.problem),subscriptionId",
+ "size": 0,
+ "title": "Azure Advisor security recommendations",
+ "noDataMessage": "You are following all of our security recommendations for the selected subscriptions.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{mapSubscriptions}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Impact",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High",
+ "representation": "red",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low",
+ "representation": "blue",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "gray",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Impact"
+ ]
+ }
+ }
+ },
+ "name": "query - advisorSecurityRecommendations"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "securityRecommendations"
+ }
+ ],
+ "name": "group - securityRecommendations"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Welcome to the cost optimization workbook"
+ },
+ "name": "Welcome"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Reference: [Microsoft Azure Well-Architected Framework - cost optimization pillar](https://learn.microsoft.com/azure/architecture/framework/cost/overview)",
+ "style": "upsell"
+ },
+ "name": "Reference"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "This workbook aims to offer a comprehensive overview of your Azure environment's resource usage, aligning with the WAF Cost Optimization pillar. It identifies recommendations to optimize efficiency, providing guidance on potential opportunities. Please note that the workbook serves as guidance to highlight optimization opportunities, and the extent of cost reduction depends on their implementation.\r\n\r\n## Overview of the cost optimization pillar\r\n\r\n* The cost optimization pillar provides principles for balancing business goals with technology needs to create a cost-effective workload while avoiding capital-intensive solutions.The workbook emphasizes the importance of reducing waste and improving operational efficiencies.\r\n\r\n* To assess your workload based on the principles outlined in the [Microsoft Azure Well-Architected Framework](https://learn.microsoft.com/azure/architecture/framework/), reference the [Microsoft Azure Well-Architected Review](https://learn.microsoft.com/assessments/?id=azure-architecture-review&mode=pre-assessment&session=20dc50e4-5b71-4f38-bc49-51cc1d9f205c) tool.\r\n\r\n\r\n\r\n\r\n"
+ },
+ "name": "objective"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Indicates an implemented recommendation that can result in a environment that is following the Cost Optimization & Cost Governance principles.",
+ "style": "success"
+ },
+ "customWidth": "50",
+ "name": "Greenlight",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Prerequisites\r\n\r\nThis workbook requires the following least-privileged (minimum) roles on your Subscriptions:\r\n\r\n * **Reader** : allows you to import the workbook without saving it and view all of the workbook tabs.\r\n * **Workbook Contributor** : allows you to import and save the workbook\r\n\r\nThis workbook includes \"Quick Fix\" actions within certain queries. The permissions necessary to execute these actions may vary and are documented for each specific action.\r\n\r\n\r\n"
+ },
+ "name": "Prerequisites"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Feedback\r\n\r\n [ Submit feedback here ](https://aka.ms/advisor_cost_wb_feedback) on your experience with workbooks at any time.\r\n \r\n\r\n \r\n [Submit any issues ](https://aka.ms/costworkbookfeedback) with the workbook template to GitHub. "
+ },
+ "name": "text - 5"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "instructions"
+ }
+ ],
+ "name": "Welcome"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "summarize count() by location",
+ "size": 2,
+ "title": "Resource distribution per region",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{mapSubscriptions}"
+ ],
+ "visualization": "map",
+ "mapSettings": {
+ "locInfo": "AzureLoc",
+ "locInfoColumn": "location",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "labelSettings": "location",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "nodeColorField": "count_",
+ "colorAggregation": "Sum",
+ "type": "heatmap",
+ "heatmapPalette": "greenRed"
+ }
+ }
+ },
+ "name": "query - resourcesMap"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "resourcesMap"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "group - resourceOverview"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type == \"microsoft.advisor/recommendations\"\r\n| where tostring (properties.category) has \"HighAvailability\"\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=tostring(properties.impact),Recommendation=tostring(properties.shortDescription.problem),subscriptionId",
+ "size": 0,
+ "title": "Azure Advisor reliability recommendations",
+ "noDataMessage": "You are following all of our reliability recommendations for the selected subscriptions.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{mapSubscriptions}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Impact",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High",
+ "representation": "red",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low",
+ "representation": "blue",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "gray",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Impact"
+ ]
+ }
+ }
+ },
+ "name": "query - advisorReliabilityRecommendations"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "reliabilityRecommendations"
+ }
+ ],
+ "name": "group - reliabilityRecommendations"
+ }
+ ],
+ "fallbackResourceIds": [
+ "Azure Monitor"
+ ],
+ "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
+ },
+ "version": "",
+ "workbookJson": "[string(variables('$fxv#0'))]",
+ "workbookId": "0b2",
+ "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
+ "finOpsToolkitVersion": "0.8",
+ "resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
+ },
+ "resources": [
+ {
+ "condition": "[parameters('enableDefaultTelemetry')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]",
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "FinOps toolkit",
+ "version": "[variables('finOpsToolkitVersion')]"
+ }
+ },
+ "resources": []
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Insights/workbooks",
+ "apiVersion": "2022-04-01",
+ "name": "[guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[variables('resourceTags')]",
+ "kind": "shared",
+ "properties": {
+ "category": "workbook",
+ "description": "[parameters('description')]",
+ "displayName": "[parameters('displayName')]",
+ "serializedData": "[variables('workbookJson')]",
+ "sourceId": "Azure Monitor",
+ "version": "[variables('version')]"
+ }
+ }
+ ],
+ "outputs": {
+ "workbookId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the workbook."
+ },
+ "value": "[resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))]"
+ },
+ "workbookUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "Link to the workbook in the Azure portal."
+ },
+ "value": "[format('{0}/#view/AppInsightsExtension/UsageNotebookBlade/ComponentId/Azure%20Monitor/ConfigurationId/{1}/Type/{2}/WorkbookTemplateName/{3}', environment().portal, uriComponent(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))), reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').category, uriComponent(reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').displayName))]"
+ }
+ }
+ }
+ }
+ },
+ {
+ "condition": "[parameters('includeGovernance')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('{0}-Governance', parameters('displayNamePrefix'))]",
+ "properties": {
+ "expressionEvaluationOptions": {
+ "scope": "inner"
+ },
+ "mode": "Incremental",
+ "parameters": {
+ "displayName": {
+ "value": "[format('{0} - Governance', parameters('displayNamePrefix'))]"
+ },
+ "location": {
+ "value": "[parameters('location')]"
+ },
+ "tags": {
+ "value": "[variables('resourceTags')]"
+ },
+ "enableDefaultTelemetry": {
+ "value": false
+ }
+ },
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "10054098441393474777"
+ }
+ },
+ "parameters": {
+ "displayName": {
+ "type": "string",
+ "defaultValue": "Governance",
+ "metadata": {
+ "description": "Optional. Display name for the workbook used in the Gallery. Must be unique in the resource group."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Location of the resources. Default: Same as deployment. See https://aka.ms/azureregions."
+ }
+ },
+ "description": {
+ "type": "string",
+ "defaultValue": "Reports to help you optimize your cost.",
+ "metadata": {
+ "description": "Optional. Workbook description."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags for all resources."
+ }
+ },
+ "enableDefaultTelemetry": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": {
+ "version": "Notebook/1.0",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "19b06e9e-eec2-4a7e-935d-92d77b2f87a3",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Overview",
+ "subTarget": "RC_Overview",
+ "preText": "",
+ "style": "link"
+ },
+ {
+ "id": "528e35b9-aca4-423f-9267-50f62011a3cb",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual machine",
+ "subTarget": "RC_VM",
+ "style": "link"
+ },
+ {
+ "id": "7faacfc6-663e-4ff5-bb64-f86d995f9563",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Storage + backup",
+ "subTarget": "RC_Storage",
+ "style": "link"
+ },
+ {
+ "id": "c17ce2c0-83e6-4e5c-9c3e-f34cbf887e73",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Network",
+ "subTarget": "RC_Network",
+ "style": "link"
+ },
+ {
+ "id": "2f4e49d7-3198-4173-af1c-4cf4c5178000",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "PaaS",
+ "subTarget": "RC_PaaS",
+ "style": "link"
+ },
+ {
+ "id": "f8f7e1fc-8f5d-442a-9788-3eabbf8ab275",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Security",
+ "subTarget": "RC_Security",
+ "style": "link"
+ },
+ {
+ "id": "80ad2db8-a21e-43e9-bd28-75d8d606eaf5",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Monitoring",
+ "subTarget": "RC_Monitoring",
+ "style": "link"
+ },
+ {
+ "id": "6fc0fef0-a016-4923-9239-b641eb5bdc4f",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Services retirement",
+ "subTarget": "RC_ServicesRetirement",
+ "style": "link"
+ },
+ {
+ "id": "e40dbf66-2abe-4bcf-acd7-1ee6d8fc950b",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Resource age",
+ "subTarget": "RC_Age",
+ "style": "link"
+ },
+ {
+ "id": "e112c6e1-db5e-4b0e-99e9-2edac0eba177",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Tag explorer",
+ "subTarget": "RC_Tag",
+ "style": "link"
+ },
+ {
+ "id": "840cd5ea-6b74-484b-846f-01d424b295cd",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Cost management",
+ "subTarget": "RC_Cost",
+ "style": "link"
+ },
+ {
+ "id": "5436a8c9-73c4-4121-a814-dd6fbb0c0d0c",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Usage + limits",
+ "subTarget": "RC_Quota",
+ "style": "link"
+ },
+ {
+ "id": "fa81b57a-8f3c-4502-beb0-128a7fc35f7c",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Compliance",
+ "subTarget": "RC_Compliance",
+ "style": "link"
+ },
+ {
+ "id": "e3acf38e-2dc4-423e-b91d-a173280b5808",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Governance",
+ "subTarget": "RC_Governance",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "RC_Menu"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "value::tenant"
+ ],
+ "parameters": [
+ {
+ "id": "30297a43-7d69-4daf-93c9-8170d5a995b0",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "label": "Subscriptions",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all"
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resources/tenants"
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Age"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Cost"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Quota"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Compliance"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_ServicesRetirement"
+ }
+ ],
+ "name": "parameters - Subscriptions"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Welcome the Azure governance workbook"
+ },
+ "name": "Welcome"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Reference: [Governance in the Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/)",
+ "style": "upsell"
+ },
+ "name": "Reference"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "The objective of this workbook is to provide a comprehensive overview of the governance posture of your Azure environment. It offers the standard metrics aligned with the Cloud Adoption Framework and has the capability to identify and apply recommendations to identify non compliance. This workbook is part of the [FinOps toolkit](https://aka.ms/finops/toolkit).\r\n\r\n## Overview of the Cloud Adoption Framework\r\n\r\n* The CAF Govern methodology provides a structured approach for establishing and optimizing cloud governance in Azure. The guidance is relevant for organizations across any industry. It covers essential categories of cloud governance, such as regulatory compliance, security, operations, cost, data, resource management, and artificial intelligence (AI).\r\n\r\n* Cloud governance is how you control cloud use across your organization. Cloud governance sets up guardrails that regulate cloud interactions. These guardrails are a framework of policies, procedures, and tools you use to establish control. Policies define acceptable and unacceptable cloud activity, and the procedures and tools you use ensure all cloud usage aligns with those policies. Successful cloud governance prevents all unauthorized or unmanaged cloud usage.\r\n\r\n* To assess your transformation journey, try the [governance benchmark tool](https://learn.microsoft.com/assessments/b1891add-7646-4d60-a875-32a4ab26327e/).\r\n\r\n\r\n\r\n\r\n"
+ },
+ "name": "text - Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Prerequisites\r\n\r\nThis workbook will present various cost-related details in the form of governance, networking, storage, VMs, web apps, SQL, and cost information to educate the business about cost related to various resources.\r\n\r\nThis workbook requires the following least-privileged (minimum) roles:\r\n\r\n * **Reader** : allows you to import the workbook without saving it and view all of the workbook tabs except the *Cost management* tab.\r\n * **Cost Management Reader**: allows you to view the costs in the *Cost management* tab \r\n * **Workbook Contributor** : allows you to import and save the workbook\r\n\r\n\r\n"
+ },
+ "name": "text - 7"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\n| summarize count()",
+ "size": 3,
+ "title": "Count of all resources",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ }
+ },
+ "name": "Count of all resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| summarize Count=count(id) by subscriptionId\r\n| order by Count desc",
+ "size": 3,
+ "title": "Resource count per subscription (Top 10)",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "type",
+ "formatter": 1
+ }
+ ],
+ "rowLimit": 10,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription name"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ "leftContent": {
+ "columnMatch": "Count",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 2,
+ "maximumSignificantDigits": 3
+ }
+ }
+ },
+ "showBorder": false,
+ "rowLimit": 10,
+ "sortCriteriaField": "count_type",
+ "sortOrderField": 2
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "subscriptionId",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "Count",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "subscriptionId",
+ "yAxis": [
+ "Count"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "subscriptionId",
+ "color": "greenDark"
+ }
+ ]
+ },
+ "mapSettings": {
+ "locInfo": "LatLong",
+ "sizeSettings": "Count",
+ "sizeAggregation": "Sum",
+ "legendMetric": "Count",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "type": "heatmap",
+ "colorAggregation": "Sum",
+ "nodeColorField": "Count",
+ "heatmapPalette": "greenRed"
+ }
+ }
+ },
+ "name": "Resource count per subscription (Top 10)"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources \r\n| extend type = case(\r\ntype contains 'microsoft.netapp/netappaccounts', 'NetApp Accounts',\r\ntype contains \"microsoft.compute\", \"Azure Compute\",\r\ntype contains \"microsoft.logic\", \"LogicApps\",\r\ntype contains 'microsoft.keyvault/vaults', \"Key Vaults\",\r\ntype contains 'microsoft.storage/storageaccounts', \"Storage Accounts\",\r\ntype contains 'microsoft.compute/availabilitysets', 'Availability Sets',\r\ntype contains 'microsoft.operationalinsights/workspaces', 'Azure Monitor Resources',\r\ntype contains 'microsoft.operationsmanagement', 'Operations Management Resources',\r\ntype contains 'microsoft.insights', 'Azure Monitor Resources',\r\ntype contains 'microsoft.desktopvirtualization/applicationgroups', 'WVD Application Groups',\r\ntype contains 'microsoft.desktopvirtualization/workspaces', 'WVD Workspaces',\r\ntype contains 'microsoft.desktopvirtualization/hostpools', 'WVD Hostpools',\r\ntype contains 'microsoft.recoveryservices/vaults', 'Backup Vaults',\r\ntype contains 'microsoft.web', 'App Services',\r\ntype contains 'microsoft.managedidentity/userassignedidentities','Managed Identities',\r\ntype contains 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\r\ntype contains 'microsoft.hybridcompute/machines', 'ARC Machines',\r\ntype contains 'Microsoft.EventHub', 'Event Hub',\r\ntype contains 'Microsoft.EventGrid', 'Event Grid',\r\ntype contains 'Microsoft.Sql', 'SQL Resources',\r\ntype contains 'Microsoft.HDInsight/clusters', 'HDInsight Clusters',\r\ntype contains 'microsoft.devtestlab', 'DevTest Labs Resources',\r\ntype contains 'microsoft.containerinstance', 'Container Instances Resources',\r\ntype contains 'microsoft.portal/dashboards', 'Azure Dashboards',\r\ntype contains 'microsoft.containerregistry/registries', 'Container Registry',\r\ntype contains 'microsoft.automation', 'Automation Resources',\r\ntype contains 'sendgrid.email/accounts', 'SendGrid Accounts',\r\ntype contains 'microsoft.datafactory/factories', 'Data Factory',\r\ntype contains 'microsoft.databricks/workspaces', 'Databricks Workspaces',\r\ntype contains 'microsoft.machinelearningservices/workspaces', 'Machine Learnings Workspaces',\r\ntype contains 'microsoft.alertsmanagement/smartdetectoralertrules', 'Azure Monitor Resources',\r\ntype contains 'microsoft.apimanagement/service', 'API Management Services',\r\ntype contains 'microsoft.dbforpostgresql', 'PostgreSQL Resources',\r\ntype contains 'microsoft.scheduler/jobcollections', 'Scheduler Job Collections',\r\ntype contains 'microsoft.visualstudio/account', 'Azure DevOps Organization',\r\ntype contains 'microsoft.network/', 'Network Resources',\r\ntype contains 'microsoft.migrate/' or type contains 'microsoft.offazure', 'Azure Migrate Resources',\r\ntype contains 'microsoft.servicebus/namespaces', 'Service Bus Namespaces',\r\ntype contains 'microsoft.classic', 'ASM Obsolete Resources',\r\ntype contains 'microsoft.resources/templatespecs', 'Template Spec Resources',\r\ntype contains 'microsoft.virtualmachineimages', 'VM Image Templates',\r\ntype contains 'microsoft.documentdb', 'CosmosDB DB Resources',\r\ntype contains 'microsoft.alertsmanagement/actionrules', 'Azure Monitor Resources',\r\ntype contains 'microsoft.kubernetes/connectedclusters', 'ARC Kubernetes Clusters',\r\ntype contains 'microsoft.purview', 'Purview Resources',\r\ntype contains 'microsoft.security', 'Security Resources',\r\ntype contains 'microsoft.cdn', 'CDN Resources',\r\ntype contains 'microsoft.devices','IoT Resources',\r\ntype contains 'microsoft.datamigration', 'Data Migraiton Services',\r\ntype contains 'microsoft.cognitiveservices', 'Congitive Services',\r\ntype contains 'microsoft.customproviders', 'Custom Providers',\r\ntype contains 'microsoft.appconfiguration', 'App Services',\r\ntype contains 'microsoft.search', 'Search Services',\r\ntype contains 'microsoft.maps', 'Maps',\r\ntype contains 'microsoft.containerservice/managedclusters', 'AKS',\r\ntype contains 'microsoft.signalrservice', 'SignalR',\r\ntype contains 'microsoft.resourcegraph/queries', 'Resource Graph Queries',\r\ntype contains 'microsoft.batch', 'MS Batch',\r\ntype contains 'microsoft.analysisservices', 'Analysis Services',\r\ntype contains 'microsoft.synapse/workspaces', 'Synapse Workspaces',\r\ntype contains 'microsoft.synapse/workspaces/sqlpools', 'Synapse SQL Pools',\r\ntype contains 'microsoft.kusto/clusters', 'ADX Clusters',\r\ntype contains 'microsoft.resources/deploymentscripts', 'Deployment Scripts',\r\ntype contains 'microsoft.aad/domainservices', 'AD Domain Services',\r\ntype contains 'microsoft.labservices/labaccounts', 'Lab Accounts',\r\ntype contains 'microsoft.automanage/accounts', 'Automanage Accounts',\r\ntype contains 'microsoft.relay/namespaces', 'Azure Relay',\r\ntype contains 'microsoft.notificationhubs/namespaces', 'Notification Hubs',\r\ntype contains 'microsoft.digitaltwins/digitaltwinsinstances', 'Digital Twins',\r\nstrcat(\"Not Translated: \", type))\r\n| summarize count() by type\r\n| order by count_ desc",
+ "size": 3,
+ "title": "Resource number by type (Top 10)",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "rowLimit": 10
+ }
+ },
+ "name": "Resource number by type"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| summarize count() by location",
+ "size": 3,
+ "title": "Resource number by location",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "map",
+ "mapSettings": {
+ "locInfo": "AzureLoc",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "type": "heatmap",
+ "colorAggregation": "Sum",
+ "nodeColorField": "count_",
+ "heatmapPalette": "greenRed"
+ },
+ "labelSettings": "location",
+ "locInfoColumn": "location"
+ }
+ },
+ "name": "Resource number by location"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - Overview metrics"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Overview"
+ },
+ "name": "RC_Overview"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Things to know before creating a virtual machine\r\nThere's always a multitude of design considerations when you build out an application infrastructure in Azure. These aspects of a virtual machine are important to think about to manage virtual machine properly:\r\n- The names of your application resources\r\n- The location where the resources are stored\r\n- The size of the virtual machine\r\n- The maximum number of virtual machines that can be created\r\n- The operating system that the virtual machine runs\r\n- The configuration of the virtual machine after it starts\r\n- The related resources that the virtual machine needs\r\n"
+ },
+ "name": "text - 13"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources | where type =~ 'Microsoft.Compute/virtualMachines'\n| summarize count() by tostring(properties.storageProfile.osDisk.osType)",
+ "size": 3,
+ "title": "Virtual machine count per OS type",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "properties_storageProfile_osDisk_osType",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "Virtual machine count per OS type"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project SKU = tostring(properties.hardwareProfile.vmSize)\r\n| summarize count() by SKU\r\n| order by count_ desc",
+ "size": 1,
+ "title": "VM by VM type/size",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "barchart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "SKU",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "rowLimit": 10
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "SKU",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "VM by VM type/size"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type=~ 'microsoft.compute/virtualmachinescalesets'\r\n| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name\r\n| order by Capacity desc",
+ "size": 0,
+ "title": "Virtual machine scale set capacity and size",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "name": "query - virtual machine scale set capacity and size"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources | where type == \"microsoft.compute/virtualmachines\"\r\n| extend osDiskId= tostring(properties.storageProfile.osDisk.managedDisk.id)\r\n | join kind=leftouter(resources\r\n | where type =~ 'microsoft.compute/disks'\r\n | where properties !has 'Unattached'\r\n | where properties has 'osType'\r\n | project OS = tostring(properties.osType), osSku = tostring(sku.name), osDiskSizeGB = toint(properties.diskSizeGB), osDiskId=tostring(id)) on osDiskId\r\n | join kind=leftouter(Resources\r\n | where type =~ 'microsoft.compute/disks'\r\n | where properties !has \"osType\"\r\n | where properties !has 'Unattached'\r\n | project sku = tostring(sku.name), diskSizeGB = toint(properties.diskSizeGB), id = managedBy\r\n | summarize sum(diskSizeGB), count(sku) by id, sku) on id\r\n| project vmId=id, subscriptionId, resourceGroup, OS, location, osDiskId, osSku, osDiskSizeGB, DataDisksGB=sum_diskSizeGB, diskSkuCount=count_sku\r\n| sort by diskSkuCount desc",
+ "size": 0,
+ "title": "Compute disks",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "vmId",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "osDiskId",
+ "label": "OS Disk"
+ },
+ {
+ "columnId": "osSku",
+ "label": "OS Disk SKU"
+ },
+ {
+ "columnId": "osDiskSizeGB",
+ "label": "OS Disk Size"
+ }
+ ]
+ }
+ },
+ "name": "Compute disks"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| extend nics=array_length(properties.networkProfile.networkInterfaces)\r\n| mv-expand nic=properties.networkProfile.networkInterfaces\r\n| where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic)\r\n| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id)\r\n\t| join kind=leftouter (\r\n \t\tResources\r\n \t\t| where type =~ 'microsoft.network/networkinterfaces'\r\n \t\t| extend ipConfigsCount=array_length(properties.ipConfigurations)\r\n \t\t| mv-expand ipconfig=properties.ipConfigurations\r\n \t\t| where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true'\r\n \t\t| project nicId = id, privateIP= tostring(ipconfig.properties.privateIPAddress), publicIpId = tostring(ipconfig.properties.publicIPAddress.id), subscriptionId) on nicId\r\n| project-away nicId1\r\n| summarize by vmId, subscriptionId, vmSize, nicId, privateIP, publicIpId\r\n\t| join kind=leftouter (\r\n \t\tResources\r\n \t\t| where type =~ 'microsoft.network/publicipaddresses'\r\n \t\t| project publicIpId = id, publicIpAddress = tostring(properties.ipAddress)) on publicIpId\r\n| project-away publicIpId1\r\n| sort by publicIpAddress desc",
+ "size": 0,
+ "title": "Compute networking",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "vmId",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "vmSize",
+ "label": "VM size"
+ },
+ {
+ "columnId": "nicId",
+ "label": "Network interface"
+ },
+ {
+ "columnId": "privateIP",
+ "label": "Private IP"
+ },
+ {
+ "columnId": "publicIpId",
+ "label": "Public IP"
+ },
+ {
+ "columnId": "publicIpAddress",
+ "label": "Public IP address"
+ }
+ ]
+ }
+ },
+ "name": "Compute networking"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Managed disk utilization"
+ },
+ "name": "text - 16"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ec135d58-9c6b-4998-bd1e-75871c540d7f",
+ "version": "KqlParameterItem/1.0",
+ "name": "laworkspace",
+ "label": "Log Analytics workspace",
+ "type": 5,
+ "description": "LA workspaces configured in virtual machines insight settings",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces' | project id",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": []
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "Log Analytics workspace selector"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "InsightsMetrics\n| where Origin == \"vm.azm.ms\"\n| where Namespace == \"LogicalDisk\"\n| where Name == \"FreeSpacePercentage\"\n| extend t=parse_json(Tags)\n| summarize arg_max(TimeGenerated, *) by tostring(t[\"vm.azm.ms/mountId\"]), Computer // arg_max over TimeGenerated returns the latest record\n| project Computer, TimeGenerated, t[\"vm.azm.ms/mountId\"], Val\n",
+ "size": 4,
+ "title": "Managed disks free space",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{laworkspace}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Val",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": ">=",
+ "thresholdValue": "90",
+ "representation": "4",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": ">=",
+ "thresholdValue": "50",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false,
+ "maximumFractionDigits": 0
+ }
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Computer",
+ "label": "Computer"
+ },
+ {
+ "columnId": "TimeGenerated",
+ "label": "TimeGenerated"
+ },
+ {
+ "columnId": "t_vm.azm.ms/mountId",
+ "label": "Drive"
+ },
+ {
+ "columnId": "Val",
+ "label": "Free space percentage"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "laworkspace",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Managed disks free space"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Compute optimization"
+ },
+ "name": "text - 9"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type == \"microsoft.advisor/recommendations\"\r\n| where tostring (properties.category) has \"Cost\"\r\n| where properties.shortDescription.problem has \"underutilized\"\r\n| where properties.impactedField has \"Compute\" or properties.impactedField has \"Container\" or properties.impactedField has \"Web\"\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,subscriptionId,Recommendation=tostring(properties.shortDescription.problem)\r\n",
+ "size": 0,
+ "title": "Underused assets",
+ "noDataMessage": "No underused asset",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "customWidth": "100",
+ "name": "Underused assets"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "37cdc20d-07c3-466c-84bb-4d8050932641",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanDisks",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"!=\", \"label\":\"No\" },\r\n { \"value\":\"==\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "!="
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "Disks"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources \r\n| where type contains \"microsoft.compute/disks\" \r\n| extend diskState = tostring(properties.diskState)\r\n| where managedBy {OrphanDisks} \"\" or diskState {OrphanDisks} 'Unattached'\r\n| project id, subscriptionId, resourceGroup, diskState, location",
+ "size": 0,
+ "title": "Managed disks",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "diskState",
+ "label": "Disk state"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ }
+ ]
+ }
+ },
+ "name": "Managed disks"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "2d9b8893-0af4-480a-9ac7-639efb771ecb",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanNIC",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"has 'virtualmachine' or isnotnull(privateEndPoint)\", \"label\":\"No\" },\r\n { \"value\":\"!has 'virtualmachine' and isnull(privateEndPoint)\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "has 'virtualmachine' or isnotnull(privateEndPoint)"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "NICs - Copy"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type has \"microsoft.network/networkinterfaces\"\r\n| extend VM = properties.virtualMachine.id\r\n| extend privateEndPoint = properties['privateEndpoint']['id']\r\n| where properties {OrphanNIC}\r\n| where properties['linkedResourceType'] != \"Microsoft.Netapp/volumes\"\r\n| project id, subscriptionId, resourceGroup, location, VM, privateEndPoint, properties\r\n",
+ "size": 0,
+ "title": "NICs",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "properties",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "VM",
+ "label": "Virtual machine"
+ },
+ {
+ "columnId": "privateEndPoint",
+ "label": "Private end point"
+ },
+ {
+ "columnId": "properties",
+ "label": "Details"
+ }
+ ]
+ }
+ },
+ "name": "NICs"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "98d786aa-8835-493f-9fe4-fe5da150392b",
+ "version": "KqlParameterItem/1.0",
+ "name": "VMState",
+ "label": "Virtual machine state",
+ "type": 2,
+ "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend state = properties['extended']['instanceView']['powerState']['displayStatus']\r\n| summarize by tostring(state)",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - VMState"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Select a virtual machine state to display the list of resource.",
+ "style": "info"
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMState",
+ "comparison": "isEqualTo"
+ },
+ "name": "text - VMState"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources | where type == \"microsoft.compute/virtualmachines\"\r\n| extend vmState = tostring(properties.extended.instanceView.powerState.displayStatus)\r\n| extend vmState = iif(isempty(vmState), \"VM State Unknown\", (vmState))\r\n| summarize count() by vmState",
+ "size": 3,
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "vmState",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "vmState",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "query - VM state chart"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend vmSize = tostring(properties.hardwareProfile.vmSize)\r\n| extend vmState = properties['extended']['instanceView']['powerState']['displayStatus']\r\n| where vmState == '{VMState}'\r\n| project id, subscriptionId, resourceGroup, vmState, vmSize, location",
+ "size": 0,
+ "title": "Virtual machine list by powerstate",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": false
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "vmSize",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "19.1429ch"
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17,
+ "formatOptions": {
+ "customColumnWidthSetting": "108px"
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "vmState",
+ "label": "VM State"
+ },
+ {
+ "columnId": "vmSize",
+ "label": "VM Size"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMState",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - VM list by powerstate"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "States and billing status of Azure virtual machines : https://learn.microsoft.com/azure/virtual-machines/states-billing",
+ "style": "info"
+ },
+ "name": "Info VM states"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - VMQueries"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_VM"
+ },
+ "name": "RC_VM"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Storage account + backup"
+ },
+ "name": "text - 9"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.storagesync/storagesyncservices'\r\n\tor type =~ 'microsoft.recoveryservices/vaults'\r\n\tor type =~ 'microsoft.storage/storageaccounts'\r\n\tor type =~ 'microsoft.keyvault/vaults'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\r\n\ttype =~ 'microsoft.recoveryservices/vaults', 'Azure Backup',\r\n\ttype =~ 'microsoft.storage/storageaccounts', 'Storage Accounts',\r\n\ttype =~ 'microsoft.keyvault/vaults', 'Key Vaults',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| summarize count() by type",
+ "size": 3,
+ "title": "Count of all resource types",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - Storage - Resource Overview "
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.storagesync/storagesyncservices'\r\n\tor type =~ 'microsoft.recoveryservices/vaults'\r\n\tor type =~ 'microsoft.storage/storageaccounts'\r\n\tor type =~ 'microsoft.keyvault/vaults'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\r\n\ttype =~ 'microsoft.recoveryservices/vaults', 'Azure Backup',\r\n\ttype =~ 'microsoft.storage/storageaccounts', 'Storage Accounts',\r\n\ttype =~ 'microsoft.keyvault/vaults', 'Key Vaults',\r\n\tstrcat(\"Not Translated: \", type))\r\n| extend Sku = case(\r\n\ttype !has 'Key Vaults', sku.name,\r\n\ttype =~ 'Key Vaults', properties.sku.name,\r\n\t' ')\r\n| extend Details = pack_all()\r\n| project Resource=id, type, kind, subscriptionId, resourceGroup, Sku, Details",
+ "size": 0,
+ "title": "Resource details",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View Details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ }
+ },
+ "name": "query - Storage - Resource Detailed"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "e94aafa3-c5d9-4523-89f0-4e87aa754511",
+ "version": "KqlParameterItem/1.0",
+ "name": "Resources",
+ "label": "Storage accounts",
+ "type": 5,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.storage/storageaccounts'\n| order by name asc\n| extend Rank = row_number()\n| project value = id, label = id, selected = Rank <= 5",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "resourceTypeFilter": {
+ "microsoft.storage/storageaccounts": true
+ },
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "c4b69c01-2263-4ada-8d9c-43433b739ff3",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "type": 4,
+ "isRequired": true,
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 300000,
+ "createdTime": "2018-08-06T23:52:38.87Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 900000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 1800000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 3600000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 14400000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 43200000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 86400000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 172800000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 259200000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 604800000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ }
+ ],
+ "allowCustom": true
+ },
+ "value": {
+ "durationMs": 172800000
+ },
+ "label": "Time range"
+ },
+ {
+ "id": "9b48988f-dcd2-48cc-b233-5999ed32149f",
+ "version": "KqlParameterItem/1.0",
+ "name": "Message",
+ "type": 1,
+ "query": "where type == 'microsoft.storage/storageaccounts' \n| summarize Selected = countif(id in ({Resources:value})), Total = count()\n| extend Selected = iff(Selected > 200, 200, Selected)\n| project Message = strcat('# ', Selected, ' / ', Total)",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "070b2474-4e01-478d-a7fa-6c20ad8ea1ad",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceName",
+ "type": 1,
+ "isRequired": true,
+ "isHiddenWhenLocked": true,
+ "criteriaData": [
+ {
+ "condition": "else result = 'Storage account'",
+ "criteriaContext": {
+ "operator": "Default",
+ "rightValType": "param",
+ "resultValType": "static",
+ "resultVal": "Storage account"
+ }
+ }
+ ]
+ },
+ {
+ "id": "c6c32b32-6eb4-44d5-9cad-156d5d50ec3e",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceImageUrl",
+ "type": 1,
+ "description": "used as a parameter for No Subcriptions workbook template",
+ "isHiddenWhenLocked": true
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 1",
+ "styleSettings": {
+ "margin": "15px 0 0 0"
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Storage accounts details"
+ },
+ "name": "text - 8"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "27d282bb-38ae-4ceb-b2bb-063db08ec6bc",
+ "cellValue": "selectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Overview",
+ "subTarget": "Overview"
+ },
+ {
+ "id": "9a52f588-fff8-47fe-b56d-81b8068ff6f7",
+ "cellValue": "selectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Capacity",
+ "subTarget": "Capacity"
+ }
+ ]
+ },
+ "name": "Navigation links",
+ "styleSettings": {
+ "margin": "10px 0 0 0"
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Overview section"
+ },
+ "conditionalVisibility": {
+ "parameterName": "1",
+ "comparison": "isEqualTo",
+ "value": "2"
+ },
+ "name": "text - 4"
+ },
+ {
+ "type": 10,
+ "content": {
+ "chartId": "workbookdb19a8d8-91af-44ea-951d-5ffa133b2ebe",
+ "version": "MetricsItem/2.0",
+ "size": 2,
+ "chartType": 0,
+ "resourceType": "microsoft.storage/storageaccounts",
+ "metricScope": 0,
+ "resourceParameter": "Resources",
+ "resourceIds": [
+ "{Resources}"
+ ],
+ "timeContextFromParameter": "TimeRange",
+ "timeContext": {
+ "durationMs": 172800000
+ },
+ "metrics": [
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-Transactions",
+ "aggregation": 1
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-Transactions",
+ "aggregation": 1,
+ "splitBy": [
+ "ResponseType"
+ ],
+ "splitBySortOrder": -1,
+ "splitByLimit": 4,
+ "columnName": "Errors"
+ }
+ ],
+ "resourceLimit": 200,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Name",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-Transactions$|Transactions$",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "showIcon": true,
+ "aggregation": "Sum"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 1
+ }
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-Transactions Timeline$|Transactions Timeline$",
+ "formatter": 21,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency$|microsoft.storage/storageaccounts-Transaction-SuccessServerLatency$|E2E Latency$|Server Latency$",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "linkTarget": "WorkbookTemplate",
+ "showIcon": true,
+ "workbookContext": {
+ "componentIdSource": "column",
+ "componentId": "Name",
+ "resourceIdsSource": "column",
+ "resourceIds": "Name",
+ "templateIdSource": "static",
+ "templateId": "Community-Workbooks/Individual Storage/Performance",
+ "typeSource": "static",
+ "type": "workbook",
+ "gallerySource": "static",
+ "gallery": "microsoft.storage/storageaccounts"
+ }
+ },
+ "numberFormat": {
+ "unit": 23,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency Timeline$|E2E Latency Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency Timeline",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Success/Errors",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "success/Errors",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": ".*\\/Errors",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "gray",
+ "linkTarget": "WorkbookTemplate",
+ "showIcon": true,
+ "workbookContext": {
+ "componentIdSource": "column",
+ "componentId": "Name",
+ "resourceIdsSource": "column",
+ "resourceIds": "Name",
+ "templateIdSource": "static",
+ "templateId": "Community-Workbooks/Individual Storage/Failures",
+ "typeSource": "static",
+ "type": "workbook",
+ "gallerySource": "static",
+ "gallery": "microsoft.storage/storageaccounts"
+ }
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 1
+ }
+ }
+ },
+ {
+ "columnMatch": "Server Latency Timeline",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Subscription"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Name"
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_heatmap_microsoft.storage/storageaccounts-Transaction-Transactions$|Transactions$_3",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Subscription",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-Transactions",
+ "label": "Transactions"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-Transactions Timeline",
+ "label": "Transactions timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency",
+ "label": "E2E latency"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency Timeline",
+ "label": "E2E latency timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency",
+ "label": "Server latency"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency Timeline",
+ "label": "Server latency timeline"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_heatmap_microsoft.storage/storageaccounts-Transaction-Transactions$|Transactions$_3",
+ "sortOrder": 2
+ }
+ ],
+ "showExportToExcel": true
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "Overview"
+ },
+ "showPin": true,
+ "name": "storage account metrics",
+ "styleSettings": {
+ "margin": "0 10px 0 10px"
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Capacity section"
+ },
+ "conditionalVisibility": {
+ "parameterName": "1",
+ "comparison": "isEqualTo",
+ "value": "2"
+ },
+ "name": "text - 6"
+ },
+ {
+ "type": 10,
+ "content": {
+ "chartId": "workbookdb19a8d8-91af-44ea-951d-5ffa133b2ebe",
+ "version": "MetricsItem/2.0",
+ "size": 3,
+ "chartType": 0,
+ "resourceType": "microsoft.storage/storageaccounts",
+ "metricScope": 0,
+ "resourceParameter": "Resources",
+ "resourceIds": [
+ "{Resources}"
+ ],
+ "timeContextFromParameter": "TimeRange",
+ "timeContext": {
+ "durationMs": 172800000
+ },
+ "metrics": [
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Capacity-UsedCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/blobservices",
+ "metric": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/fileservices",
+ "metric": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/queueservices",
+ "metric": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/tableservices",
+ "metric": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity",
+ "aggregation": 4
+ }
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Name",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Capacity-UsedCapacity$|microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity$|microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity$|microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity$|microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity$",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "linkTarget": "WorkbookTemplate",
+ "showIcon": true,
+ "workbookContext": {
+ "componentIdSource": "column",
+ "componentId": "Name",
+ "resourceIdsSource": "column",
+ "resourceIds": "Name",
+ "templateIdSource": "static",
+ "templateId": "Community-Workbooks/Individual Storage/Capacity",
+ "typeSource": "static",
+ "type": "workbook",
+ "gallerySource": "static",
+ "gallery": "microsoft.storage/storageaccounts"
+ }
+ },
+ "numberFormat": {
+ "unit": 2,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 1
+ }
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Capacity-UsedCapacity Timeline$|Account used capacity Timeline$",
+ "formatter": 21,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity Timeline$|Blob capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity Timeline$|File capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity Timeline$|Queue capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity Timeline$|Table capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Subscription"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Name"
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_$gen_group_0",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Subscription",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Capacity-UsedCapacity",
+ "label": "Account used capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Capacity-UsedCapacity Timeline",
+ "label": "Account used capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity",
+ "label": "Blob capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity Timeline",
+ "label": "Blob capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity",
+ "label": "File capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity Timeline",
+ "label": "File capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity",
+ "label": "Queue capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity Timeline",
+ "label": "Queue capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity",
+ "label": "Table capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity Timeline",
+ "label": "Table capacity timeline"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_$gen_group_0",
+ "sortOrder": 1
+ }
+ ],
+ "showExportToExcel": true
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "Capacity"
+ },
+ "showPin": true,
+ "name": "storage account capacity metrics",
+ "styleSettings": {
+ "margin": "0 10px 0 10px"
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ "name": "Storage account + backup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Azure Backup now provides a set of customizable reporting templates to help you generate audit evidence reports for backup in an easier way. [Learn more](https://aka.ms/BCDRAuditReportTemplates).",
+ "style": "upsell"
+ },
+ "name": "AuditText"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Backup details\r\n### Manage and securely backup your resources\r\nExplore and monitor backup estate at scale in real time across vaults."
+ },
+ "name": "text - 8"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "2373a24f-ad32-4909-a7f6-59b373dcde6c",
+ "version": "KqlParameterItem/1.0",
+ "name": "Workspaces",
+ "label": "Workspace",
+ "type": 5,
+ "description": "LA workspaces configured in vault diagnostic settings",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces' | project id",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": []
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "100",
+ "name": "Filters1"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "parameters": [
+ {
+ "id": "2965ad33-1401-47c9-8f4b-9b7126f87014",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "label": "Time Range",
+ "type": 4,
+ "description": "Period of time for which reports should be viewed",
+ "isRequired": true,
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 259200000
+ },
+ {
+ "durationMs": 604800000
+ },
+ {
+ "durationMs": 1209600000
+ },
+ {
+ "durationMs": 2419200000
+ },
+ {
+ "durationMs": 2592000000
+ },
+ {
+ "durationMs": 5184000000
+ },
+ {
+ "durationMs": 7776000000
+ }
+ ],
+ "allowCustom": true
+ },
+ "value": {
+ "durationMs": 604800000
+ }
+ },
+ {
+ "id": "efede5fa-f577-4766-b9b6-6ba4e525f844",
+ "version": "KqlParameterItem/1.0",
+ "name": "DataSourceSubscription",
+ "label": "Datasource Subscription",
+ "type": 6,
+ "description": "Use to filter for datasources within a specific subscription",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "query": "let RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet VaultSubscriptionList = \"*\";\r\nlet VaultLocationList = \"*\";\r\nlet VaultList = \"*\";\r\nlet VaultTypeList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet DisplayAllFields = false;\r\n_AzureBackup_GetBackupInstances(RangeStart, RangeEnd, VaultSubscriptionList, VaultLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, ProtectionInfoList, DatasourceSetName, BackupInstanceName, DisplayAllFields)\r\n| distinct tostring(split(tostring(todynamic(DatasourceResourceId)),\"/\")[2])",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "value": []
+ },
+ {
+ "id": "256c7e33-df90-4956-aaf3-699aeaad912f",
+ "version": "KqlParameterItem/1.0",
+ "name": "DataSourceLocation",
+ "label": "Data source location",
+ "type": 2,
+ "description": "Use to filter for data sources within a specific location",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "query": "let RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet VaultSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet VaultLocationList = \"*\";\r\nlet VaultList = \"*\";\r\nlet VaultTypeList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet DisplayAllFields = false;\r\n_AzureBackup_GetBackupInstances(RangeStart, RangeEnd, VaultSubscriptionList, VaultLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, ProtectionInfoList, DatasourceSetName, BackupInstanceName, DisplayAllFields)\r\n| distinct VaultLocation",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "16ad110f-4ea3-44d6-826b-4ea3bbd68c93",
+ "version": "KqlParameterItem/1.0",
+ "name": "JobOperation",
+ "label": "Job Operation",
+ "type": 2,
+ "description": "Use to filter for a particular operation type",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "jsonData": "\r\n[ \r\n{ \"value\": \"Backup\", \t\t\t\t\t\t\"label\": \"Backup\" },\r\n{ \"value\": \"Restore\", \t\t\t\t\t\t\"label\": \"Restore\" }\r\n]",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "6a6222bf-a28a-4c98-9d74-838e74497167",
+ "version": "KqlParameterItem/1.0",
+ "name": "JobStatus",
+ "label": "Job Status",
+ "type": 2,
+ "description": "Use to filter for a particular job status",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "jsonData": "\r\n[ \r\n{ \"value\": \"Completed\", \t\t\t\t\t\t\"label\": \"Completed\" },\r\n{ \"value\": \"Failed\", \t\t\t\"label\": \"Failed\" },\r\n\r\n{ \"value\": \"CompletedWithWarnings\", \t\t\t\t\t\t\"label\": \"CompletedWithWarnings\" },\r\n{ \"value\": \"Cancelled\", \"label\": \"Cancelled\" }\r\n]",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "849a6401-cbaf-44b9-a733-0819f8923791",
+ "version": "KqlParameterItem/1.0",
+ "name": "SearchItem",
+ "label": "Search Item",
+ "type": 1,
+ "description": "Use to search for an item by name"
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Filters2"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Backup job history"
+ },
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Heading2"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains iff(isnotempty('{SearchItem}'),'{SearchItem}',BackupInstanceFriendlyName)\r\n| sort by BackupInstanceId\r\n| summarize count() by Status",
+ "size": 3,
+ "title": "Jobs by Status",
+ "noDataMessage": "No record found for the selected time and scope.",
+ "showRefreshButton": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "UniqueId",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "DurationInSecs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "0",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Chart1",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "parameters": [
+ {
+ "id": "7a64467f-eec7-495b-9099-233fb7bceb08",
+ "version": "KqlParameterItem/1.0",
+ "name": "RowsPerPage",
+ "label": "Rows per page",
+ "type": 2,
+ "description": "Number of rows to display in a single page",
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":10, \"label\":\"10\", \"selected\":true },\r\n { \"value\":25, \"label\":\"25\" },\r\n { \"value\":50, \"label\":\"50\" },\r\n { \"value\":100, \"label\":\"100\" },\r\n { \"value\":250, \"label\":\"250\" },\r\n { \"value\":500, \"label\":\"500\" },\r\n { \"value\":1000, \"label\":\"1000\" }\r\n]"
+ },
+ {
+ "id": "5c65bc61-a721-42b7-960b-3fe7a6170eb6",
+ "version": "KqlParameterItem/1.0",
+ "name": "Page",
+ "type": 2,
+ "description": "Page number",
+ "isRequired": true,
+ "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\nlet backupItem = '{SearchItem}';\r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains backupItem\r\n| summarize c=count()\r\n| project num = (c-1)/toint('{RowsPerPage}') + 1\r\n| project nums = range(1,num,1), num\r\n| mvexpand nums\r\n| project nums = tostring(nums), num = strcat(tostring(nums),\" of \",tostring(num))\r\n\r\n",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "value": "1"
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Filters3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\nlet backupItem = '{SearchItem}';\r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains iff(isnotempty('{SearchItem}'),'{SearchItem}',BackupInstanceFriendlyName)\r\n| sort by BackupInstanceId\r\n| extend row_num = row_number()\r\n| extend page_num = tostring(((row_num-1)/toint('{RowsPerPage}') + 1))\r\n| where page_num has ('{Page}')\r\n| project BackupItem = BackupInstanceId,BackupItemFriendlyName = BackupInstanceFriendlyName ,Vault = VaultResourceId,Subscription = VaultSubscriptionId, VaultLocation = VaultLocation,JobOperation = OperationCategory,JobStartTime = StartTime,JobDuration = tostring(todouble(DurationInSecs)/60/60),JobStatus = Status,FailureCode = ErrorTitle\r\n",
+ "size": 3,
+ "title": "List of jobs in period",
+ "noDataMessage": "No record found for the selected time and scope.",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "BackupItem",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "BackupItemFriendlyName",
+ "formatter": 16,
+ "formatOptions": {
+ "linkColumn": "BackupItem",
+ "linkTarget": "Resource",
+ "showIcon": true,
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "Vault",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true,
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "VaultLocation",
+ "formatter": 17,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "JobOperation",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "JobStartTime",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "JobDuration",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ },
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "minimumFractionDigits": 2,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ {
+ "columnMatch": "JobStatus",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "contains",
+ "thresholdValue": "Warning",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Failed",
+ "representation": "failed",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "FailureCode",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "labelSettings": [
+ {
+ "columnId": "BackupItemFriendlyName",
+ "label": "Backup instance"
+ },
+ {
+ "columnId": "Vault",
+ "label": "Vault"
+ },
+ {
+ "columnId": "Subscription",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "VaultLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "JobOperation",
+ "label": "Job operation"
+ },
+ {
+ "columnId": "JobStartTime",
+ "label": "Job start time (UTC)"
+ },
+ {
+ "columnId": "JobDuration",
+ "label": "Job duration (hours)"
+ },
+ {
+ "columnId": "JobStatus",
+ "label": "Job status"
+ },
+ {
+ "columnId": "FailureCode",
+ "label": "Job failure code"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Grid1",
+ "styleSettings": {
+ "margin": "5px",
+ "padding": "5px",
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Backup"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Storage"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Storage"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "where type has \"microsoft.network\"\r\n| extend type = case(\r\n\ttype == 'microsoft.network/networkinterfaces', \"NICs\",\r\n\ttype == 'microsoft.network/networksecuritygroups', \"NSGs\", \r\n\ttype == \"microsoft.network/publicipaddresses\", \"Public IPs\", \r\n\ttype == 'microsoft.network/virtualnetworks', \"vNets\",\r\n\ttype == 'microsoft.network/networkwatchers/connectionmonitors', \"Connection Monitors\",\r\n\ttype == 'microsoft.network/privatednszones', \"Private DNS\",\r\n\ttype == 'microsoft.network/virtualnetworkgateways', @\"vNet Gateways\",\r\n\ttype == 'microsoft.network/connections', \"Connections\",\r\n\ttype == 'microsoft.network/networkwatchers', \"Network Watchers\",\r\n\ttype == 'microsoft.network/privateendpoints', \"Private Endpoints\",\r\n\ttype == 'microsoft.network/localnetworkgateways', \"Local Network Gateways\",\r\n\ttype == 'microsoft.network/privatednszones/virtualnetworklinks', \"vNet Links\",\r\n\ttype == 'microsoft.network/dnszones', 'DNS Zones',\r\n\ttype == 'microsoft.network/networkwatchers/flowlogs', 'Flow Logs',\r\n\ttype == 'microsoft.network/routetables', 'Route Tables',\r\n\ttype == 'microsoft.network/loadbalancers', 'Load Balancers',\r\n type =~ 'Microsoft.Network/applicationGateways', 'Application Gateways',\r\n\tstrcat(\"Not Translated: \", type))\r\n| summarize count() by type\r\n| where type !has \"Not Translated\"",
+ "size": 3,
+ "title": "Count of all network resources by resource type",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Network resource"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Network security group"
+ },
+ "name": "Network security group title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "7763ba7f-6187-4448-a94c-890392ed31d0",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanNSG",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"and isnotnull(properties.networkInterfaces) or type =~ 'microsoft.network/networksecuritygroups' and isnotnull(properties.subnets)\", \"label\":\"No\" },\r\n { \"value\":\"and isnull(properties.networkInterfaces) and isnull(properties.subnets)\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "and isnotnull(properties.networkInterfaces) or type =~ 'microsoft.network/networksecuritygroups' and isnotnull(properties.subnets)"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "NSG"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'microsoft.network/networksecuritygroups' {OrphanNSG}\r\n| project Resource=id, resourceGroup, subscriptionId, location",
+ "size": 0,
+ "title": "NSGs",
+ "noDataMessage": "No NSGs Found",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "Resource",
+ "parameterName": "SelectedResourceId",
+ "parameterType": 5
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "filter": true
+ },
+ "sortBy": []
+ },
+ "name": "NSGs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n | where type =~ 'microsoft.network/networksecuritygroups'\r\n | where id == \"{SelectedResourceId}\"\r\n | project id, nsgRules = parse_json(parse_json(properties).securityRules), networksecurityGroupName = name, subscriptionId, resourceGroup , location\r\n | mvexpand nsgRule = nsgRules\r\n | project id, location, access=nsgRule.properties.access,protocol=nsgRule.properties.protocol ,direction=nsgRule.properties.direction,provisioningState= nsgRule.properties.provisioningState ,priority=nsgRule.properties.priority, \r\n sourceAddressPrefix = nsgRule.properties.sourceAddressPrefix, \r\n sourceAddressPrefixes = nsgRule.properties.sourceAddressPrefixes,\r\n destinationAddressPrefix = nsgRule.properties.destinationAddressPrefix, \r\n destinationAddressPrefixes = nsgRule.properties.destinationAddressPrefixes, \r\n networksecurityGroupName, networksecurityRuleName = tostring(nsgRule.name), \r\n subscriptionId, resourceGroup,\r\n destinationPortRanges = nsgRule.properties.destinationPortRanges,\r\n destinationPortRange = nsgRule.properties.destinationPortRange,\r\n sourcePortRanges = nsgRule.properties.sourcePortRanges,\r\n sourcePortRange = nsgRule.properties.sourcePortRange\r\n| extend Details = pack_all()\r\n| project id, location, access, direction, priority, sourceAddressPrefix, sourcePortRange, destinationPortRange, subscriptionId, resourceGroup, Details",
+ "size": 1,
+ "title": "NSG rules",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedResourceId",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "NSG rules"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Public IPs"
+ },
+ "name": "Public IP title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "37cdc20d-07c3-466c-84bb-4d8050932641",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanIPs",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"isnotnull\", \"label\":\"No\" },\r\n { \"value\":\"isnull\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "isnotnull"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "Public IPs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'Microsoft.Network/publicIPAddresses' and {OrphanIPs}(properties.ipAddress)\r\n| extend ipAddress = properties.ipAddress\r\n| extend sku = sku.name\r\n| extend Details = pack_all()\r\n| project Resource=id, subscriptionId, resourceGroup, name, location,sku,Details",
+ "size": 0,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ }
+ },
+ "name": "query - Networking Details - PiPs"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Application gateway"
+ },
+ "name": "Application gateway title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "007b8dbe-6bc6-40f9-b4bc-55f2ec14916c",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanAppGW",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"//\", \"label\":\"No\" },\r\n { \"value\":\"|\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "//"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "ApplicationGateway"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'Microsoft.Network/applicationGateways'\r\n| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier= tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools\r\n| project id, name, SKUName, SKUTier, SKUCapacity\r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Network/applicationGateways'\r\n | mvexpand backendPools = properties.backendAddressPools\r\n | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)\r\n | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses)\r\n | extend backendPoolName = backendPools.properties.backendAddressPools.name\r\n | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id\r\n) on id\r\n| project-away id1\r\n{OrphanAppGW} where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))\r\n| order by id asc",
+ "size": 0,
+ "noDataMessage": "No app gateways",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "name": "query - Application Gateways"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Load balancer"
+ },
+ "name": "Load balancer title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "8cffc283-1878-4035-a669-5d9697e9edc1",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanLB",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"!=\", \"label\":\"No\" },\r\n { \"value\":\"==\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "!="
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "LoadBalancers"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/loadbalancers\"\r\n| where properties.backendAddressPools {OrphanLB} \"[]\"\r\n| extend Details = pack_all()\r\n| project Resource=id, subscriptionId, resourceGroup, location, tostring(sku.name), Details",
+ "size": 0,
+ "noDataMessage": "No load balancers",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Resource",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "sku_name",
+ "label": "SKU"
+ }
+ ]
+ }
+ },
+ "name": "query - Load Balancers"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Network"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Network"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Stay informed and act quickly on service issues\r\nAzure Service Health notifies you about Azure service incidents and planned maintenance so you can take action to mitigate downtime. Configure customisable cloud alerts and use your personalised dashboard to analyse health issues, monitor the impact to your cloud resources, get guidance and support, and share details and updates."
+ },
+ "name": "text - 4"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "servicehealthresources\r\n| where type =~ 'Microsoft.ResourceHealth/events'\r\n| extend eventType = properties.EventType, status = properties.Status, description = properties.Title, trackingId = properties.TrackingId, summary = properties.Summary, priority = properties.Priority, impactStartTime = properties.ImpactStartTime, impactMitigationTime = properties.ImpactMitigationTime\r\n| where properties.Status == 'Active' and tolong(impactStartTime) > 1\r\n\r\n| extend Details = pack_all()\r\n| project ServiceHealthID=id, Description=description, Region=location, eventType, Status=status, Details",
+ "size": 1,
+ "title": "All active Service Health events",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ServiceHealthID",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": false,
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "Description",
+ "formatter": 1,
+ "formatOptions": {
+ "customColumnWidthSetting": "60ch"
+ }
+ },
+ {
+ "columnMatch": "eventType",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "name": "query - 15"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Activity log monitoring"
+ },
+ "name": "text - 15"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),\r\nchangeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId, \r\nchangedProperties = properties.changes, changeCount = properties.changeAttributes.changesCount\r\n| where changeTime > ago(1d)\r\n| order by changeTime desc\r\n| project changeTime, targetResourceId, changeType, correlationId, changeCount, changedProperties",
+ "size": 0,
+ "title": "All changes in the past one day",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "changeTime",
+ "formatter": 6,
+ "formatOptions": {
+ "customColumnWidthSetting": "24ch"
+ }
+ },
+ {
+ "columnMatch": "targetResourceId",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "42.7143ch"
+ }
+ },
+ {
+ "columnMatch": "changedProperties",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ]
+ }
+ },
+ "name": "query - 12"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),\r\nchangeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId\r\n| where changeType == \"Delete\"\r\n| order by changeTime desc\r\n| project changeTime, resourceGroup, targetResourceId, changeType, correlationId",
+ "size": 0,
+ "title": "Resources deleted",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "changeTime",
+ "formatter": 6
+ }
+ ]
+ }
+ },
+ "name": "query - 13"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Monitoring"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Monitoring"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Use tags to organize your Azure resources and management hierarchy\r\nTags are metadata elements that you apply to your Azure resources. They're key-value pairs that help you identify resources based on settings that are relevant to your organization. If you want to track the deployment environment for your resources, add a key named Environment. To identify the resources deployed to production, give them a value of Production. The fully formed key-value pair is Environment = Production.\r\n\r\nTo get more information about tags, see [Resource naming and tagging decision guide](https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming-and-tagging-decision-guide?toc=%2Fazure%2Fazure-resource-manager%2Fmanagement%2Ftoc.json)"
+ },
+ "name": "text - 9"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Tag names with spaces, hyphens, and underscores are not supported.",
+ "style": "info"
+ },
+ "name": "warning tag explorer"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "bae67738-90ef-4698-9020-5e1f91d67f82",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "label": "Tag name",
+ "type": 2,
+ "isRequired": true,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ }
+ ],
+ "style": "formVertical",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "33",
+ "name": "parameters - 0"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "cb0ae78d-a49b-457b-baed-d83c97a2c934",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "label": "Tag value",
+ "type": 2,
+ "query": "Resources\r\n| extend TagValue = tostring(tags.{TagName})\r\n| project TagValue\r\n| distinct TagValue",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "formVertical",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "33",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "parameters - 2"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "81756016-e942-4fa0-976e-06d8ce919f83",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceType",
+ "label": "Resource type",
+ "type": 7,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": true,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ }
+ ],
+ "style": "formVertical",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "customWidth": "33",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "ResourceType"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n//| where tags[0] =~ '{TagName}' and tags[1] =~ '{TagValue}'\r\n| where tags[0] == '{TagName}' and tags[1] == '{TagValue}'\r\n| where type contains '{ResourceType}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Resource with tag",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Resource with tag"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n| where tags[0] == '{TagName}' and tags[1] == ''\r\n| where type contains '{ResourceType}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Tag with empty value",
+ "noDataMessage": "No tagged resources with empty value found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Empty value"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where tags =~ '' or tags =~ '{}'\r\n| where type contains '{ResourceType}'\r\n| project Name=id",
+ "size": 0,
+ "title": "Untagged resources",
+ "noDataMessage": "No untagged resources found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 100,
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "Name",
+ "label": "Resource name"
+ }
+ ]
+ }
+ },
+ "name": "query - Untagged resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcecontainers\r\n| where type == \"microsoft.resources/subscriptions\"\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n| where tags[0] == '{TagName}' and tags[1] == '{TagValue}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Subscription list",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "tag",
+ "formatter": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Subscription list"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcecontainers\r\n| where type == \"microsoft.resources/subscriptions/resourcegroups\"\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n| where tags[0] == '{TagName}' and tags[1] == '{TagValue}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Resource groups list",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "tag",
+ "formatter": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - ResourceGroup list"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - TagQueries"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Tag"
+ },
+ "name": "RC_Tags"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/securescores\"\r\n| extend subscriptionSecureScore = round(100 * bin((todouble(properties.score.current))/ todouble(properties.score.max), 0.001))\r\n| where subscriptionSecureScore > 0\r\n| project subscriptionId, subscriptionSecureScore\r\n| order by subscriptionSecureScore asc",
+ "size": 0,
+ "title": "Security Scores by Subscription",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true,
+ "customColumnWidthSetting": "65ch"
+ }
+ },
+ {
+ "columnMatch": "subscriptionSecureScore",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "max": 100,
+ "palette": "redGreen",
+ "customColumnWidthSetting": "55ch"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false
+ }
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "subscriptionSecureScore",
+ "label": "Subscription Secure Score"
+ }
+ ]
+ }
+ },
+ "name": "query - Monitor & Security - Security Scores"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "SecurityResources \r\n| where type == 'microsoft.security/securescores/securescorecontrols' \r\n| extend SecureControl = properties.displayName, unhealthy = properties.unhealthyResourceCount, currentscore = properties.score.current, maxscore = properties.score.max, subscriptionId, details = properties\r\n| project SecureControl , unhealthy, currentscore, maxscore, subscriptionId, details",
+ "size": 0,
+ "title": "Security Scores by Control",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "65ch"
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "65ch"
+ }
+ },
+ {
+ "columnMatch": "SecureControl",
+ "formatter": 5,
+ "tooltipFormat": {}
+ },
+ {
+ "columnMatch": "unhealthy",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "greenRed",
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "currentscore",
+ "formatter": 8,
+ "formatOptions": {
+ "palette": "redGreen",
+ "customColumnWidthSetting": "20ch"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "maxscore",
+ "formatter": 8,
+ "formatOptions": {
+ "palette": "blue",
+ "customColumnWidthSetting": "20ch"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "Details",
+ "linkIsContextBlade": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionSecureScore",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "max": 100,
+ "palette": "redGreen",
+ "customColumnWidthSetting": "20"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false
+ }
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "SecureControl"
+ },
+ "labelSettings": [
+ {
+ "columnId": "unhealthy",
+ "label": "Unhealthy"
+ },
+ {
+ "columnId": "currentscore",
+ "label": "Current Score"
+ },
+ {
+ "columnId": "maxscore",
+ "label": "Max Score"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Monitor & Security - Security Scores by Control"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "4f93ebba-a9d5-4e11-8de4-b605c2b4368f",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceIdFilter",
+ "type": 1,
+ "isGlobal": true,
+ "isHiddenWhenLocked": true,
+ "label": "Resource ID"
+ },
+ {
+ "id": "e505498f-d2eb-4dd6-928f-0f0f0e9cc371",
+ "version": "KqlParameterItem/1.0",
+ "name": "AlertDisplayNameFilter",
+ "type": 1,
+ "isGlobal": true,
+ "isHiddenWhenLocked": true,
+ "label": "Alert display name"
+ },
+ {
+ "id": "39e382f9-4780-40fa-8595-15eda0f08ad4",
+ "version": "KqlParameterItem/1.0",
+ "name": "NewAlertFilter",
+ "type": 1,
+ "isGlobal": true,
+ "isHiddenWhenLocked": true,
+ "label": "New alert"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 15"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | where properties.Status in ('Active')\r\n | where properties.Severity in ('Low', 'Medium', 'High')\r\n | extend SeverityRank = case(\r\n properties.Severity == 'High', 3,\r\n properties.Severity == 'Medium', 2,\r\n properties.Severity == 'Low', 1,\r\n 0\r\n )\r\n | project-away SeverityRank\r\n | extend Severity = properties.Severity\r\n | project Severity = tostring(Severity)\r\n | summarize Count = count() by Severity",
+ "size": 0,
+ "title": "Severity ",
+ "exportedParameters": [
+ {
+ "fieldName": "Subscription",
+ "parameterName": "Subscription",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Severity",
+ "parameterName": "SeverityFilter",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Severity",
+ "formatter": 1
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Count"
+ ],
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Medium",
+ "color": "orange"
+ },
+ {
+ "seriesName": "High",
+ "color": "redDark"
+ },
+ {
+ "seriesName": "Low",
+ "color": "yellow"
+ }
+ ]
+ }
+ },
+ "customWidth": "33",
+ "name": "Severity"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | summarize Count =count() by resourceGroup",
+ "size": 0,
+ "title": "Resource Group",
+ "exportFieldName": "resourceGroup",
+ "exportParameterName": "resourceGroupFilter",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "33",
+ "name": "query - 9"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n | project id = tolower(id), tags\r\n | join kind=inner (securityresources\r\n | where type =~ \"microsoft.security/locations/alerts\"\r\n | extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n | extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n | extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n | extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n | extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n | extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))| project-away resourceNameIndex, splitAffectedResourceId, hostName, isAzure\r\n | project alertId = id, subscriptionId, alertProperties = properties, affectedResourceId = tolower(affectedResourceId)\r\n ) on $left.id == $right.affectedResourceId\r\n | extend id = alertId, subscriptionId, properties = alertProperties\r\n | where properties.Status in ('Active')\r\n | where properties.Severity in ('Low', 'Medium', 'High')\r\n | extend SeverityRank = case(\r\n properties.Severity == 'High', 3,\r\n properties.Severity == 'Medium', 2,\r\n properties.Severity == 'Low', 1,\r\n 0\r\n )\r\n | sort by SeverityRank desc, tostring(properties.SystemAlertId) asc\r\n | extend Tag = parse_json(tags)\r\n | mv-expand Tag\r\n | parse Tag with * ':\"' TagValue '\"}'\r\n | project TagValue, alertId\r\n | summarize Count = count() by TagValue",
+ "size": 0,
+ "title": "Tag",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "30",
+ "name": "query - 7",
+ "styleSettings": {
+ "maxWidth": "100%"
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "datatable(ResourceId: string) [ \"All\"] | union (securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | where Prop.Severity == \"High\"\r\n | extend ResourceIdentifiers = Prop.[\"ResourceIdentifiers\"]\r\n | project ResourceIdentifiers\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | where isnotempty(ResourceId )\r\n| summarize Count=count() by tostring(ResourceId)\r\n | top 5 by Count)",
+ "size": 1,
+ "title": "Top 5 attacked resources (with High Severity)",
+ "noDataMessage": "There are no Top 5 attacked resources found",
+ "exportedParameters": [
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "ResourceIdFilter",
+ "defaultValue": "All"
+ },
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "ShowTable",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Resource ID",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "ResourceId",
+ "label": "Resource ID"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "33",
+ "name": "Top 5 attacked resources (with High Severity)"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " datatable(AlertDisplayName: string) [ \"All\"] | union(securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n | project tostring(AlertDisplayName)\r\n | summarize Count = count() by AlertDisplayName\r\n | top 5 by Count)",
+ "size": 1,
+ "title": "Top alert types ",
+ "exportedParameters": [
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "AlertDisplayNameFilter",
+ "defaultValue": "All"
+ },
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "ShowTable",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert display name"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "33",
+ "name": "Top alert types"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " datatable(AlertDisplayName: string) [ \"All\"] | union(securityresources\r\n| where type =~ 'microsoft.security/locations/alerts'\r\n| extend Prop = parse_json(properties)\r\n| extend TimeGeneratedUtc = Prop.[\"TimeGeneratedUtc\"]\r\n| extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n| where TimeGeneratedUtc > ago(24h)\r\n| summarize Count=count() by tostring(AlertDisplayName))",
+ "size": 1,
+ "title": "New Alerts (Since last 24hrs)",
+ "noDataMessage": "No new alerts in Last 24 hours",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "NewAlertFilter",
+ "defaultValue": "All"
+ },
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "ShowTable",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ClearOther",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert display name"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "customWidth": "33",
+ "name": "New Alerts (Since last 24hrs)"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "",
+ "size": 0,
+ "title": "Parameters at this point",
+ "queryType": 2
+ },
+ "conditionalVisibility": {
+ "parameterName": "parameter1",
+ "comparison": "isEqualTo",
+ "value": "1"
+ },
+ "name": "query - 23"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/locations/alerts\"\r\n| project-rename P= properties\r\n| extend Details = parse_json(P)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = tostring(Details.[\"Severity\"])\r\n| where Severity == \"High\"\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = tostring(Details.[\"Status\"])\r\n| extend Tactics = tostring(Details.[\"Intent\"])\r\n| extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n| mv-expand ResourceIdentifiers\r\n| extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n| where Status == \"Active\"\r\n| where (\"{ResourceIdFilter}\" == \"All\" or ResourceId == \"{ResourceIdFilter}\") \r\n // if either alert name or new alert are set, union those 2 together, if neither are set treat as all\r\n and ((\"{AlertDisplayNameFilter}\" == \"All\" and \"{NewAlertFilter}\" == \"All\") or AlertDisplayName == \"{AlertDisplayNameFilter}\" or AlertDisplayName == \"{NewAlertFilter}\")\r\n| extend SeverityRank = case(\r\n Severity == 'High', 3,\r\n Severity == 'Medium', 2,\r\n Severity == 'Low', 1,\r\n 0\r\n )\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n| project\r\n Severity,\r\n SystemAlertId,\r\n AlertDisplayName,\r\n IsIncident = iif(IsIncident == \"true\", \"Incident\", \"Alert\"),\r\n AlertUri,\r\n Tactics,\r\n SeverityRank,\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n ResourceId\r\n| sort by SeverityRank",
+ "size": 0,
+ "title": "{$rowCount} Active Alerts ",
+ "exportedParameters": [
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "Resource",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertUri",
+ "parameterName": "AlertUri",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SystemAlertId",
+ "parameterName": "SystemAlertId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubscriptionId",
+ "parameterName": "SubscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "ResourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Location",
+ "parameterName": "Location",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Severity",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "contains",
+ "thresholdValue": "High",
+ "representation": "redBright",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Low",
+ "representation": "yellow",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Informational ",
+ "representation": "gray",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": null,
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SystemAlertId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertDisplayName",
+ "formatter": 1,
+ "formatOptions": {
+ "linkTarget": "OpenBlade",
+ "bladeOpenContext": {
+ "bladeName": "AlertBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "alertId",
+ "source": "column",
+ "value": "SystemAlertId"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "column",
+ "value": "SubscriptionId"
+ },
+ {
+ "name": "resourceGroup",
+ "source": "column",
+ "value": "ResourceGroup"
+ },
+ {
+ "name": "referencedFrom",
+ "source": "static",
+ "value": "activeAlertsWorkbook"
+ },
+ {
+ "name": "location",
+ "source": "column",
+ "value": "Location"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "columnMatch": "IsIncident",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "AlertUri",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Tactics",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "ResourceId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "TenantId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Description",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProviderName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorOriginalId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceComputerId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceLevel",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceScore",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "StartTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "EndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProcessingEndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedProperties",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Entities",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceSystem",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceSubscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceResourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedLinks",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductComponentName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertLink",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "SystemIncidentId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SystemAlertId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SystemAlertId",
+ "label": "Alert ID"
+ },
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert name"
+ },
+ {
+ "columnId": "IsIncident",
+ "label": "Incident/alert"
+ },
+ {
+ "columnId": "SeverityRank",
+ "label": "Severity"
+ },
+ {
+ "columnId": "SubscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "ResourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "ResourceId",
+ "label": "Resource"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "ShowTable",
+ "comparison": "isNotEqualTo"
+ },
+ "showPin": true,
+ "name": "SecurityIncidents - FilterbyResourceId",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "list",
+ "links": [
+ {
+ "id": "2f6ff56b-9afb-46f6-968d-a59cb744ea14",
+ "linkTarget": "OpenBlade",
+ "linkLabel": "Open Alert View",
+ "style": "primary",
+ "bladeOpenContext": {
+ "bladeName": "AlertBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "alertId",
+ "source": "static",
+ "value": "{SystemAlertId}"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "static",
+ "value": "{SubscriptionId}"
+ },
+ {
+ "name": "resourceGroup",
+ "source": "static",
+ "value": "{ResourceGroup}"
+ },
+ {
+ "name": "referencedFrom",
+ "source": "static",
+ "value": "activeAlertsWorkbook"
+ },
+ {
+ "name": "location",
+ "source": "static",
+ "value": "{Location}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SystemAlertId",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Alerts "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### MITRE ATT&CK tactics "
+ },
+ "customWidth": "100",
+ "name": "text - 17"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/locations/alerts\"\r\n| extend Details = parse_json(properties)\r\n| extend Tactics = Details.[\"Intent\"]\r\n| project Tactics\r\n| extend Tactic = split(Tactics,\",\")\r\n| mv-expand Tactic\r\n| extend Tactic = trim(\" \",tostring(Tactic))\r\n| summarize Count = count() by Tactic\r\n| sort by Count desc\r\n",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "barchart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "Tactics",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "Tactics",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "mapSettings": {
+ "locInfo": "LatLong",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "type": "heatmap",
+ "colorAggregation": "Sum",
+ "nodeColorField": "count_",
+ "heatmapPalette": "greenRed"
+ }
+ }
+ },
+ "name": "query - 17"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "bd374a50-b240-4232-ad4a-77725f80bcf5",
+ "cellValue": "View",
+ "linkTarget": "parameter",
+ "linkLabel": "List View",
+ "subTarget": "List",
+ "preText": "",
+ "style": "link"
+ },
+ {
+ "id": "588b7d9f-8ff1-4afa-8d3f-b0085ae6b148",
+ "cellValue": "View",
+ "linkTarget": "parameter",
+ "linkLabel": "Map View",
+ "subTarget": "Map",
+ "preText": "",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 10"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "1ffc8fe9-a919-4c9e-8489-a92f0a7d79e1",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceFilter",
+ "label": "Resource",
+ "type": 5,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend ResourceIdentifiers = Prop.[\"ResourceIdentifiers\"]\r\n | project ResourceIdentifiers\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n //| where isnotempty(ResourceId )\r\n | extend Resource = tolower(tostring(ResourceId))\r\n | summarize count() by Resource\r\n | project Resource\r\n //| order by Resource asc\r\n",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "e9522d87-143f-408b-93ea-b8f07223995e",
+ "version": "KqlParameterItem/1.0",
+ "name": "SeverityFilter",
+ "label": "Severity",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "value": [
+ "value::all"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n\r\n{\"value\": \"High\", \"label\":\"High\"},\r\n{\"value\": \"Medium\", \"label\":\"Medium\"},\r\n{\"value\": \"Low\", \"label\":\"Low\"},\r\n{\"value\": \"Informational\", \"label\":\"Informational\"}\r\n]\r\n \r\n ",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all"
+ },
+ {
+ "id": "664365b5-1fc4-4cfa-b99d-a72e3d35ab11",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroupFilter",
+ "label": "Resource group",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend resourceGroup = iif(isempty(resourceGroup),\" \",resourceGroup)\r\n| summarize Count =count() by resourceGroup\r\n | project resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "48a8dd7e-43ab-413e-88f8-a433100d92ce",
+ "version": "KqlParameterItem/1.0",
+ "name": "AlertNameFilter",
+ "label": "Alert name",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n | distinct tostring(AlertDisplayName)\r\n | order by AlertDisplayName asc\r\n ",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "378aeb0c-9135-43fa-b46a-86f71baa0137",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagFilter",
+ "label": "Tag",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "securityresources\r\n | where type =~ \"microsoft.security/locations/alerts\"\r\n | extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n | extend Details = parse_json(properties)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n | extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n | extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n | extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n | extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n | extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))| project-away resourceNameIndex, splitAffectedResourceId, hostName\r\n | extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | extend Resource = tolower(tostring(ResourceId))\r\n | project alertId = id, subscriptionId, alertProperties = properties, affectedResourceId = tolower(affectedResourceId),tostring(Severity), SystemAlertId, AlertDisplayName,IsIncident = iif(IsIncident==\"true\",\"Incident\",\"Alert\"),AlertUri,Status,Tactics,SubscriptionId,ResourceGroup,Location, ResourceIdentifier=Details.[\"ResourceIdentifiers\"],Resource\r\n | join kind=leftouter (\r\n resources\r\n | project id = tolower(id), tags\r\n ) on $left.affectedResourceId == $right.id\r\n | extend Tag = parse_json(tags)\r\n | mv-expand Tag\r\n | parse Tag with * ':\"' TagValue '\"}'\r\n | extend TagValue = iif(isempty(TagValue),\" \",TagValue)\r\n | project TagValue, alertId\r\n | distinct TagValue\r\n ",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "List"
+ },
+ "name": "parameters - 23"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type =~ \"microsoft.security/locations/alerts\"\r\n| extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n| extend Details = parse_json(properties)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n| extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n| extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n| extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n| extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n| extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))\r\n| project-away resourceNameIndex, splitAffectedResourceId, hostName\r\n| extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n| mv-expand ResourceIdentifiers\r\n| extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n| extend Resource = tolower(tostring(ResourceId))\r\n| project\r\n alertId = id,\r\n subscriptionId,\r\n alertProperties = properties,\r\n affectedResourceId = tolower(affectedResourceId),\r\n tostring(Severity),\r\n SystemAlertId,\r\n AlertDisplayName,\r\n IsIncident = iif(IsIncident == \"true\", \"Incident\", \"Alert\"),\r\n AlertUri,\r\n Status,\r\n Tactics,\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n ResourceId,\r\n ResourceIdentifier=Details.[\"ResourceIdentifiers\"],\r\n Resource\r\n| join kind=leftouter (\r\n resources\r\n | project id = tolower(id), tags\r\n )\r\n on $left.affectedResourceId == $right.id\r\n| extend id = alertId, subscriptionId, properties = alertProperties\r\n| extend ResourceFilter =\" {ResourceFilter}\"\r\n| where Resource in~ ({ResourceFilter})\r\n| where Severity in~ ({SeverityFilter})\r\n| where AlertDisplayName in~ ({AlertNameFilter})\r\n| where Status == \"Active\"\r\n| extend ResourceGroup = iif(isempty(ResourceGroup), \" \", ResourceGroup)\r\n| where ResourceGroup in~ ({ResourceGroupFilter})\r\n| extend tag = iff(isempty(tags), dynamic({\"tags\": \" \"}), parse_json(tags))\r\n| mv-expand tag\r\n| parse tag with * ':\"' TagValue '\"}'\r\n| extend TagValue = iif(isempty(TagValue), \" \", TagValue)\r\n| where TagValue in ({TagFilter})\r\n| where AlertDisplayName !startswith ('[SAMPLE ALERT]')\r\n| project\r\n (Severity),\r\n tostring(SystemAlertId),\r\n tostring(AlertDisplayName),\r\n IsIncident = iif(IsIncident == \"true\", \"Incident\", \"Alert\"),\r\n AlertURI = tostring(AlertUri),\r\n tostring(Status),\r\n tostring(Tactics),\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n TagValue,\r\n tostring(tags),\r\n tostring(ResourceId)\r\n| distinct\r\n Severity,\r\n SystemAlertId,\r\n AlertDisplayName,\r\n IsIncident,\r\n AlertURI,\r\n Status,\r\n Tactics,\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n tags,\r\n ResourceId\r\n| order by Severity asc",
+ "size": 0,
+ "title": "Active Alerts ",
+ "exportedParameters": [
+ {
+ "fieldName": "Resource",
+ "parameterName": "Resource",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertUri",
+ "parameterName": "AlertUri",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SystemAlertId",
+ "parameterName": "SystemAlertId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubscriptionId",
+ "parameterName": "SubscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "ResourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Location",
+ "parameterName": "Location",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Severity",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "contains",
+ "thresholdValue": "High",
+ "representation": "redBright",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Low",
+ "representation": "yellow",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Informational ",
+ "representation": "gray",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": null,
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SystemAlertId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "IsIncident",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "AlertURI",
+ "formatter": 5,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Location",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ResourceId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Alert ID",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Alert URI",
+ "formatter": 5,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "Resource ID",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertUri",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ResourceIdentifier",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "TenantId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Description",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProviderName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorOriginalId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceComputerId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceLevel",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceScore",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "StartTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "EndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProcessingEndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedProperties",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Entities",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceSystem",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceSubscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceResourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedLinks",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductComponentName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertLink",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "SystemIncidentId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SystemAlertId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert name"
+ },
+ {
+ "columnId": "IsIncident",
+ "label": "Incident/alert"
+ },
+ {
+ "columnId": "AlertURI",
+ "label": "Alert URI"
+ },
+ {
+ "columnId": "SubscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "ResourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "tags",
+ "label": "Tags"
+ },
+ {
+ "columnId": "ResourceId",
+ "label": "Resource"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "List"
+ },
+ "showPin": true,
+ "name": "SecurityIncidents"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "list",
+ "links": [
+ {
+ "id": "8e6f9368-ccbe-4092-b898-8a27c77a06b3",
+ "linkTarget": "OpenBlade",
+ "linkLabel": "Open Alert View",
+ "preText": "",
+ "style": "primary",
+ "bladeOpenContext": {
+ "bladeName": "AlertBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "alertId",
+ "source": "static",
+ "value": "{SystemAlertId}"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "static",
+ "value": "{SubscriptionId}"
+ },
+ {
+ "name": "resourceGroup",
+ "source": "static",
+ "value": "{ResourceGroup}"
+ },
+ {
+ "name": "referencedFrom",
+ "source": "static",
+ "value": "activeAlertsWorkbook"
+ },
+ {
+ "name": "location",
+ "source": "static",
+ "value": "{Location}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "List"
+ },
+ {
+ "parameterName": "SystemAlertId",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "links - 19"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": " To see more information about the alerts in the map view: 1. Configure continuous export to export your security alerts to a Log Analytics workspace by following the instructions described \r\n [ here. ](https://docs.microsoft.com/azure/defender-for-cloud/continuous-export?tabs=azure-portal)\r\n 2. In the \"Workspace\" filter below, choose the Log Analytics workspace your security alerts are exported to.\r\n\r\n"
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ "name": "text - 21"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "8724f927-b766-4814-a895-8c55565fb7f8",
+ "version": "KqlParameterItem/1.0",
+ "name": "Workspace",
+ "type": 5,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| where type contains \"solution\"\r\n| where name contains \"security\"\r\n| project id = tostring(properties.workspaceResourceId)\r\n| distinct id",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ "name": "parameters - 15"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/locations/alerts\"\r\n| project-rename P= properties\r\n| extend Details = parse_json(P)\r\n | extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertLink = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertLink with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertLink with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertLink with * '/location/' Location \r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | where isnotempty(ResourceId )\r\n| project Severity, SystemAlertId, tostring(AlertDisplayName),IsIncident = iif(IsIncident==\"true\",\"Incident\",\"Alert\"),tostring(AlertLink),Status,Tactics,tostring(ResourceId),SubscriptionId,ResourceGroup,Location\r\n| distinct tostring(SystemAlertId),tostring(AlertDisplayName),tostring(AlertLink),tostring(ResourceId)\r\n| summarize count() by ResourceId, AlertLink, AlertDisplayName\r\n",
+ "size": 0,
+ "title": "AlertsMapView ",
+ "exportMultipleValues": true,
+ "exportAggregateParts": true,
+ "exportedParameters": [
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "Resource",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertLink",
+ "parameterName": "AlertLink",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "AlertDisplayName",
+ "parameterType": 1
+ }
+ ],
+ "exportToExcelOptions": "all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "map",
+ "mapSettings": {
+ "locInfo": "AzureResource",
+ "locInfoColumn": "ResourceId",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "nodeColorField": "count_",
+ "colorAggregation": "Sum",
+ "type": "heatmap",
+ "heatmapPalette": "coldHot"
+ }
+ }
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ "name": "AlertsMapView ",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "let T = datatable ( AlertLink:string)\r\n[\r\n{AlertLink}\r\n];\r\nT\r\n| parse AlertLink with * '/alertId/' AlertId '/subscriptionId/' SubscriptionId '/resourceGroup/' ResourceGroup '/' * 'location/' Location \r\n| distinct AlertLink, AlertId, ResourceGroup,Location,SubscriptionId\r\n| join kind = inner (SecurityAlert\r\n| where isempty(ResourceId) == false\r\n| where TimeGenerated > ago(90d)\r\n| project SystemAlertId,ResourceId, DisplayName,StartTime) on $left.AlertId == $right.SystemAlertId\r\n| project ResourceId,DisplayName,AlertId, SubscriptionId, ResourceGroup, Location,StartTime\r\n| order by ResourceId,DisplayName, StartTime asc\r\n\r\n\r\n\r\n",
+ "size": 0,
+ "exportedParameters": [
+ {
+ "fieldName": "AlertId",
+ "parameterName": "AlertId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubscriptionId",
+ "parameterName": "SubscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Location",
+ "parameterName": "Location",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "ResourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspace}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ResourceId",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "23ch"
+ }
+ },
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "45ch"
+ }
+ },
+ {
+ "columnMatch": "AlertId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Location",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "StartTime",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "23ch"
+ }
+ },
+ {
+ "columnMatch": "TimeGenerated",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "22ch"
+ }
+ },
+ {
+ "columnMatch": "AlertLink",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "ResourceId",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "DisplayName",
+ "label": "Alert name"
+ },
+ {
+ "columnId": "AlertId",
+ "label": "Alert ID"
+ },
+ {
+ "columnId": "SubscriptionId",
+ "label": "Subscription ID"
+ },
+ {
+ "columnId": "ResourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "StartTime",
+ "label": "Start time"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "customWidth": "45",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ {
+ "parameterName": "AlertLink",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "AlertLink-Table"
+ }
+ ]
+ },
+ "name": "Security Discipline"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Security"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Security"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "1e6e4cc7-5d76-48ef-8ce1-16f33f4f6dea",
+ "version": "KqlParameterItem/1.0",
+ "name": "SubscriptionAge",
+ "label": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - SubscriptionAge"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Azure resource age\r\nAzure *resource age* is one of the metric to monitor as part of the \"resource consistency\" discipline of the Cloud Adoption Framework. This metric help you to identify old resources to be assessed and cleaned if they are not used anymore."
+ },
+ "name": "text - ResourceAgeDescription"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Common/noSubscriptions",
+ "items": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "SubscriptionAge",
+ "comparison": "isEqualTo",
+ "value": ""
+ },
+ "name": "No Subscriptions group - Age"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SubscriptionAge:id}/resources?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-04-01\"},{\"key\":\"$expand\",\"value\":\"createdTime,changedTime,provisioningState\"}],\"batchDisabled\":true,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"$..id\",\"columnid\":\"id\",\"columnType\":\"string\"},{\"path\":\"$..type\",\"columnid\":\"type\",\"columnType\":\"string\"},{\"path\":\"$..location\",\"columnid\":\"location\",\"columnType\":\"string\"},{\"path\":\"$..createdTime\",\"columnid\":\"createdTime\",\"columnType\":\"datetime\"},{\"path\":\"$..changedTime\",\"columnid\":\"changedTime\",\"columnType\":\"datetime\"},{\"path\":\"$..provisioningState\",\"columnid\":\"provisioningState\",\"columnType\":\"string\"},{\"path\":\"$..tags\",\"columnid\":\"tags\"}]}}]}",
+ "size": 0,
+ "title": "Resource age",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "type",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "createdTime",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "changedTime",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "provisioningState",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "tags",
+ "formatter": 1
+ }
+ ],
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "changedTime",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "type",
+ "label": "Resource Type"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "createdTime",
+ "label": "Created Time"
+ },
+ {
+ "columnId": "changedTime",
+ "label": "Last Change"
+ },
+ {
+ "columnId": "provisioningState",
+ "label": "Provisioning State"
+ },
+ {
+ "columnId": "tags",
+ "label": "Tags"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "changedTime",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SubscriptionAge",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Resource age"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Age"
+ },
+ "name": "Resource Age"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "e15ef842-dadb-4a7b-b5f6-5d1bbe35b7af",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "description": "Cost information can only be displayed per subscription",
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": true,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ },
+ {
+ "id": "b73ef334-95b2-4ead-8dd2-51a90a90ce6f",
+ "version": "KqlParameterItem/1.0",
+ "name": "Aggregation",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\": \"SubscriptionId\", \"label\": \"Subscription\", \"selected\":true},\r\n { \"value\": \"ResourceGroup\", \"label\": \"Resource Group\"},\r\n { \"value\": \"ResourceType\", \"label\": \"Resource Type\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "55ef4a45-0603-48cf-bb9b-a963e7a33be2",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeFrame",
+ "type": 2,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[[\r\n { \"value\": \"BillingMonthToDate\", \"label\": \"Billing MonthToDate\"},\r\n { \"value\": \"MonthToDate\", \"label\": \"MonthToDate\", \"selected\":true },\r\n { \"value\": \"TheLastBillingMonth\", \"label\": \"Last Billing Month\"},\r\n { \"value\": \"TheLastMonth\", \"label\": \"Last Month\"},\r\n { \"value\": \"WeekToDate\", \"label\": \"WeekToDate\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "label": "Timeframe"
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - Cost Subscription"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Microsoft Cost Management\r\n\r\nBefore you can control and optimize your costs, you first need to understand where they originated β from the underlying resources used to support your cloud projects to the environments they're deployed in and the owners who manage them. Full visibility backed by a thorough tagging strategy is critical to accurately understand your spending patterns and enforce cost control mechanisms.\r\n\r\n[Cost Management](https://portal.azure.com/#view/Microsoft_Azure_CostManagement/Menu) is a set of FinOps tools that enable you to analyze, manage, and optimize your costs.\r\n\r\nCalculate your estimated hourly or monthly costs for using Azure with the [Azure Calculator](https://azure.microsoft.com/pricing/calculator/).\r\n\r\nFor more advanced reporting options, build custom [Power BI reports in the FinOps toolkit](https://aka.ms/ftk/pbi)."
+ },
+ "name": "text - AzureCostManagement"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":\" {\\r\\n \\\"type\\\": \\\"Usage\\\",\\r\\n \\\"timeframe\\\": \\\"{TimeFrame}\\\",\\r\\n \\\"dataset\\\": {\\r\\n \\\"granularity\\\": \\\"None\\\",\\r\\n \\\"aggregation\\\": {\\r\\n \\\"totalCost\\\": {\\r\\n \\\"name\\\": \\\"PreTaxCost\\\",\\r\\n \\\"function\\\": \\\"Sum\\\"\\r\\n }\\r\\n },\\r\\n \\\"grouping\\\": [\\r\\n {\\r\\n \\\"type\\\": \\\"Dimension\\\",\\r\\n \\\"name\\\": \\\"{Aggregation}\\\"\\r\\n }\\r\\n ]\\r\\n }\\r\\n }\",\"headers\":[],\"method\":\"POST\",\"path\":\"/subscriptions/{Subscription:id}/providers/Microsoft.CostManagement/query?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2023-11-01\"}],\"batchDisabled\":true,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.properties\",\"columns\":[]}}]}",
+ "size": 0,
+ "title": "Overall cost",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "PreTaxCost",
+ "formatter": 0,
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true,
+ "maximumFractionDigits": 2
+ },
+ "emptyValCustomText": "\"0\""
+ }
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "ResourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": false
+ }
+ },
+ {
+ "columnMatch": "ResourceType",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": false,
+ "showIcon": false
+ }
+ }
+ ],
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "$gen_number_PreTaxCost_0",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PreTaxCost",
+ "label": "Cost"
+ },
+ {
+ "columnId": "Currency",
+ "label": "Currency"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_number_PreTaxCost_0",
+ "sortOrder": 2
+ }
+ ],
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Overall cost"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "6cc7fc26-1a56-41cb-ad43-301e0f9f8903",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "label": "Tag name",
+ "type": 2,
+ "isRequired": true,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ },
+ {
+ "id": "2fc46f5d-ce69-42ea-8ebf-1c3d69c4e780",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "label": "Tag value",
+ "type": 2,
+ "isRequired": true,
+ "query": "Resources\r\n| extend TagValue = tostring(tags.{TagName})\r\n| project TagValue\r\n| distinct TagValue",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": ""
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "parameters - TagFilter"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":\" {\\r\\n \\\"type\\\": \\\"Usage\\\",\\r\\n \\\"timeframe\\\": \\\"{TimeFrame}\\\",\\r\\n \\\"dataset\\\": {\\r\\n \\\"granularity\\\": \\\"None\\\",\\r\\n \\\"filter\\\": {\\r\\n \\\"tags\\\" : {\\r\\n \\\"name\\\" : \\\"{TagName}\\\",\\r\\n \\\"operator\\\" : \\\"In\\\",\\r\\n \\\"values\\\" : [\\r\\n \\\"{TagValue}\\\"\\r\\n ]\\r\\n }\\r\\n },\\r\\n \\\"aggregation\\\": {\\r\\n \\\"totalCost\\\": {\\r\\n \\\"name\\\": \\\"PreTaxCost\\\",\\r\\n \\\"function\\\": \\\"Sum\\\"\\r\\n }\\r\\n },\\r\\n \\\"grouping\\\": [\\r\\n {\\r\\n \\\"type\\\": \\\"Dimension\\\",\\r\\n \\\"name\\\": \\\"{Aggregation}\\\"\\r\\n }\\r\\n ]\\r\\n }\\r\\n }\",\"headers\":[],\"method\":\"POST\",\"path\":\"/subscriptions/{Subscription:id}/providers/Microsoft.CostManagement/query?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2023-11-01\"}],\"batchDisabled\":true,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.properties\",\"columns\":[]}}]}",
+ "size": 3,
+ "title": "Overall cost filtered by tag",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "PreTaxCost",
+ "formatter": 0,
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true,
+ "maximumFractionDigits": 2
+ },
+ "emptyValCustomText": "\"0\""
+ }
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "ResourceType",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": false,
+ "showIcon": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PreTaxCost",
+ "label": "Cost"
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "TagValue",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ "name": "query - Sub cost per tag"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Cost"
+ },
+ "name": "RC_Cost Management"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "value::tenant"
+ ],
+ "parameters": [
+ {
+ "id": "476f61f4-2271-4e58-9b5e-7958d9a4ca3b",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resources/tenants"
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Compliance"
+ },
+ "name": "parameters - Scope Filter For RC_Compliance"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Build and scale your applications quickly while maintaining control\r\nTake advantage of built-in and custom policies to set guardrails in your subscriptions. Easily deploy fully governed environments throughout your organization with Azure Blueprints. And, manage costs by gaining insights into your cloud spend so that you get the most from your cloud investments. \r\n- Enforce and audit your policies for any Azure service \r\n- Create compliant environments using Azure Blueprints, including resources, policies, and role-access controls \r\n- Ensure that youβre compliant with external regulations by using built-in compliance controls \r\n- Monitor cost and encourage accountability across your entire organization"
+ },
+ "name": "text - 16"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Breakdown of compliance information for each assignment at subscription/MG/tenant scope\r\n// Gets aggregated compliance and policy definition information for each of the assignments in the selected scope as well as a few additional details, including: policySetDefinition or policyDefinition details for those assignments, the number of policies/groups within the policysetDefinitions listed, number of non-compliant policies within each policySetDefinition and the resource count breakdown per compliance state for those assignments.\r\n// Click the \"Run query\" command above to execute the query and see results.\r\npolicyResources\r\n| where type =~'Microsoft.Authorization/PolicyAssignments'\r\n| project policyAssignmentId = tolower(tostring(id)), policyAssignmentName = name, policyAssignmentDisplayName = tostring(properties.displayName), policyAssignmentScope = tostring(properties.scope), policyAssignmentDefinitionId = tolower(properties.policyDefinitionId), policyAssignmentNotScopes = tolower(properties.notScopes) \r\n| where policyAssignmentScope == \"{Subscription}\"\r\n| join kind=leftouter(\r\n policyResources\r\n | where type =~'Microsoft.Authorization/PolicySetDefinitions' or type =~'Microsoft.Authorization/PolicyDefinitions'\r\n | project definitionId = tolower(id), type, numberOfPolicies = array_length(properties.policyDefinitions), category = tostring(properties.metadata.category), numberOfGroups= array_length(properties.policyDefinitionGroups), mode = tostring(properties.mode)\r\n | extend isRegulatoryInitiative = iff(category =~ 'Regulatory Compliance', true, false)\r\n | extend definitionType = iff(type =~ 'Microsoft.Authorization/PolicysetDefinitions', 'initiative', 'policy')\r\n | extend isRPMode = iff(mode startswith 'Microsoft.', true, false)\r\n | project definitionId, numberOfPolicies, category, numberOfGroups, isRegulatoryInitiative, definitionType, isRPMode\r\n) on $left.policyAssignmentDefinitionId == $right.definitionId\r\n| join kind=leftouter(\r\n policyResources \r\n | where type =~ 'Microsoft.PolicyInsights/PolicyStates'\r\n | extend complianceState = tostring(properties.complianceState)\r\n | extend policyStateResourceId =id, resourceId = tostring(properties.resourceId), policyAssignmentId = tostring(properties.policyAssignmentId), policyDefinitionId = tostring(properties.policyDefinitionId), policySetDefinitionId = tostring(properties.policySetDefinitionId), policyDefinitionReferenceId = tostring(properties.policyDefinitionReferenceId), policyDefinitionAction = tostring(properties.policyDefinitionAction), policyDefinitionGroupNames = iff(isnotnull(properties.policyDefinitionGroupNames), properties.policyDefinitionGroupNames, dynamic([''])), stateWeight = toint(properties.stateWeight)\r\n | summarize max(stateWeight) by resourceId, policyAssignmentId, policySetDefinitionId\r\n | summarize resourceCounts = count() by policyAssignmentId, policySetDefinitionId, max_stateWeight\r\n| extend complianceState = case(\r\nmax_stateWeight == 300, 'noncompliant',\r\nmax_stateWeight == 200, 'compliant',\r\nmax_stateWeight == 100, 'conflict',\r\nmax_stateWeight == 50, 'exempt',\r\nmax_stateWeight == 10, 'unknown',\r\n'notapplicable')\r\n | extend pack = pack('complianceState', complianceState, 'resourceCounts', resourceCounts), numberOfNonCompliantResources = toint(iff(complianceState =~ 'NonCompliant', resourceCounts,0))\r\n | summarize numberOfNonCompliantResources = max(numberOfNonCompliantResources), details = makelist(pack) by policyAssignmentId, policySetDefinitionId\r\n | limit 5000\r\n) on $left.policyAssignmentId == $right.policyAssignmentId\r\n| sort by numberOfNonCompliantResources desc\r\n| project-away policyAssignmentId1",
+ "size": 0,
+ "title": "Resource compliance",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resources/tenants",
+ "crossComponentResources": [
+ "value::tenant"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "policyAssignmentId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentDisplayName",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "GenericDetails",
+ "linkIsContextBlade": true
+ }
+ },
+ {
+ "columnMatch": "policyAssignmentScope",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentDefinitionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentNotScopes",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "definitionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "numberOfPolicies",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "numberOfGroups",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "isRegulatoryInitiative",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "isRPMode",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policySetDefinitionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "category",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "policyAssignmentId",
+ "label": "Assignment ID"
+ },
+ {
+ "columnId": "policyAssignmentName",
+ "label": "Assignment name"
+ },
+ {
+ "columnId": "policyAssignmentDisplayName",
+ "label": "Assignment display name"
+ },
+ {
+ "columnId": "policyAssignmentScope",
+ "label": "Assignment scope"
+ },
+ {
+ "columnId": "policyAssignmentDefinitionId",
+ "label": "Assignment definition ID"
+ },
+ {
+ "columnId": "definitionId",
+ "label": "Definition ID"
+ },
+ {
+ "columnId": "numberOfPolicies",
+ "label": "Number of policies"
+ },
+ {
+ "columnId": "category",
+ "label": "Category"
+ },
+ {
+ "columnId": "definitionType",
+ "label": "Type"
+ },
+ {
+ "columnId": "numberOfNonCompliantResources",
+ "label": "Non compliant resources"
+ },
+ {
+ "columnId": "details",
+ "label": "Details"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "category",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "name": "query - ResourceCompliance"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\"\r\n| summarize AggregatedValue = count() by ResourceProviderValue\r\n| order by AggregatedValue desc",
+ "size": 3,
+ "showAnalytics": true,
+ "title": "Failures by resources",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "33",
+ "name": "query - Failures by resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\" or ActivityStatusValue has \"Failed\"\r\n| summarize AggregatedValue = count() by OperationNameValue\r\n| order by AggregatedValue desc",
+ "size": 3,
+ "showAnalytics": true,
+ "title": "Failures by operations",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "33",
+ "name": "query - Failures by operations"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\" or ActivityStatusValue has \"Failed\"\r\n| summarize AggregatedValue = count() by CategoryValue\r\n| order by AggregatedValue desc",
+ "size": 3,
+ "showAnalytics": true,
+ "title": "Failures by category",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "33",
+ "name": "query - Failures by category"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\" or ActivityStatusValue has \"Failed\"\r\n| order by CategoryValue\r\n",
+ "size": 0,
+ "title": "Failure by category details",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "showExportToExcel": true,
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Authorization",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Authorization_d",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Claims",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Claims_d",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Properties_d",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "_ResourceId",
+ "formatter": 5
+ }
+ ],
+ "filter": true
+ }
+ },
+ "name": "query - Failure by category details"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - ComplianceQueries"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Compliance"
+ },
+ "name": "RC_Compliance"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "4168a8b2-a522-4f0d-9575-893d70d9239d",
+ "version": "KqlParameterItem/1.0",
+ "name": "RulesCount",
+ "type": 1,
+ "description": "Count of the governance rule, when there is no rules, empty state will be shown",
+ "query": "securityresources\r\n| where type == \"microsoft.security/governancerules\"\r\n| where tostring(properties.isDisabled) == \"false\"\r\n| count",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "Tabs"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Security governance in Microsoft Defender for Cloud\r\n\r\n Microsoft Defender for Cloud continuously assesses your hybrid and multi-cloud workloads and provides you with recommendations to harden your assets and enhance your security posture. Central security teams often experience challenges when driving the personnel within their organizations to implement recommendations. The organizations' security posture can suffer as a result. \r\nWe're introducing a brand-new, built-in governance experience to set ownership and expected remediation timeframes to resolve recommendations.\r\n\r\nTo use this governance report, you need to create security governance rules.\r\n [Learn more >](https://aka.ms/GovernanceDocumentation)\r\n"
+ },
+ "conditionalVisibility": {
+ "parameterName": "RulesCount",
+ "comparison": "isEqualTo"
+ },
+ "name": "text - 13"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Select one or more governance rules from the list to see a list of affected recommendations",
+ "style": "info"
+ },
+ "name": "RulesGridExplination"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| summarize count() by assignmentStatus\r\n",
+ "size": 3,
+ "title": "Resource status",
+ "noDataMessage": "No unhealthy resources found",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false,
+ "maximumFractionDigits": 2,
+ "maximumSignificantDigits": 3
+ }
+ }
+ },
+ "showBorder": true
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Ontime",
+ "color": "blue"
+ },
+ {
+ "seriesName": "Completed",
+ "color": "green"
+ },
+ {
+ "seriesName": "Unassigned",
+ "color": "orange"
+ },
+ {
+ "seriesName": "Overdue",
+ "color": "redBright"
+ }
+ ]
+ }
+ },
+ "customWidth": "20",
+ "name": "statusePerAssessment"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/governancerules\"\r\n| where tostring(properties.isDisabled) == \"false\"\r\n| extend ruleName = todynamic(name)\r\n| extend ownerType = iif(tostring(properties.ownerSource.type) == \"Manually\", \"Email\", \"ByTag\")\r\n| extend description = tostring(properties.description)\r\n| extend displayName = tostring(properties.displayName)\r\n| extend governanceEmailNotification = todynamic(properties.governanceEmailNotification)\r\n| extend isGracePeriod = todynamic(properties.isGracePeriod)\r\n| extend remediationTimeframe = todynamic(properties.remediationTimeframe)\r\n| extend Days = tolong(totimespan(remediationTimeframe)/1d)\r\n| extend Days = iff(Days > 0, iff(Days == 1, \"1 day\", strcat(Days,\" days\")), \"\")\r\n| extend sourceResourceType = todynamic(properties.sourceResourceType)\r\n| extend conditionSets = todynamic(properties.conditionSets)\r\n| extend rulePriority = todynamic(properties.rulePriority)\r\n| extend ownerSource = todynamic(properties.ownerSource)\r\n| extend isDisabled = todynamic(properties.isDisabled)\r\n| extend ruleType = todynamic(properties.ruleType)\r\n| extend RuleConditionSet = tostring(properties.conditionSets), property = properties.conditionSets[0].conditions[0].property, operator = properties.conditionSets[0].conditions[0].operator\r\n| project Subscription = tostring(subscriptionId), [\"Display name\"] = tostring(properties.displayName), Priority = toint(properties.rulePriority), [\"Remediation timeframe\"] = Days, [\"Owner type\"] = ownerType, Owner = tostring(properties.ownerSource.value), [\"Grace period enabled\"] = tostring(properties.isGracePeriod), Rule = id, properties, RuleConditionSet\r\n| sort by Subscription, Priority asc",
+ "size": 0,
+ "title": "Governance rules",
+ "noDataMessage": "No Rules found",
+ "exportMultipleValues": true,
+ "exportedParameters": [
+ {
+ "fieldName": "Rule",
+ "parameterName": "Rule",
+ "parameterType": 1,
+ "quote": ""
+ },
+ {
+ "fieldName": "RuleConditionSet",
+ "parameterName": "RuleConditionSet",
+ "parameterType": 1,
+ "quote": ""
+ },
+ {
+ "fieldName": "Owner",
+ "parameterName": "Owner",
+ "parameterType": 1,
+ "quote": ""
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Display name",
+ "formatter": 1,
+ "formatOptions": {
+ "bladeOpenContext": {
+ "bladeName": "CreateGovernanceRuleContextBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "",
+ "source": "column",
+ "value": "properties"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "column",
+ "value": "subscriptionId"
+ },
+ {
+ "name": "governanceRuleToEdit",
+ "source": "column",
+ "value": "properties"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "columnMatch": "Priority",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Remediation timeframe",
+ "formatter": 0,
+ "tooltipFormat": {
+ "tooltip": "DD.HH.MM.SS"
+ }
+ },
+ {
+ "columnMatch": "Grace period enabled",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "true",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "false",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Rule",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "ownerDetails",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "isGracePeriod",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "remediationTimeframe",
+ "formatter": 1
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_Subscription_0",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Owner",
+ "label": "Owner details"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_Subscription_0",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "80",
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Rules",
+ "styleSettings": {
+ "maxWidth": "100"
+ }
+ }
+ ],
+ "exportParameters": true
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "RulesCount",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "subscriptionOverView"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "---"
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "resourceView"
+ },
+ "name": "LineSeparator1"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "π‘ Selected filter for **RuleConditionSet:** {RuleConditionSet}\r\nπ‘ Selected filter for **Rule:** {Rule}\r\nπ‘ Selected filter for **Owner:** {Owner}\r\n",
+ "style": "{selectedTab}"
+ },
+ "conditionalVisibility": {
+ "parameterName": "parameter1",
+ "comparison": "isEqualTo",
+ "value": "1"
+ },
+ "name": "ResourceFilter"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": " \r\n---"
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "resourceView"
+ },
+ "name": "LineSeparator2"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Select a recommendation from the list to see a list of affected resources",
+ "style": "info"
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Rule",
+ "comparison": "isNotEqualTo"
+ },
+ {
+ "parameterName": "DisplayName",
+ "comparison": "isEqualTo"
+ }
+ ],
+ "name": "assessmentsExplaination"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false\r\n| extend RuleConditionSet = '{RuleConditionSet}'\r\n| where RuleConditionSet contains name or RuleConditionSet contains properties.metadata.severity\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| summarize count() by assignmentStatus",
+ "size": 3,
+ "title": "Status per rule",
+ "noDataMessage": "No unhealthy resources found",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "rowLimit": 10000
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false,
+ "maximumFractionDigits": 2,
+ "maximumSignificantDigits": 3
+ }
+ }
+ },
+ "showBorder": true
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Ontime",
+ "color": "blue"
+ },
+ {
+ "seriesName": "Completed",
+ "color": "green"
+ },
+ {
+ "seriesName": "Unassigned",
+ "color": "orange"
+ },
+ {
+ "seriesName": "Overdue",
+ "color": "redBright"
+ }
+ ]
+ }
+ },
+ "customWidth": "20",
+ "conditionalVisibility": {
+ "parameterName": "Rule",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "statusPerRule"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false\r\n| extend RuleConditionSet = '{RuleConditionSet}'\r\n| where RuleConditionSet contains name or RuleConditionSet contains properties.metadata.severity\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| where hasAssignment == true\r\n| extend owner = tostring(governanceassignmentsProperties.owner)\r\n| extend owner = iif(isnull(owner) == false and isempty(owner) == false, owner, \"Unspecified\")\r\n| extend assignmentStatus = iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\")\r\n| summarize Ontime = countif(assignmentStatus == \"Ontime\"), Overdue = countif(assignmentStatus == \"Overdue\") by selectedOwner = owner\r\n| sort by Overdue desc",
+ "size": 0,
+ "title": "Status per owner",
+ "exportMultipleValues": true,
+ "exportedParameters": [
+ {
+ "fieldName": "selectedOwner",
+ "parameterName": "selectedOwner",
+ "quote": ""
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Ontime",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "info",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Overdue",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "selectedOwner",
+ "label": "Owner"
+ }
+ ]
+ }
+ },
+ "customWidth": "30",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Owner",
+ "comparison": "isNotEqualTo"
+ },
+ {
+ "parameterName": "RuleConditionSet",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "Owner status"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false and isnull(DisplayName) == false\r\n| extend RuleConditionSet = '{RuleConditionSet}'\r\n| where RuleConditionSet contains name or RuleConditionSet contains properties.metadata.severity\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| extend Status = assignmentStatus\r\n| summarize Completed = countif(Status == \"Completed\"), Ontime = countif(Status == \"Ontime\"), Overdue = countif(Status == \"Overdue\"),Unassigned = countif(Status == \"Unassigned\") by DisplayName = tostring(properties.displayName)\r\n| sort by Overdue desc",
+ "size": 0,
+ "title": "Recommendations",
+ "noDataMessage": "No Assessments found",
+ "exportedParameters": [
+ {
+ "fieldName": "id",
+ "parameterName": "id",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "DisplayName",
+ "parameterName": "DisplayName",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "75ch"
+ }
+ },
+ {
+ "columnMatch": "Completed",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Ontime",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "1",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ },
+ {
+ "representation": "Unknown",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Overdue",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Unassigned",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "0"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 1,
+ "formatOptions": {
+ "customColumnWidthSetting": "90ch"
+ }
+ },
+ {
+ "columnMatch": "owner",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "40ch"
+ }
+ },
+ {
+ "columnMatch": "DueDate",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "Severity",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "OpenBlade",
+ "linkIsContextBlade": false,
+ "showIcon": true,
+ "bladeOpenContext": {
+ "bladeName": "GenericResourceHealthDetailsBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "resourceId",
+ "source": "cell",
+ "value": "%2Fsubscriptions%2F3b5bc982-20bc-4b59-b1ca-f8488bb86736%2FresourceGroups%2Fdemo%2Fproviders%2FMicrosoft.HybridCompute%2Fmachines%2FW2019"
+ }
+ ]
+ },
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "ResourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Source",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "OperatingSystem",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Category",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "Remediation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 11,
+ "formatOptions": {
+ "linkColumn": "Remediation",
+ "linkTarget": "Url"
+ },
+ "tooltipFormat": {
+ "tooltip": "Click to view remediation steps"
+ }
+ },
+ {
+ "columnMatch": "Code",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Healthy",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Unhealthy",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "$gen_thresholds_Ontime_2",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "DisplayName",
+ "label": "Display name"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_thresholds_Ontime_2",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "Rule",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Assessmetns"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": ""
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "RuleConditionSet",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "empty text"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend displayNameFilter = tostring(\"{DisplayName}\")\r\n| extend selectedOwner = '{selectedOwner}'\r\n| where displayNameFilter == tostring(properties.displayName)\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, owner = properties.owner,governanceassignmentsProperties = todynamic(properties), remediationDueDate, isGrace = properties.isGracePeriod) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| extend source = trim(' ', tolower(tostring(properties.resourceDetails.Source)))\r\n | extend resourceId = iff(source =~ \"azure\", properties.resourceDetails.Id, iff(source =~ \"aws\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), properties.resourceDetails.Id, iff(source =~ \"gcp\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), properties.resourceDetails.Id, iff(source =~ 'aws', properties.resourceDetails.AzureResourceId, iff(source =~ 'gcp', properties.resourceDetails.AzureResourceId, properties.resourceDetails.Id)))))\r\n| extend owner = tostring(governanceassignmentsProperties.owner)\r\n| extend owner = iif(isnull(owner) == false and isempty(owner) == false and hasAssignment == true , owner, iif(hasAssignment == false, owner, \"Unspecified\"))\r\n| where '{selectedOwner}' == '' or (selectedOwner contains owner and hasAssignment == true)\r\n| project [\"Resource\"] = resourceId, Subscription = subscriptionId ,Status = assignmentStatus, Owner = owner, [\"Due date\"] = remediationDueDate, [\"Grace period enabled\"] = isGrace\r\n| sort by Status desc",
+ "size": 0,
+ "title": "List of resources for: {DisplayName}",
+ "noDataMessage": "No Assessments found",
+ "exportFieldName": "id",
+ "exportParameterName": "id",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Resource id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "90ch"
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Completed",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Unassigned",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Overdue",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Ontime",
+ "representation": "1",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": null,
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "Grace period enabled",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "true",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "false",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "owner",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "40ch"
+ }
+ },
+ {
+ "columnMatch": "DueDate",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "90ch"
+ }
+ },
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "100ch"
+ }
+ },
+ {
+ "columnMatch": "Completed",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "green",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Ontime",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "blue",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Overdue",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "redBright",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Unassigned",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "orange",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Severity",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "OpenBlade",
+ "linkIsContextBlade": false,
+ "showIcon": true,
+ "bladeOpenContext": {
+ "bladeName": "GenericResourceHealthDetailsBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "resourceId",
+ "source": "cell",
+ "value": "%2Fsubscriptions%2F3b5bc982-20bc-4b59-b1ca-f8488bb86736%2FresourceGroups%2Fdemo%2Fproviders%2FMicrosoft.HybridCompute%2Fmachines%2FW2019"
+ }
+ ]
+ },
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "ResourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Source",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "OperatingSystem",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Category",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "Remediation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 11,
+ "formatOptions": {
+ "linkColumn": "Remediation",
+ "linkTarget": "Url"
+ },
+ "tooltipFormat": {
+ "tooltip": "Click to view remediation steps"
+ }
+ },
+ {
+ "columnMatch": "Code",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Healthy",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Unhealthy",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "DisplayName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Assignments"
+ }
+ ]
+ },
+ "name": "assessmentsWithExplaination"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "π‘ Selected filter for **DisplayName:** {DisplayName}\r\nπ‘ Selected filter for **selectedOwner:** {selectedOwner}\r\n",
+ "style": "{selectedTab}"
+ },
+ "conditionalVisibility": {
+ "parameterName": "parameter1",
+ "comparison": "isEqualTo",
+ "value": "1"
+ },
+ "name": "ResourceFilter - Copy"
+ }
+ ]
+ },
+ "name": "assessmentsGrid"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Governance"
+ },
+ "name": "RC_Governance"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "cc98cfec-0182-4887-854e-536e9f3857da",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ },
+ {
+ "id": "1c3411d9-e319-4d74-8e97-61e2f4c56a56",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "isRequired": true,
+ "query": "resources\r\n| summarize by location\r\n| where location != \"global\"",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": "westeurope"
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 0"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Azure subscription and service limits, quotas, and constraints \r\nTo know more about Azure service limits & quotas, see [Azure subscription and service limits, quotas, and constraints](https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=%2Fazure%2Fnetworking%2Ftoc.json#networking-limits)."
+ },
+ "name": "text - Limits"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Common/noSubscriptions",
+ "items": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isEqualTo",
+ "value": ""
+ },
+ "name": "No Subscriptions group - RC_Quota"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{Subscription:id}/providers/microsoft.compute/locations/{Location}/usages?api-version=2022-03-01\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"currentValue\",\"columnid\":\"Used\",\"columnType\":\"long\"},{\"path\":\"limit\",\"columnid\":\"Limit\",\"columnType\":\"long\"},{\"path\":\"name.localizedValue\",\"columnid\":\"Resource\"}]}}]}",
+ "size": 0,
+ "title": "Compute resource limits",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "customWidth": "50",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ {
+ "parameterName": "Location",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "query - ComputeLimits"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{Subscription:id}/providers/microsoft.network/locations/{Location}/usages?api-version=2022-01-01\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"currentValue\",\"columnid\":\"Used\",\"columnType\":\"long\"},{\"path\":\"limit\",\"columnid\":\"Limit\",\"columnType\":\"long\"},{\"path\":\"name.localizedValue\",\"columnid\":\"Resource\"}]}}]}",
+ "size": 0,
+ "title": "Network resource limits",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - NetworkLimits"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{Subscription:id}/providers/microsoft.storage/locations/{Location}/usages?api-version=2021-09-01\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"currentValue\",\"columnid\":\"Used\",\"columnType\":\"long\"},{\"path\":\"limit\",\"columnid\":\"Limit\",\"columnType\":\"long\"},{\"path\":\"name.localizedValue\",\"columnid\":\"Resource\"}]}}]}",
+ "size": 4,
+ "title": "Storage account limits",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - StorageLimits"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Quota"
+ },
+ "name": "Usage + limits"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Automation",
+ "expandable": true,
+ "expanded": true,
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.automation'\r\n\tor type has 'microsoft.logic'\r\n\tor type has 'microsoft.web/customapis'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.automation/automationaccounts', 'Automation Accounts',\r\n\ttype == 'microsoft.web/serverfarms', \"App Service Plans\",\r\n\tkind == 'functionapp', \"Azure Functions\", \r\n\tkind == \"api\", \"API Apps\", \r\n\ttype == 'microsoft.web/sites', \"App Services\",\r\n\ttype =~ 'microsoft.web/connections', 'LogicApp Connectors',\r\n\ttype =~ 'microsoft.web/customapis','LogicApp API Connectors',\r\n\ttype =~ 'microsoft.logic/workflows','LogicApps',\r\n\ttype =~ 'microsoft.automation/automationaccounts/runbooks', 'Automation Runbooks',\r\n type =~ 'microsoft.automation/automationaccounts/configurations', 'Automation Configurations',\r\nstrcat(\"Not Translated: \", type))\r\n| summarize count() by type\r\n| where type !has \"Not Translated\"",
+ "size": 3,
+ "title": "Count of all resource types",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "Count of all resource types"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.automation'\r\n\t or type has 'microsoft.logic'\r\n\t or type has 'microsoft.web/customapis'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.automation/automationaccounts', 'Automation Accounts',\r\n\ttype =~ 'microsoft.web/connections', 'LogicApp Connectors',\r\n\ttype =~ 'microsoft.web/customapis','LogicApp API Connectors',\r\n\ttype =~ 'microsoft.logic/workflows','LogicApps',\r\n\ttype =~ 'microsoft.automation/automationaccounts/runbooks', 'Automation Runbooks',\r\n\ttype =~ 'microsoft.automation/automationaccounts/configurations', 'Automation Configurations',\r\n\tstrcat(\"Not Translated: \", type))\r\n| extend RunbookType = tostring(properties.runbookType)\r\n| extend LogicAppTrigger = properties.definition.triggers\r\n| extend LogicAppTrigger = iif(type =~ 'LogicApps', case(\r\n\tLogicAppTrigger has 'manual', tostring(LogicAppTrigger.manual.type),\r\n\tLogicAppTrigger has 'Recurrence', tostring(LogicAppTrigger.Recurrence.type),\r\n\tstrcat(\"Unknown Trigger type\", LogicAppTrigger)), LogicAppTrigger)\r\n| extend State = case(\r\n\ttype =~ 'Automation Runbooks', properties.state, \r\n\ttype =~ 'LogicApps', properties.state,\r\n\ttype =~ 'Automation Accounts', properties.state,\r\n\ttype =~ 'Automation Configurations', properties.state,\r\n\t' ')\r\n| extend CreatedDate = case(\r\n\ttype =~ 'Automation Runbooks', properties.creationTime, \r\n\ttype =~ 'LogicApps', properties.createdTime,\r\n\ttype =~ 'Automation Accounts', properties.creationTime,\r\n\ttype =~ 'Automation Configurations', properties.creationTime,\r\n\t' ')\r\n| extend LastModified = case(\r\n\ttype =~ 'Automation Runbooks', properties.lastModifiedTime, \r\n\ttype =~ 'LogicApps', properties.changedTime,\r\n\ttype =~ 'Automation Accounts', properties.lastModifiedTime,\r\n\ttype =~ 'Automation Configurations', properties.lastModifiedTime,\r\n\t' ')\r\n| extend Details = pack_all()\r\n| project Resource=id, subscriptionId, type, resourceGroup, RunbookType, LogicAppTrigger, State, Details",
+ "size": 0,
+ "title": "Details",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Automation Detailed"
+ }
+ ]
+ },
+ "name": "Group - Automation",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "App services",
+ "expandable": true,
+ "expanded": true,
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.web'\r\n\t or type =~ 'microsoft.apimanagement/service'\r\n\t or type =~ 'microsoft.network/frontdoors'\r\n\t or type =~ 'microsoft.network/applicationgateways'\r\n\t or type =~ 'microsoft.appconfiguration/configurationstores'\r\n| extend type = case(\r\n\ttype == 'microsoft.web/serverfarms', \"App Service Plans\",\r\n\tkind == 'functionapp', \"Azure Functions\", \r\n\tkind == \"api\", \"API Apps\", \r\n\ttype == 'microsoft.web/sites', \"App Services\",\r\n\ttype =~ 'microsoft.network/applicationgateways', 'App Gateways',\r\n\ttype =~ 'microsoft.network/frontdoors', 'Front Door',\r\n\ttype =~ 'microsoft.apimanagement/service', 'API Management',\r\n\ttype =~ 'microsoft.web/certificates', 'App Certificates',\r\n\ttype =~ 'microsoft.appconfiguration/configurationstores', 'App Config Stores',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| summarize count() by type",
+ "size": 3,
+ "title": "Count of all resource types",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Apps Overview"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.web'\r\n\t or type =~ 'microsoft.apimanagement/service'\r\n\t or type =~ 'microsoft.network/frontdoors'\r\n\t or type =~ 'microsoft.network/applicationgateways'\r\n\t or type =~ 'microsoft.appconfiguration/configurationstores'\r\n| extend type = case(\r\n\ttype == 'microsoft.web/serverfarms', \"App Service Plans\",\r\n\tkind == 'functionapp', \"Azure Functions\", \r\n\tkind == \"api\", \"API Apps\", \r\n\ttype == 'microsoft.web/sites', \"App Services\",\r\n\ttype =~ 'microsoft.network/applicationgateways', 'App Gateways',\r\n\ttype =~ 'microsoft.network/frontdoors', 'Front Door',\r\n\ttype =~ 'microsoft.apimanagement/service', 'API Management',\r\n\ttype =~ 'microsoft.web/certificates', 'App Certificates',\r\n\ttype =~ 'microsoft.appconfiguration/configurationstores', 'App Config Stores',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| extend Sku = case(\r\n\ttype =~ 'App Gateways', properties.sku.name, \r\n\ttype =~ 'Azure Functions', properties.sku,\r\n\ttype =~ 'API Management', sku.name,\r\n\ttype =~ 'App Service Plans', sku.name,\r\n\ttype =~ 'App Services', properties.sku,\r\n\ttype =~ 'App Config Stores', sku.name,\r\n\t' ')\r\n| extend State = case(\r\n\ttype =~ 'App Config Stores', properties.provisioningState,\r\n\ttype =~ 'App Service Plans', properties.status,\r\n\ttype =~ 'Azure Functions', properties.state,\r\n\ttype =~ 'App Services', properties.state,\r\n\ttype =~ 'API Management', properties.provisioningState,\r\n\ttype =~ 'App Gateways', properties.provisioningState,\r\n\ttype =~ 'Front Door', properties.provisioningState,\r\n\t' ')\r\n| mv-expand publicIpId = properties.frontendIPConfigurations\r\n| mv-expand publicIpId = publicIpId.properties.publicIPAddress.id\r\n| extend publicIpId = tostring(publicIpId)\r\n\t| join kind=leftouter(\r\n\t \tResources\r\n \t\t| where type =~ 'microsoft.network/publicipaddresses'\r\n \t\t| project publicIpId = id, publicIpAddress = tostring(properties.ipAddress)) on publicIpId\r\n| extend PublicIP = case(\r\n\ttype =~ 'API Management', properties.publicIPAddresses,\r\n\ttype =~ 'App Gateways', publicIpAddress,\r\n type =~ 'App Services', properties.inboundIpAddress,\r\n type =~ 'Azure Functions', properties.inboundIpAddress,\r\n\t' ')\r\n| extend Instances = case(\r\n\ttype =~ 'API Management', sku.capacity,\r\n type =~ 'App Services', properties.siteConfig.numberOfWorkers,\r\n type =~ 'Azure Functions', properties.siteConfig.numberOfWorkers,\r\n type =~ 'App Service Plans', properties.currentNumberOfWorkers,\r\n\t' ')\r\n| extend ServicePlan = case(\r\n type =~ 'App Services', properties.serverFarmId,\r\n type =~ 'Azure Functions', properties.serverFarmId,\r\n\t' ')\r\n| extend Details = pack_all()\r\n| project Resource=id, type, subscriptionId, Sku, State, PublicIP, Instances, ServicePlan, Details",
+ "size": 0,
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Apps Detailed"
+ }
+ ]
+ },
+ "name": "Group - App Services",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Data",
+ "expandable": true,
+ "expanded": true,
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.documentdb/databaseaccounts'\r\n\tor type =~ 'microsoft.sql/servers/databases'\r\n\tor type =~ 'microsoft.dbformysql/servers'\r\n\tor type =~ 'microsoft.sql/servers'\r\n or type =~ 'Microsoft.DBforPostgreSQL/servers'\r\n or type =~ 'Microsoft.DBforMariaDB/servers'\r\n or type =~ 'microsoft.dbforpostgresql/flexibleservers'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.documentdb/databaseaccounts', 'CosmosDB',\r\n\ttype =~ 'microsoft.sql/servers/databases', 'SQL DBs',\r\n\ttype =~ 'microsoft.dbformysql/servers', 'MySQL Servers',\r\n\ttype =~ 'microsoft.sql/servers', 'SQL Servers',\r\n type =~ 'Microsoft.DBforPostgreSQL/servers', 'PostgreSQL Servers',\r\n type =~ 'microsoft.dbforpostgresql/flexibleservers', 'PostgreSQL Flexi Servers',\r\n type =~ 'Microsoft.DBforMariaDB/servers', 'MariaDB Servers',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| summarize count() by type",
+ "size": 3,
+ "title": "Count of all resource types",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Data Overview"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// data\r\n// Click the \"Run query\" command above to execute the query and see results.\r\nresources \r\n| where type =~ 'microsoft.documentdb/databaseaccounts'\r\n\tor type =~ 'microsoft.sql/servers/databases'\r\n\tor type =~ 'microsoft.dbformysql/servers'\r\n\tor type =~ 'microsoft.sql/servers'\r\n or type =~ 'Microsoft.DBforPostgreSQL/servers'\r\n or type =~ 'Microsoft.DBforMariaDB/servers'\r\n or type =~ 'microsoft.dbforpostgresql/flexibleservers'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.documentdb/databaseaccounts', 'CosmosDB',\r\n\ttype =~ 'microsoft.sql/servers/databases', 'SQL DBs',\r\n\ttype =~ 'microsoft.dbformysql/servers', 'MySQL Servers',\r\n\ttype =~ 'microsoft.sql/servers', 'SQL Servers',\r\n type =~ 'Microsoft.DBforPostgreSQL/servers', 'PostgreSQL Servers',\r\n type =~ 'microsoft.dbforpostgresql/flexibleservers', 'PostgreSQL Flexi Servers',\r\n type =~ 'Microsoft.DBforMariaDB/servers', 'MariaDB Servers',\r\n\tstrcat(\"Not Translated: \", type))\r\n| extend Sku = case(\r\n\ttype =~ 'CosmosDB', properties.databaseAccountOfferType,\r\n\ttype =~ 'SQL DBs', sku.name,\r\n\ttype =~ 'MySQL Servers', sku.name,\r\n type =~ 'PostgreSQL Servers', sku.name,\r\n type =~ 'PostgreSQL Flexi Servers', sku.name,\r\n type =~ 'MariaDB Servers', sku.name,\r\n\t' ')\r\n| extend Status = case(\r\n\ttype =~ 'CosmosDB', properties.provisioningState,\r\n\ttype =~ 'SQL DBs', properties.status,\r\n type =~ 'SQL Servers', properties.state,\r\n\ttype =~ 'MySQL Servers', properties.userVisibleState,\r\n type =~ 'PostgreSQL Servers', properties.state,\r\n type =~ 'PostgreSQL Flexi Servers', properties.state,\r\n type =~ 'MariaDB Servers', properties.userVisibleState,\r\n\t' ')\r\n| extend Endpoint = case(\r\n\ttype =~ 'MySQL Servers', properties.fullyQualifiedDomainName,\r\n\ttype =~ 'SQL Servers', properties.fullyQualifiedDomainName,\r\n\ttype =~ 'CosmosDB', properties.documentEndpoint,\r\n type =~ 'PostgreSQL Servers', properties.fullyQualifiedDomainName,\r\n type =~ 'PostgreSQL Flexi Servers', properties.fullyQualifiedDomainName,\r\n type =~ 'MariaDB Servers', properties.fullyQualifiedDomainName,\r\n\t' ')\r\n| extend PublicNetworkAccess = case(\r\n\ttype =~ 'MySQL Servers', properties.publicNetworkAccess,\r\n\ttype =~ 'SQL Servers', properties.publicNetworkAccess,\r\n type =~ 'PostgreSQL Servers', properties.publicNetworkAccess,\r\n type =~ 'PostgreSQL Flexi Servers', properties.publicNetworkAccess,\r\n type =~ 'MariaDB Servers', properties.publicNetworkAccess,\r\n\t' ')\r\n| extend Version = case(\r\n\ttype =~ 'MySQL Servers', properties.version,\r\n\ttype =~ 'SQL Servers', properties.version,\r\n type =~ 'PostgreSQL Servers', properties.version,\r\n type =~ 'PostgreSQL Flexi Servers', properties.version,\r\n type =~ 'MariaDB Servers', properties.version,\r\n\t' ')\r\n| extend maxSizeGB = todouble(case(\r\n\ttype =~ 'SQL DBs', properties.maxSizeBytes,\r\n\ttype =~ 'MySQL Servers', properties.storageProfile.storageMB,\r\n type =~ 'PostgreSQL Servers', properties.storageProfile.storageMB,\r\n type =~ 'PostgreSQL Flexi Servers', properties.storageProfile.storageMB,\r\n type =~ 'MariaDB Servers', properties.storageProfile.storageMB,\r\n\t' '))\r\n| extend maxSizeGB = iif(type has 'SQL DBs', maxSizeGB /1000 /1000, maxSizeGB)\r\n| extend Details = pack_all()\r\n| project Resource=id, resourceGroup, subscriptionId, type, Sku, Status, Endpoint, Version, PublicNetworkAccess, maxSizeGB, Details\r\n\r\n",
+ "size": 0,
+ "title": "Details",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxSizeGB",
+ "formatter": 0,
+ "numberFormat": {
+ "unit": 4,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false
+ }
+ }
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Data Detailed"
+ }
+ ]
+ },
+ "name": "Data",
+ "styleSettings": {
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_PaaS"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_PaaS"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Azure Advisor/AzureServiceRetirement",
+ "items": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_ServicesRetirement"
+ },
+ "name": "group - Service retirement"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Common/noSubscriptions",
+ "items": []
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Subscription",
+ "comparison": "isEqualTo",
+ "value": ""
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Quota"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Age"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_ServicesRetirement"
+ }
+ ],
+ "name": "No Subscriptions group"
+ }
+ ]
+ },
+ "name": "Azure Governance Workbook"
+ }
+ ],
+ "fallbackResourceIds": [
+ "azure monitor"
+ ],
+ "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
+ },
+ "version": "",
+ "workbookJson": "[string(variables('$fxv#0'))]",
+ "workbookId": "907",
+ "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
+ "finOpsToolkitVersion": "0.8",
+ "resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
+ },
+ "resources": [
+ {
+ "condition": "[parameters('enableDefaultTelemetry')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]",
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "FinOps toolkit",
+ "version": "[variables('finOpsToolkitVersion')]"
+ }
+ },
+ "resources": []
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Insights/workbooks",
+ "apiVersion": "2022-04-01",
+ "name": "[guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[variables('resourceTags')]",
+ "kind": "shared",
+ "properties": {
+ "category": "workbook",
+ "description": "[parameters('description')]",
+ "displayName": "[parameters('displayName')]",
+ "serializedData": "[variables('workbookJson')]",
+ "sourceId": "Azure Monitor",
+ "version": "[variables('version')]"
+ }
+ }
+ ],
+ "outputs": {
+ "workbookId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the workbook."
+ },
+ "value": "[resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))]"
+ },
+ "workbookUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "Link to the workbook in the Azure portal."
+ },
+ "value": "[format('{0}/#view/AppInsightsExtension/UsageNotebookBlade/ComponentId/Azure%20Monitor/ConfigurationId/{1}/Type/{2}/WorkbookTemplateName/{3}', environment().portal, uriComponent(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))), reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').category, uriComponent(reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').displayName))]"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "outputs": {
+ "optimizationId": {
+ "type": "string",
+ "metadata": {
+ "description": "Optimization workbook resource ID."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', format('{0}-Optimization', parameters('displayNamePrefix'))), '2022-09-01').outputs.workbookId.value]"
+ },
+ "optimizationUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "Optimization workbook Azure portal link."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', format('{0}-Optimization', parameters('displayNamePrefix'))), '2022-09-01').outputs.workbookUrl.value]"
+ },
+ "governanceId": {
+ "type": "string",
+ "metadata": {
+ "description": "Governance workbook resource ID."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', format('{0}-Governance', parameters('displayNamePrefix'))), '2022-09-01').outputs.workbookId.value]"
+ },
+ "governanceUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "Governance workbook Azure portal link."
+ },
+ "value": "[reference(resourceId('Microsoft.Resources/deployments', format('{0}-Governance', parameters('displayNamePrefix'))), '2022-09-01').outputs.workbookUrl.value]"
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/deploy/finops-workbooks-0.8.ui.json b/docs/deploy/finops-workbooks-0.8.ui.json
new file mode 100644
index 000000000..0c6148af6
--- /dev/null
+++ b/docs/deploy/finops-workbooks-0.8.ui.json
@@ -0,0 +1,65 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
+ "handler": "Microsoft.Azure.CreateUIDef",
+ "version": "0.1.2-preview",
+ "parameters": {
+ "config": {
+ "basics": {
+ "description": "FinOps workbooks facilitate FinOps tasks that help you build, manage, and optimize cloud resources. [Learn more](https://aka.ms/finops/workbooks)",
+ "location": {
+ "label": "Location",
+ "resourceTypes": ["Microsoft.Insights/workbooks"]
+ }
+ }
+ },
+ "resourceTypes": ["Microsoft.Insights/workbooks"],
+ "basics": [
+ {
+ "name": "displayNamePrefix",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Name prefix",
+ "defaultValue": "FinOps",
+ "toolTip": "Prefix to use for each of the workbook names (e.g., 'FinOps-Optimization', 'FinOps-Governance').",
+ "constraints": {
+ "required": true,
+ "regex": "^.{1,220}$",
+ "validationMessage": "Name prefix cannot be longer than 220 characters."
+ },
+ "visible": true
+ }
+ ],
+ "steps": [
+ {
+ "name": "workbooks",
+ "label": "Workbooks",
+ "elements": [
+ {
+ "name": "workbookSelectionIntro",
+ "options": { "text": "Select the FinOps workbooks you would like to include in this deployment. You can select more later." },
+ "type": "Microsoft.Common.TextBlock"
+ },
+ {
+ "name": "includeOptimization",
+ "label": "Optimization",
+ "toolTip": "Select to include the optimization workbook for workload and rate optimization as well as sustainability, security, and more.",
+ "type": "Microsoft.Common.CheckBox",
+ "defaultValue": true
+ },
+ {
+ "name": "includeGovernance",
+ "label": "Governance",
+ "toolTip": "Select to include the governance workbook for queries to support the Well-Architected Framework governance pillar.",
+ "type": "Microsoft.Common.CheckBox",
+ "defaultValue": true
+ }
+ ]
+ }
+ ],
+ "outputs": {
+ "displayNamePrefix": "[basics('displayNamePrefix')]",
+ "includeOptimization": "[steps('workbooks').includeOptimization]",
+ "includeGovernance": "[steps('workbooks').includeGovernance]",
+ "location": "[location()]"
+ }
+ }
+}
diff --git a/docs/deploy/finops-workbooks-latest.json b/docs/deploy/finops-workbooks-latest.json
index c69184b8d..a55d7e08f 100644
--- a/docs/deploy/finops-workbooks-latest.json
+++ b/docs/deploy/finops-workbooks-latest.json
@@ -4,8 +4,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "1383268354205988078"
+ "version": "0.33.93.31351",
+ "templateHash": "12338140091055370020"
}
},
"parameters": {
@@ -61,7 +61,7 @@
},
"variables": {
"telemetryId": "00f120b5-2007-6120-0000-a7730126b006",
- "finOpsToolkitVersion": "0.7",
+ "finOpsToolkitVersion": "0.8",
"resourceTags": "[union(parameters('tags'), coalesce(tryGet(parameters('tagsByResource'), 'Microsoft.Insights/workbooks'), createObject()), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', 'FinOps workbooks'))]"
},
"resources": [
@@ -115,8 +115,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "7858422852674045208"
+ "version": "0.33.93.31351",
+ "templateHash": "10544991197071991923"
}
},
"parameters": {
@@ -3873,6 +3873,7 @@
"query": "recoveryservicesresources\r\n| where type =~ 'microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems'\r\n| extend vaultId = tostring(properties.vaultId),resourceId = tostring(properties.sourceResourceId),idleBackup= datetime_diff('day', now(), todatetime(properties.lastBackupTime)) > 90, resourceType=tostring(properties.workloadType), protectionState=tostring(properties.protectionState),lastBackupTime=tostring(properties.lastBackupTime), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),lastBackupDate=todatetime(properties.lastBackupTime)\r\n| where idleBackup != 0\r\n| project resourceId,vaultId,idleBackup,lastBackupDate,resourceType,protectionState,lastBackupTime,location,resourceGroup,subscriptionId\r\n| join kind = inner(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend vaultId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | project vaultId\r\n )\r\n on vaultId\r\n | project-away vaultId1",
"size": 0,
"title": "Idle backups",
+ "showExportToExcel": true,
"queryType": 1,
"resourceType": "microsoft.resourcegraph/resources",
"crossComponentResources": [
@@ -4557,7 +4558,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "resources\r\n|Β whereΒ typeΒ ==Β 'microsoft.compute/snapshots'\r\n|Β whereΒ resourceGroupΒ inΒ ({ResourceGroup})\r\n|Β extendΒ StorageSkuΒ =Β tostring(sku.tier),Β resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),diskSize=tostring(properties.diskSizeGB)\r\n|Β whereΒ StorageSkuΒ ==Β \"Premium\"\r\n|Β projectΒ id,name,StorageSku,diskSize,location,resourceGroup,subscriptionId\r\n|Β joinΒ kindΒ =Β innerunique(\r\nΒ Β Β Β resources\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β replace('{}',Β 'null',Β tostring(tags))\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β parse_json(replaced_tags)\r\nΒ Β Β Β |Β mv-expandΒ replaced_tags\r\nΒ Β Β Β |Β extendΒ tagNameΒ =Β tostring(bag_keys(replaced_tags)[0])\r\nΒ Β Β Β |Β extendΒ tagValueΒ =Β tostring(replaced_tags['{TagName}'])\r\nΒ Β Β Β |Β whereΒ tagNameΒ hasΒ '{TagName}'Β andΒ tagValueΒ hasΒ '{TagValue}'\r\nΒ Β Β Β |Β distinctΒ id\r\nΒ Β Β Β )\r\nΒ Β Β Β onΒ id\r\n",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend StorageSku = tostring(sku.tier), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),diskSize=tostring(properties.diskSizeGB)\r\n| where StorageSku == \"Premium\"\r\n| project id,name,StorageSku,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
"size": 0,
"title": "Snapshots using premium storage",
"noDataMessage": "No snapshots are using Premium storage",
@@ -4636,7 +4637,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "resources\r\n|Β whereΒ typeΒ ==Β 'microsoft.compute/snapshots'\r\n|Β whereΒ resourceGroupΒ inΒ ({ResourceGroup})\r\n|Β extendΒ parentDiskΒ =Β properties.creationData.sourceResourceId,Β diskSize=tostring(properties.diskSizeGB),resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n|Β projectΒ id,parentDisk,diskSize,location,resourceGroup,subscriptionId\r\n|Β joinΒ kindΒ =Β innerunique(\r\nΒ Β Β Β resources\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β replace('{}',Β 'null',Β tostring(tags))\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β parse_json(replaced_tags)\r\nΒ Β Β Β |Β mv-expandΒ replaced_tags\r\nΒ Β Β Β |Β extendΒ tagNameΒ =Β tostring(bag_keys(replaced_tags)[0])\r\nΒ Β Β Β |Β extendΒ tagValueΒ =Β tostring(replaced_tags['{TagName}'])\r\nΒ Β Β Β |Β whereΒ tagNameΒ hasΒ '{TagName}'Β andΒ tagValueΒ hasΒ '{TagValue}'\r\nΒ Β Β Β |Β distinctΒ id\r\nΒ Β Β Β )\r\nΒ Β Β Β onΒ id\r\n",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend parentDisk = properties.creationData.sourceResourceId, diskSize=tostring(properties.diskSizeGB),resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id,parentDisk,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
"size": 0,
"title": "All Managed Disks snapshots",
"noDataMessage": "No snapshots found",
@@ -4685,7 +4686,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "resources\r\n|Β whereΒ typeΒ ==Β 'microsoft.compute/disks'\r\n|Β projectΒ id\r\n",
+ "query": "resources\r\n| where type == 'microsoft.compute/disks'\r\n| project id\r\n",
"size": 0,
"title": "All managed disks",
"queryType": 1,
@@ -6707,6 +6708,22 @@
"linkLabel": "VM Scale Set",
"subTarget": "VMSS",
"style": "link"
+ },
+ {
+ "id": "be820ada-a0f4-4c51-b17b-3e506edd1410",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Custom Images",
+ "subTarget": "CustomImages",
+ "style": "link"
+ },
+ {
+ "id": "1dda3cc4-59ba-4758-9c51-d6c9fab18647",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Arc",
+ "subTarget": "arc",
+ "style": "link"
}
]
},
@@ -6722,177 +6739,1241 @@
"content": {
"version": "NotebookGroup/1.0",
"groupType": "editable",
- "title": "Virtual Machines",
- "loadType": "always",
"items": [
{
- "type": 12,
+ "type": 3,
"content": {
- "version": "NotebookGroup/1.0",
- "groupType": "editable",
- "loadType": "always",
- "items": [
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
- "size": 0,
- "title": "AHB Disabled",
- "noDataMessage": "All of your VMs have AHB enabled.",
- "noDataMessageStyle": 3,
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ],
- "gridSettings": {
- "formatters": [
- {
- "columnMatch": "subscriptionId",
- "formatter": 15,
- "formatOptions": {
- "linkTarget": null,
- "showIcon": true
- }
- }
- ]
- }
- },
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
- },
- "name": "AHB Disabled"
- },
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.['licenseType']) has \"Windows\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
- "size": 0,
- "title": "AHB Enabled",
- "noDataMessage": "None of your VMs have AHB enabled.",
- "noDataMessageStyle": 4,
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ],
- "gridSettings": {
- "formatters": [
- {
- "columnMatch": "VMRG",
- "formatter": 0,
- "tooltipFormat": {
- "tooltip": "test"
- }
- },
- {
- "columnMatch": "subscriptionId",
- "formatter": 15,
- "formatOptions": {
- "linkTarget": null,
- "showIcon": true
- }
- }
- ]
- }
- },
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
- },
- "name": "WindowsAHBEnabled"
- },
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "resourcechanges\r\n| where properties.changeType == \"Update\" and properties.targetResourceType == \"microsoft.compute/virtualmachines\"\r\n| mv-expand changes = properties.changes\r\n| mv-expand LicenseChanges=changes.['properties.licenseType']\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| where isnotnull(LicenseChanges)\r\n| where tostring(LicenseChanges.newValue) has \"Windows\"\r\n| project VMID=properties.targetResourceId, NewLicense=tostring(LicenseChanges.newValue), DateofChange=todatetime(properties.changeAttributes.timestamp)\r\n",
- "size": 0,
- "title": "VM Latest Change Last 7 days",
- "noDataMessage": "AHB was not enabled in the last 7 days.",
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ]
- },
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "CustomImageAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType != \"Windows\"\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ },
+ "name": "CustomImageAHBDisabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Custom Images - Windows Azure Hybrid Benefit (AHB) Overview\r\n#### Note: This tab contains information only about Custom Images where the OS is Windows."
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors-CustomImages",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name, SubId=id\r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows, SubId, SubscriptionName\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SubId",
+ "formatter": 5
},
- "name": "VM Latest Change Last 7 days"
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "finalBy": "SubscriptionName"
},
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
- "size": 0,
- "title": "Get VM vCPU",
- "exportParameterName": "ResourceSKU",
- "showExportToExcel": true,
- "queryType": 12,
- "gridSettings": {
- "rowLimit": 5000
- }
+ "labelSettings": [
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
},
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
},
- "name": "query - Get VM vCPU"
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckAHBWindows",
+ "formatter": 1
},
- {
- "type": 1,
- "content": {
- "json": "## Windows Azure Hybrid Benefit (AHB) Overview"
- },
- "name": "AHB Overview"
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
},
- {
- "type": 1,
- "content": {
- "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
- "style": "info"
- },
- "name": "NUmber of Processors",
- "styleSettings": {
- "margin": "10px",
- "showBorder": true
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
}
},
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckAHBWindows\r\n",
- "size": 0,
- "title": "Summary of Windows VMs with or without AHB per Subscription",
- "showRefreshButton": true,
- "showExportToExcel": true,
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ],
- "visualization": "table",
- "gridSettings": {
- "sortBy": [
- {
- "itemKey": "SubscriptionName",
- "sortOrder": 1
- }
- ],
- "labelSettings": [
- {
- "columnId": "SubscriptionName",
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB per Subscription - Custom Images"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "Prioritize AHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "showPin": false,
+ "name": "ConsumedCoresPerAhubpriority-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "30",
+ "showPin": false,
+ "name": "ConsumedCoresPerVM-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"}]}",
+ "size": 0,
+ "title": "Required CPU cores for AHB activation on remaining VMs",
+ "noDataMessage": "All VMs within the current scope have AHB enabled",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "36",
+ "showPin": false,
+ "name": "CoresNotEnabledperAHBPriority-CustomImages"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBEnabled",
+ "label": "See VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBDisabled",
+ "label": "See VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VM AHB Enabled - CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"ConsumedCoresPerAhubpriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBEnabeld-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"CoresNotEnabledperAHBPriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit not enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBDisabled-CustomImages"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "CustomImages"
+ },
+ "name": "CustomImages"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "3f12a4b6-b18d-4191-8c1c-6045a7edcb6b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server ESU licenses",
+ "subTarget": "windowsEsu",
+ "style": "link"
+ },
+ {
+ "id": "0ca197b7-6f96-4def-9be4-dc26bb09538a",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server Management enabled by Azure Arc",
+ "subTarget": "arcAHB",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 1"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server ESU licenses",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| project name, status, operatingSystem, esuStatus\r\n| summarize count() by esuStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not enabled",
+ "color": "red"
+ },
+ {
+ "seriesName": "Enabled",
+ "color": "green"
+ },
+ {
+ "seriesName": "Enabled by Volume License",
+ "color": "greenDarkDark"
+ },
+ {
+ "seriesName": "License deactivated",
+ "color": "yellow"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Review Your Current License Usage\r\n\r\nTo review your current license usage, go to the [Azure Arc](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/usageOverview) resource blade.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "e24ddae0-37c5-46a7-b52f-b307baaa6f51",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleLicenses",
+ "label": "View eligible licenses?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Windows Server 2012 or 2012 R2 machines running Arc agent version below 1.34 are ineligible for Extended Security Updates (ESUs). Upgrade to the latest version of the Azure Arc agent to allow enabling ESU on these machines.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| extend esuStatusIcon = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), '8',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' or properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '7',\r\n '91'\r\n)\r\n| project name, status, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags, esuStatus, esuStatusIcon, agentVersion\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesEsu','Microsoft.HybridCompute/machines'))\r\n| project name,esuStatus,esuStatusIcon,operatingSystem,resourceGroup,subscriptionDisplayName,status,type,id,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "windowsEsu"
+ },
+ "name": "group-Esu"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server Management enabled by Azure Arc",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Benefits of Windows Server Management with Azure Arc\r\n\r\nWindows Server Management enabled by Azure Arc offers customers with Windows Server licenses that have active Software Assurances or Windows Server licenses that are active subscription licenses a few benefits, including access to Azure Update Management, Azure Change Tracking and Inventory and Windwos best practices assessment. FOr the full list of benefits, visit [Windows Server Management enabled by Azure Arc.](https://learn.microsoft.com/azure/azure-arc/servers/windows-server-management-overview?tabs=portal)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| summarize count() by benefitsStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not activated",
+ "color": "red"
+ },
+ {
+ "seriesName": "Activated",
+ "color": "green"
+ },
+ {
+ "seriesName": "Activated via Pay-as-you-go",
+ "color": "greenDarkDark"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Yes"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "To enable Windows Server Management with Azure Arc, visit the [Arc service blade.](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/softwareAssurance)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleAHBResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "benefitsStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "3",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcAHBResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arcAHB"
+ },
+ "name": "group-ahbArc"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arc"
+ },
+ "name": "Arc"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Virtual Machines",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) has \"Windows\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "VMRG",
+ "formatter": 0,
+ "tooltipFormat": {
+ "tooltip": "test"
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "WindowsAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| where properties.changeType == \"Update\" and properties.targetResourceType == \"microsoft.compute/virtualmachines\"\r\n| mv-expand changes = properties.changes\r\n| mv-expand LicenseChanges=changes.['properties.licenseType']\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| where isnotnull(LicenseChanges)\r\n| where tostring(LicenseChanges.newValue) has \"Windows\"\r\n| project VMID=properties.targetResourceId, NewLicense=tostring(LicenseChanges.newValue), DateofChange=todatetime(properties.changeAttributes.timestamp)\r\n",
+ "size": 0,
+ "title": "VM Latest Change Last 7 days",
+ "noDataMessage": "AHB was not enabled in the last 7 days.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "VM Latest Change Last 7 days"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - Get VM vCPU"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Windows Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckAHBWindows\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "sortBy": [
+ {
+ "itemKey": "SubscriptionName",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
"label": "Subscription Name"
},
{
@@ -6941,7 +8022,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
"size": 0,
"title": "Summary of Windows VMs with or without AHB",
"showRefreshButton": true,
@@ -7146,8 +8227,7 @@
"jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
"timeContext": {
"durationMs": 86400000
- },
- "value": "Yes"
+ }
},
{
"id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
@@ -7160,8 +8240,7 @@
"additionalResourceOptions": [],
"showDefault": false
},
- "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
- "value": "Yes"
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
},
{
"id": "20a00706-a89b-42aa-8dea-9c44c93e8014",
@@ -11496,7 +12575,7 @@
"workbookJson": "[string(variables('$fxv#0'))]",
"workbookId": "0b2",
"telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
- "finOpsToolkitVersion": "0.7",
+ "finOpsToolkitVersion": "0.8",
"resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
},
"resources": [
@@ -11586,8 +12665,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "2416775183167475351"
+ "version": "0.33.93.31351",
+ "templateHash": "10054098441393474777"
}
},
"parameters": {
@@ -19760,7 +20839,7 @@
"workbookJson": "[string(variables('$fxv#0'))]",
"workbookId": "907",
"telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
- "finOpsToolkitVersion": "0.7",
+ "finOpsToolkitVersion": "0.8",
"resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
},
"resources": [
diff --git a/docs/deploy/governance-workbook-0.8.json b/docs/deploy/governance-workbook-0.8.json
new file mode 100644
index 000000000..b02d65cc5
--- /dev/null
+++ b/docs/deploy/governance-workbook-0.8.json
@@ -0,0 +1,8238 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "10054098441393474777"
+ }
+ },
+ "parameters": {
+ "displayName": {
+ "type": "string",
+ "defaultValue": "Governance",
+ "metadata": {
+ "description": "Optional. Display name for the workbook used in the Gallery. Must be unique in the resource group."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Location of the resources. Default: Same as deployment. See https://aka.ms/azureregions."
+ }
+ },
+ "description": {
+ "type": "string",
+ "defaultValue": "Reports to help you optimize your cost.",
+ "metadata": {
+ "description": "Optional. Workbook description."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags for all resources."
+ }
+ },
+ "enableDefaultTelemetry": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": {
+ "version": "Notebook/1.0",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "19b06e9e-eec2-4a7e-935d-92d77b2f87a3",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Overview",
+ "subTarget": "RC_Overview",
+ "preText": "",
+ "style": "link"
+ },
+ {
+ "id": "528e35b9-aca4-423f-9267-50f62011a3cb",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual machine",
+ "subTarget": "RC_VM",
+ "style": "link"
+ },
+ {
+ "id": "7faacfc6-663e-4ff5-bb64-f86d995f9563",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Storage + backup",
+ "subTarget": "RC_Storage",
+ "style": "link"
+ },
+ {
+ "id": "c17ce2c0-83e6-4e5c-9c3e-f34cbf887e73",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Network",
+ "subTarget": "RC_Network",
+ "style": "link"
+ },
+ {
+ "id": "2f4e49d7-3198-4173-af1c-4cf4c5178000",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "PaaS",
+ "subTarget": "RC_PaaS",
+ "style": "link"
+ },
+ {
+ "id": "f8f7e1fc-8f5d-442a-9788-3eabbf8ab275",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Security",
+ "subTarget": "RC_Security",
+ "style": "link"
+ },
+ {
+ "id": "80ad2db8-a21e-43e9-bd28-75d8d606eaf5",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Monitoring",
+ "subTarget": "RC_Monitoring",
+ "style": "link"
+ },
+ {
+ "id": "6fc0fef0-a016-4923-9239-b641eb5bdc4f",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Services retirement",
+ "subTarget": "RC_ServicesRetirement",
+ "style": "link"
+ },
+ {
+ "id": "e40dbf66-2abe-4bcf-acd7-1ee6d8fc950b",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Resource age",
+ "subTarget": "RC_Age",
+ "style": "link"
+ },
+ {
+ "id": "e112c6e1-db5e-4b0e-99e9-2edac0eba177",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Tag explorer",
+ "subTarget": "RC_Tag",
+ "style": "link"
+ },
+ {
+ "id": "840cd5ea-6b74-484b-846f-01d424b295cd",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Cost management",
+ "subTarget": "RC_Cost",
+ "style": "link"
+ },
+ {
+ "id": "5436a8c9-73c4-4121-a814-dd6fbb0c0d0c",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Usage + limits",
+ "subTarget": "RC_Quota",
+ "style": "link"
+ },
+ {
+ "id": "fa81b57a-8f3c-4502-beb0-128a7fc35f7c",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Compliance",
+ "subTarget": "RC_Compliance",
+ "style": "link"
+ },
+ {
+ "id": "e3acf38e-2dc4-423e-b91d-a173280b5808",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Governance",
+ "subTarget": "RC_Governance",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "RC_Menu"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "value::tenant"
+ ],
+ "parameters": [
+ {
+ "id": "30297a43-7d69-4daf-93c9-8170d5a995b0",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "label": "Subscriptions",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all"
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resources/tenants"
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Age"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Cost"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Quota"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Compliance"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_ServicesRetirement"
+ }
+ ],
+ "name": "parameters - Subscriptions"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Welcome the Azure governance workbook"
+ },
+ "name": "Welcome"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Reference: [Governance in the Microsoft Cloud Adoption Framework for Azure](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/)",
+ "style": "upsell"
+ },
+ "name": "Reference"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "The objective of this workbook is to provide a comprehensive overview of the governance posture of your Azure environment. It offers the standard metrics aligned with the Cloud Adoption Framework and has the capability to identify and apply recommendations to identify non compliance. This workbook is part of the [FinOps toolkit](https://aka.ms/finops/toolkit).\r\n\r\n## Overview of the Cloud Adoption Framework\r\n\r\n* The CAF Govern methodology provides a structured approach for establishing and optimizing cloud governance in Azure. The guidance is relevant for organizations across any industry. It covers essential categories of cloud governance, such as regulatory compliance, security, operations, cost, data, resource management, and artificial intelligence (AI).\r\n\r\n* Cloud governance is how you control cloud use across your organization. Cloud governance sets up guardrails that regulate cloud interactions. These guardrails are a framework of policies, procedures, and tools you use to establish control. Policies define acceptable and unacceptable cloud activity, and the procedures and tools you use ensure all cloud usage aligns with those policies. Successful cloud governance prevents all unauthorized or unmanaged cloud usage.\r\n\r\n* To assess your transformation journey, try the [governance benchmark tool](https://learn.microsoft.com/assessments/b1891add-7646-4d60-a875-32a4ab26327e/).\r\n\r\n\r\n\r\n\r\n"
+ },
+ "name": "text - Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Prerequisites\r\n\r\nThis workbook will present various cost-related details in the form of governance, networking, storage, VMs, web apps, SQL, and cost information to educate the business about cost related to various resources.\r\n\r\nThis workbook requires the following least-privileged (minimum) roles:\r\n\r\n * **Reader** : allows you to import the workbook without saving it and view all of the workbook tabs except the *Cost management* tab.\r\n * **Cost Management Reader**: allows you to view the costs in the *Cost management* tab \r\n * **Workbook Contributor** : allows you to import and save the workbook\r\n\r\n\r\n"
+ },
+ "name": "text - 7"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\n| summarize count()",
+ "size": 3,
+ "title": "Count of all resources",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ }
+ },
+ "name": "Count of all resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| summarize Count=count(id) by subscriptionId\r\n| order by Count desc",
+ "size": 3,
+ "title": "Resource count per subscription (Top 10)",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "type",
+ "formatter": 1
+ }
+ ],
+ "rowLimit": 10,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription name"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ "leftContent": {
+ "columnMatch": "Count",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 2,
+ "maximumSignificantDigits": 3
+ }
+ }
+ },
+ "showBorder": false,
+ "rowLimit": 10,
+ "sortCriteriaField": "count_type",
+ "sortOrderField": 2
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "subscriptionId",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "Count",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "subscriptionId",
+ "yAxis": [
+ "Count"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "subscriptionId",
+ "color": "greenDark"
+ }
+ ]
+ },
+ "mapSettings": {
+ "locInfo": "LatLong",
+ "sizeSettings": "Count",
+ "sizeAggregation": "Sum",
+ "legendMetric": "Count",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "type": "heatmap",
+ "colorAggregation": "Sum",
+ "nodeColorField": "Count",
+ "heatmapPalette": "greenRed"
+ }
+ }
+ },
+ "name": "Resource count per subscription (Top 10)"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources \r\n| extend type = case(\r\ntype contains 'microsoft.netapp/netappaccounts', 'NetApp Accounts',\r\ntype contains \"microsoft.compute\", \"Azure Compute\",\r\ntype contains \"microsoft.logic\", \"LogicApps\",\r\ntype contains 'microsoft.keyvault/vaults', \"Key Vaults\",\r\ntype contains 'microsoft.storage/storageaccounts', \"Storage Accounts\",\r\ntype contains 'microsoft.compute/availabilitysets', 'Availability Sets',\r\ntype contains 'microsoft.operationalinsights/workspaces', 'Azure Monitor Resources',\r\ntype contains 'microsoft.operationsmanagement', 'Operations Management Resources',\r\ntype contains 'microsoft.insights', 'Azure Monitor Resources',\r\ntype contains 'microsoft.desktopvirtualization/applicationgroups', 'WVD Application Groups',\r\ntype contains 'microsoft.desktopvirtualization/workspaces', 'WVD Workspaces',\r\ntype contains 'microsoft.desktopvirtualization/hostpools', 'WVD Hostpools',\r\ntype contains 'microsoft.recoveryservices/vaults', 'Backup Vaults',\r\ntype contains 'microsoft.web', 'App Services',\r\ntype contains 'microsoft.managedidentity/userassignedidentities','Managed Identities',\r\ntype contains 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\r\ntype contains 'microsoft.hybridcompute/machines', 'ARC Machines',\r\ntype contains 'Microsoft.EventHub', 'Event Hub',\r\ntype contains 'Microsoft.EventGrid', 'Event Grid',\r\ntype contains 'Microsoft.Sql', 'SQL Resources',\r\ntype contains 'Microsoft.HDInsight/clusters', 'HDInsight Clusters',\r\ntype contains 'microsoft.devtestlab', 'DevTest Labs Resources',\r\ntype contains 'microsoft.containerinstance', 'Container Instances Resources',\r\ntype contains 'microsoft.portal/dashboards', 'Azure Dashboards',\r\ntype contains 'microsoft.containerregistry/registries', 'Container Registry',\r\ntype contains 'microsoft.automation', 'Automation Resources',\r\ntype contains 'sendgrid.email/accounts', 'SendGrid Accounts',\r\ntype contains 'microsoft.datafactory/factories', 'Data Factory',\r\ntype contains 'microsoft.databricks/workspaces', 'Databricks Workspaces',\r\ntype contains 'microsoft.machinelearningservices/workspaces', 'Machine Learnings Workspaces',\r\ntype contains 'microsoft.alertsmanagement/smartdetectoralertrules', 'Azure Monitor Resources',\r\ntype contains 'microsoft.apimanagement/service', 'API Management Services',\r\ntype contains 'microsoft.dbforpostgresql', 'PostgreSQL Resources',\r\ntype contains 'microsoft.scheduler/jobcollections', 'Scheduler Job Collections',\r\ntype contains 'microsoft.visualstudio/account', 'Azure DevOps Organization',\r\ntype contains 'microsoft.network/', 'Network Resources',\r\ntype contains 'microsoft.migrate/' or type contains 'microsoft.offazure', 'Azure Migrate Resources',\r\ntype contains 'microsoft.servicebus/namespaces', 'Service Bus Namespaces',\r\ntype contains 'microsoft.classic', 'ASM Obsolete Resources',\r\ntype contains 'microsoft.resources/templatespecs', 'Template Spec Resources',\r\ntype contains 'microsoft.virtualmachineimages', 'VM Image Templates',\r\ntype contains 'microsoft.documentdb', 'CosmosDB DB Resources',\r\ntype contains 'microsoft.alertsmanagement/actionrules', 'Azure Monitor Resources',\r\ntype contains 'microsoft.kubernetes/connectedclusters', 'ARC Kubernetes Clusters',\r\ntype contains 'microsoft.purview', 'Purview Resources',\r\ntype contains 'microsoft.security', 'Security Resources',\r\ntype contains 'microsoft.cdn', 'CDN Resources',\r\ntype contains 'microsoft.devices','IoT Resources',\r\ntype contains 'microsoft.datamigration', 'Data Migraiton Services',\r\ntype contains 'microsoft.cognitiveservices', 'Congitive Services',\r\ntype contains 'microsoft.customproviders', 'Custom Providers',\r\ntype contains 'microsoft.appconfiguration', 'App Services',\r\ntype contains 'microsoft.search', 'Search Services',\r\ntype contains 'microsoft.maps', 'Maps',\r\ntype contains 'microsoft.containerservice/managedclusters', 'AKS',\r\ntype contains 'microsoft.signalrservice', 'SignalR',\r\ntype contains 'microsoft.resourcegraph/queries', 'Resource Graph Queries',\r\ntype contains 'microsoft.batch', 'MS Batch',\r\ntype contains 'microsoft.analysisservices', 'Analysis Services',\r\ntype contains 'microsoft.synapse/workspaces', 'Synapse Workspaces',\r\ntype contains 'microsoft.synapse/workspaces/sqlpools', 'Synapse SQL Pools',\r\ntype contains 'microsoft.kusto/clusters', 'ADX Clusters',\r\ntype contains 'microsoft.resources/deploymentscripts', 'Deployment Scripts',\r\ntype contains 'microsoft.aad/domainservices', 'AD Domain Services',\r\ntype contains 'microsoft.labservices/labaccounts', 'Lab Accounts',\r\ntype contains 'microsoft.automanage/accounts', 'Automanage Accounts',\r\ntype contains 'microsoft.relay/namespaces', 'Azure Relay',\r\ntype contains 'microsoft.notificationhubs/namespaces', 'Notification Hubs',\r\ntype contains 'microsoft.digitaltwins/digitaltwinsinstances', 'Digital Twins',\r\nstrcat(\"Not Translated: \", type))\r\n| summarize count() by type\r\n| order by count_ desc",
+ "size": 3,
+ "title": "Resource number by type (Top 10)",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "rowLimit": 10
+ }
+ },
+ "name": "Resource number by type"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| summarize count() by location",
+ "size": 3,
+ "title": "Resource number by location",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "map",
+ "mapSettings": {
+ "locInfo": "AzureLoc",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "type": "heatmap",
+ "colorAggregation": "Sum",
+ "nodeColorField": "count_",
+ "heatmapPalette": "greenRed"
+ },
+ "labelSettings": "location",
+ "locInfoColumn": "location"
+ }
+ },
+ "name": "Resource number by location"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - Overview metrics"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Overview"
+ },
+ "name": "RC_Overview"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Things to know before creating a virtual machine\r\nThere's always a multitude of design considerations when you build out an application infrastructure in Azure. These aspects of a virtual machine are important to think about to manage virtual machine properly:\r\n- The names of your application resources\r\n- The location where the resources are stored\r\n- The size of the virtual machine\r\n- The maximum number of virtual machines that can be created\r\n- The operating system that the virtual machine runs\r\n- The configuration of the virtual machine after it starts\r\n- The related resources that the virtual machine needs\r\n"
+ },
+ "name": "text - 13"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources | where type =~ 'Microsoft.Compute/virtualMachines'\n| summarize count() by tostring(properties.storageProfile.osDisk.osType)",
+ "size": 3,
+ "title": "Virtual machine count per OS type",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "properties_storageProfile_osDisk_osType",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "Virtual machine count per OS type"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project SKU = tostring(properties.hardwareProfile.vmSize)\r\n| summarize count() by SKU\r\n| order by count_ desc",
+ "size": 1,
+ "title": "VM by VM type/size",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "barchart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "SKU",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "rowLimit": 10
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "SKU",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "VM by VM type/size"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type=~ 'microsoft.compute/virtualmachinescalesets'\r\n| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name\r\n| order by Capacity desc",
+ "size": 0,
+ "title": "Virtual machine scale set capacity and size",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "name": "query - virtual machine scale set capacity and size"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources | where type == \"microsoft.compute/virtualmachines\"\r\n| extend osDiskId= tostring(properties.storageProfile.osDisk.managedDisk.id)\r\n | join kind=leftouter(resources\r\n | where type =~ 'microsoft.compute/disks'\r\n | where properties !has 'Unattached'\r\n | where properties has 'osType'\r\n | project OS = tostring(properties.osType), osSku = tostring(sku.name), osDiskSizeGB = toint(properties.diskSizeGB), osDiskId=tostring(id)) on osDiskId\r\n | join kind=leftouter(Resources\r\n | where type =~ 'microsoft.compute/disks'\r\n | where properties !has \"osType\"\r\n | where properties !has 'Unattached'\r\n | project sku = tostring(sku.name), diskSizeGB = toint(properties.diskSizeGB), id = managedBy\r\n | summarize sum(diskSizeGB), count(sku) by id, sku) on id\r\n| project vmId=id, subscriptionId, resourceGroup, OS, location, osDiskId, osSku, osDiskSizeGB, DataDisksGB=sum_diskSizeGB, diskSkuCount=count_sku\r\n| sort by diskSkuCount desc",
+ "size": 0,
+ "title": "Compute disks",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "vmId",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "osDiskId",
+ "label": "OS Disk"
+ },
+ {
+ "columnId": "osSku",
+ "label": "OS Disk SKU"
+ },
+ {
+ "columnId": "osDiskSizeGB",
+ "label": "OS Disk Size"
+ }
+ ]
+ }
+ },
+ "name": "Compute disks"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| extend nics=array_length(properties.networkProfile.networkInterfaces)\r\n| mv-expand nic=properties.networkProfile.networkInterfaces\r\n| where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic)\r\n| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id)\r\n\t| join kind=leftouter (\r\n \t\tResources\r\n \t\t| where type =~ 'microsoft.network/networkinterfaces'\r\n \t\t| extend ipConfigsCount=array_length(properties.ipConfigurations)\r\n \t\t| mv-expand ipconfig=properties.ipConfigurations\r\n \t\t| where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true'\r\n \t\t| project nicId = id, privateIP= tostring(ipconfig.properties.privateIPAddress), publicIpId = tostring(ipconfig.properties.publicIPAddress.id), subscriptionId) on nicId\r\n| project-away nicId1\r\n| summarize by vmId, subscriptionId, vmSize, nicId, privateIP, publicIpId\r\n\t| join kind=leftouter (\r\n \t\tResources\r\n \t\t| where type =~ 'microsoft.network/publicipaddresses'\r\n \t\t| project publicIpId = id, publicIpAddress = tostring(properties.ipAddress)) on publicIpId\r\n| project-away publicIpId1\r\n| sort by publicIpAddress desc",
+ "size": 0,
+ "title": "Compute networking",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "vmId",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "vmSize",
+ "label": "VM size"
+ },
+ {
+ "columnId": "nicId",
+ "label": "Network interface"
+ },
+ {
+ "columnId": "privateIP",
+ "label": "Private IP"
+ },
+ {
+ "columnId": "publicIpId",
+ "label": "Public IP"
+ },
+ {
+ "columnId": "publicIpAddress",
+ "label": "Public IP address"
+ }
+ ]
+ }
+ },
+ "name": "Compute networking"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Managed disk utilization"
+ },
+ "name": "text - 16"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ec135d58-9c6b-4998-bd1e-75871c540d7f",
+ "version": "KqlParameterItem/1.0",
+ "name": "laworkspace",
+ "label": "Log Analytics workspace",
+ "type": 5,
+ "description": "LA workspaces configured in virtual machines insight settings",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces' | project id",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": []
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "Log Analytics workspace selector"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "InsightsMetrics\n| where Origin == \"vm.azm.ms\"\n| where Namespace == \"LogicalDisk\"\n| where Name == \"FreeSpacePercentage\"\n| extend t=parse_json(Tags)\n| summarize arg_max(TimeGenerated, *) by tostring(t[\"vm.azm.ms/mountId\"]), Computer // arg_max over TimeGenerated returns the latest record\n| project Computer, TimeGenerated, t[\"vm.azm.ms/mountId\"], Val\n",
+ "size": 4,
+ "title": "Managed disks free space",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{laworkspace}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Val",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": ">=",
+ "thresholdValue": "90",
+ "representation": "4",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": ">=",
+ "thresholdValue": "50",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false,
+ "maximumFractionDigits": 0
+ }
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Computer",
+ "label": "Computer"
+ },
+ {
+ "columnId": "TimeGenerated",
+ "label": "TimeGenerated"
+ },
+ {
+ "columnId": "t_vm.azm.ms/mountId",
+ "label": "Drive"
+ },
+ {
+ "columnId": "Val",
+ "label": "Free space percentage"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "laworkspace",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Managed disks free space"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Compute optimization"
+ },
+ "name": "text - 9"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type == \"microsoft.advisor/recommendations\"\r\n| where tostring (properties.category) has \"Cost\"\r\n| where properties.shortDescription.problem has \"underutilized\"\r\n| where properties.impactedField has \"Compute\" or properties.impactedField has \"Container\" or properties.impactedField has \"Web\"\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,subscriptionId,Recommendation=tostring(properties.shortDescription.problem)\r\n",
+ "size": 0,
+ "title": "Underused assets",
+ "noDataMessage": "No underused asset",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "customWidth": "100",
+ "name": "Underused assets"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "37cdc20d-07c3-466c-84bb-4d8050932641",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanDisks",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"!=\", \"label\":\"No\" },\r\n { \"value\":\"==\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "!="
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "Disks"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources \r\n| where type contains \"microsoft.compute/disks\" \r\n| extend diskState = tostring(properties.diskState)\r\n| where managedBy {OrphanDisks} \"\" or diskState {OrphanDisks} 'Unattached'\r\n| project id, subscriptionId, resourceGroup, diskState, location",
+ "size": 0,
+ "title": "Managed disks",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "diskState",
+ "label": "Disk state"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ }
+ ]
+ }
+ },
+ "name": "Managed disks"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "2d9b8893-0af4-480a-9ac7-639efb771ecb",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanNIC",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"has 'virtualmachine' or isnotnull(privateEndPoint)\", \"label\":\"No\" },\r\n { \"value\":\"!has 'virtualmachine' and isnull(privateEndPoint)\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "has 'virtualmachine' or isnotnull(privateEndPoint)"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "NICs - Copy"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type has \"microsoft.network/networkinterfaces\"\r\n| extend VM = properties.virtualMachine.id\r\n| extend privateEndPoint = properties['privateEndpoint']['id']\r\n| where properties {OrphanNIC}\r\n| where properties['linkedResourceType'] != \"Microsoft.Netapp/volumes\"\r\n| project id, subscriptionId, resourceGroup, location, VM, privateEndPoint, properties\r\n",
+ "size": 0,
+ "title": "NICs",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "properties",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "VM",
+ "label": "Virtual machine"
+ },
+ {
+ "columnId": "privateEndPoint",
+ "label": "Private end point"
+ },
+ {
+ "columnId": "properties",
+ "label": "Details"
+ }
+ ]
+ }
+ },
+ "name": "NICs"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "98d786aa-8835-493f-9fe4-fe5da150392b",
+ "version": "KqlParameterItem/1.0",
+ "name": "VMState",
+ "label": "Virtual machine state",
+ "type": 2,
+ "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend state = properties['extended']['instanceView']['powerState']['displayStatus']\r\n| summarize by tostring(state)",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - VMState"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Select a virtual machine state to display the list of resource.",
+ "style": "info"
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMState",
+ "comparison": "isEqualTo"
+ },
+ "name": "text - VMState"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources | where type == \"microsoft.compute/virtualmachines\"\r\n| extend vmState = tostring(properties.extended.instanceView.powerState.displayStatus)\r\n| extend vmState = iif(isempty(vmState), \"VM State Unknown\", (vmState))\r\n| summarize count() by vmState",
+ "size": 3,
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "vmState",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "vmState",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "query - VM state chart"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend vmSize = tostring(properties.hardwareProfile.vmSize)\r\n| extend vmState = properties['extended']['instanceView']['powerState']['displayStatus']\r\n| where vmState == '{VMState}'\r\n| project id, subscriptionId, resourceGroup, vmState, vmSize, location",
+ "size": 0,
+ "title": "Virtual machine list by powerstate",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": false
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "vmSize",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "19.1429ch"
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17,
+ "formatOptions": {
+ "customColumnWidthSetting": "108px"
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "vmState",
+ "label": "VM State"
+ },
+ {
+ "columnId": "vmSize",
+ "label": "VM Size"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMState",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - VM list by powerstate"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "States and billing status of Azure virtual machines : https://learn.microsoft.com/azure/virtual-machines/states-billing",
+ "style": "info"
+ },
+ "name": "Info VM states"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - VMQueries"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_VM"
+ },
+ "name": "RC_VM"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Storage account + backup"
+ },
+ "name": "text - 9"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.storagesync/storagesyncservices'\r\n\tor type =~ 'microsoft.recoveryservices/vaults'\r\n\tor type =~ 'microsoft.storage/storageaccounts'\r\n\tor type =~ 'microsoft.keyvault/vaults'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\r\n\ttype =~ 'microsoft.recoveryservices/vaults', 'Azure Backup',\r\n\ttype =~ 'microsoft.storage/storageaccounts', 'Storage Accounts',\r\n\ttype =~ 'microsoft.keyvault/vaults', 'Key Vaults',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| summarize count() by type",
+ "size": 3,
+ "title": "Count of all resource types",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - Storage - Resource Overview "
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.storagesync/storagesyncservices'\r\n\tor type =~ 'microsoft.recoveryservices/vaults'\r\n\tor type =~ 'microsoft.storage/storageaccounts'\r\n\tor type =~ 'microsoft.keyvault/vaults'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',\r\n\ttype =~ 'microsoft.recoveryservices/vaults', 'Azure Backup',\r\n\ttype =~ 'microsoft.storage/storageaccounts', 'Storage Accounts',\r\n\ttype =~ 'microsoft.keyvault/vaults', 'Key Vaults',\r\n\tstrcat(\"Not Translated: \", type))\r\n| extend Sku = case(\r\n\ttype !has 'Key Vaults', sku.name,\r\n\ttype =~ 'Key Vaults', properties.sku.name,\r\n\t' ')\r\n| extend Details = pack_all()\r\n| project Resource=id, type, kind, subscriptionId, resourceGroup, Sku, Details",
+ "size": 0,
+ "title": "Resource details",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View Details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ }
+ },
+ "name": "query - Storage - Resource Detailed"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "e94aafa3-c5d9-4523-89f0-4e87aa754511",
+ "version": "KqlParameterItem/1.0",
+ "name": "Resources",
+ "label": "Storage accounts",
+ "type": 5,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.storage/storageaccounts'\n| order by name asc\n| extend Rank = row_number()\n| project value = id, label = id, selected = Rank <= 5",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "resourceTypeFilter": {
+ "microsoft.storage/storageaccounts": true
+ },
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "c4b69c01-2263-4ada-8d9c-43433b739ff3",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "type": 4,
+ "isRequired": true,
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 300000,
+ "createdTime": "2018-08-06T23:52:38.87Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 900000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 1800000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 3600000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 14400000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 43200000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 86400000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 172800000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 259200000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ },
+ {
+ "durationMs": 604800000,
+ "createdTime": "2018-08-06T23:52:38.871Z",
+ "isInitialTime": false,
+ "grain": 1,
+ "useDashboardTimeRange": false
+ }
+ ],
+ "allowCustom": true
+ },
+ "value": {
+ "durationMs": 172800000
+ },
+ "label": "Time range"
+ },
+ {
+ "id": "9b48988f-dcd2-48cc-b233-5999ed32149f",
+ "version": "KqlParameterItem/1.0",
+ "name": "Message",
+ "type": 1,
+ "query": "where type == 'microsoft.storage/storageaccounts' \n| summarize Selected = countif(id in ({Resources:value})), Total = count()\n| extend Selected = iff(Selected > 200, 200, Selected)\n| project Message = strcat('# ', Selected, ' / ', Total)",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "070b2474-4e01-478d-a7fa-6c20ad8ea1ad",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceName",
+ "type": 1,
+ "isRequired": true,
+ "isHiddenWhenLocked": true,
+ "criteriaData": [
+ {
+ "condition": "else result = 'Storage account'",
+ "criteriaContext": {
+ "operator": "Default",
+ "rightValType": "param",
+ "resultValType": "static",
+ "resultVal": "Storage account"
+ }
+ }
+ ]
+ },
+ {
+ "id": "c6c32b32-6eb4-44d5-9cad-156d5d50ec3e",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceImageUrl",
+ "type": 1,
+ "description": "used as a parameter for No Subcriptions workbook template",
+ "isHiddenWhenLocked": true
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 1",
+ "styleSettings": {
+ "margin": "15px 0 0 0"
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Storage accounts details"
+ },
+ "name": "text - 8"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "27d282bb-38ae-4ceb-b2bb-063db08ec6bc",
+ "cellValue": "selectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Overview",
+ "subTarget": "Overview"
+ },
+ {
+ "id": "9a52f588-fff8-47fe-b56d-81b8068ff6f7",
+ "cellValue": "selectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Capacity",
+ "subTarget": "Capacity"
+ }
+ ]
+ },
+ "name": "Navigation links",
+ "styleSettings": {
+ "margin": "10px 0 0 0"
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Overview section"
+ },
+ "conditionalVisibility": {
+ "parameterName": "1",
+ "comparison": "isEqualTo",
+ "value": "2"
+ },
+ "name": "text - 4"
+ },
+ {
+ "type": 10,
+ "content": {
+ "chartId": "workbookdb19a8d8-91af-44ea-951d-5ffa133b2ebe",
+ "version": "MetricsItem/2.0",
+ "size": 2,
+ "chartType": 0,
+ "resourceType": "microsoft.storage/storageaccounts",
+ "metricScope": 0,
+ "resourceParameter": "Resources",
+ "resourceIds": [
+ "{Resources}"
+ ],
+ "timeContextFromParameter": "TimeRange",
+ "timeContext": {
+ "durationMs": 172800000
+ },
+ "metrics": [
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-Transactions",
+ "aggregation": 1
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Transaction-Transactions",
+ "aggregation": 1,
+ "splitBy": [
+ "ResponseType"
+ ],
+ "splitBySortOrder": -1,
+ "splitByLimit": 4,
+ "columnName": "Errors"
+ }
+ ],
+ "resourceLimit": 200,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Name",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-Transactions$|Transactions$",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "showIcon": true,
+ "aggregation": "Sum"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 1
+ }
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-Transactions Timeline$|Transactions Timeline$",
+ "formatter": 21,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency$|microsoft.storage/storageaccounts-Transaction-SuccessServerLatency$|E2E Latency$|Server Latency$",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "linkTarget": "WorkbookTemplate",
+ "showIcon": true,
+ "workbookContext": {
+ "componentIdSource": "column",
+ "componentId": "Name",
+ "resourceIdsSource": "column",
+ "resourceIds": "Name",
+ "templateIdSource": "static",
+ "templateId": "Community-Workbooks/Individual Storage/Performance",
+ "typeSource": "static",
+ "type": "workbook",
+ "gallerySource": "static",
+ "gallery": "microsoft.storage/storageaccounts"
+ }
+ },
+ "numberFormat": {
+ "unit": 23,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency Timeline$|E2E Latency Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency Timeline",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Success/Errors",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "success/Errors",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": ".*\\/Errors",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "gray",
+ "linkTarget": "WorkbookTemplate",
+ "showIcon": true,
+ "workbookContext": {
+ "componentIdSource": "column",
+ "componentId": "Name",
+ "resourceIdsSource": "column",
+ "resourceIds": "Name",
+ "templateIdSource": "static",
+ "templateId": "Community-Workbooks/Individual Storage/Failures",
+ "typeSource": "static",
+ "type": "workbook",
+ "gallerySource": "static",
+ "gallery": "microsoft.storage/storageaccounts"
+ }
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 1
+ }
+ }
+ },
+ {
+ "columnMatch": "Server Latency Timeline",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Subscription"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Name"
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_heatmap_microsoft.storage/storageaccounts-Transaction-Transactions$|Transactions$_3",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Subscription",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-Transactions",
+ "label": "Transactions"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-Transactions Timeline",
+ "label": "Transactions timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency",
+ "label": "E2E latency"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessE2ELatency Timeline",
+ "label": "E2E latency timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency",
+ "label": "Server latency"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Transaction-SuccessServerLatency Timeline",
+ "label": "Server latency timeline"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_heatmap_microsoft.storage/storageaccounts-Transaction-Transactions$|Transactions$_3",
+ "sortOrder": 2
+ }
+ ],
+ "showExportToExcel": true
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "Overview"
+ },
+ "showPin": true,
+ "name": "storage account metrics",
+ "styleSettings": {
+ "margin": "0 10px 0 10px"
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Capacity section"
+ },
+ "conditionalVisibility": {
+ "parameterName": "1",
+ "comparison": "isEqualTo",
+ "value": "2"
+ },
+ "name": "text - 6"
+ },
+ {
+ "type": 10,
+ "content": {
+ "chartId": "workbookdb19a8d8-91af-44ea-951d-5ffa133b2ebe",
+ "version": "MetricsItem/2.0",
+ "size": 3,
+ "chartType": 0,
+ "resourceType": "microsoft.storage/storageaccounts",
+ "metricScope": 0,
+ "resourceParameter": "Resources",
+ "resourceIds": [
+ "{Resources}"
+ ],
+ "timeContextFromParameter": "TimeRange",
+ "timeContext": {
+ "durationMs": 172800000
+ },
+ "metrics": [
+ {
+ "namespace": "microsoft.storage/storageaccounts",
+ "metric": "microsoft.storage/storageaccounts-Capacity-UsedCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/blobservices",
+ "metric": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/fileservices",
+ "metric": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/queueservices",
+ "metric": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity",
+ "aggregation": 4
+ },
+ {
+ "namespace": "microsoft.storage/storageaccounts/tableservices",
+ "metric": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity",
+ "aggregation": 4
+ }
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Name",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Capacity-UsedCapacity$|microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity$|microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity$|microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity$|microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity$",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "linkTarget": "WorkbookTemplate",
+ "showIcon": true,
+ "workbookContext": {
+ "componentIdSource": "column",
+ "componentId": "Name",
+ "resourceIdsSource": "column",
+ "resourceIds": "Name",
+ "templateIdSource": "static",
+ "templateId": "Community-Workbooks/Individual Storage/Capacity",
+ "typeSource": "static",
+ "type": "workbook",
+ "gallerySource": "static",
+ "gallery": "microsoft.storage/storageaccounts"
+ }
+ },
+ "numberFormat": {
+ "unit": 2,
+ "options": {
+ "style": "decimal",
+ "maximumFractionDigits": 1
+ }
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts-Capacity-UsedCapacity Timeline$|Account used capacity Timeline$",
+ "formatter": 21,
+ "formatOptions": {
+ "min": 0,
+ "palette": "blue",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity Timeline$|Blob capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity Timeline$|File capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity Timeline$|Queue capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity Timeline$|Table capacity Timeline$",
+ "formatter": 5,
+ "formatOptions": {
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Subscription"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Name"
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_$gen_group_0",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Subscription",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Capacity-UsedCapacity",
+ "label": "Account used capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts-Capacity-UsedCapacity Timeline",
+ "label": "Account used capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity",
+ "label": "Blob capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/blobservices-Capacity-BlobCapacity Timeline",
+ "label": "Blob capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity",
+ "label": "File capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/fileservices-Capacity-FileCapacity Timeline",
+ "label": "File capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity",
+ "label": "Queue capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/queueservices-Capacity-QueueCapacity Timeline",
+ "label": "Queue capacity timeline"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity",
+ "label": "Table capacity"
+ },
+ {
+ "columnId": "microsoft.storage/storageaccounts/tableservices-Capacity-TableCapacity Timeline",
+ "label": "Table capacity timeline"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_$gen_group_0",
+ "sortOrder": 1
+ }
+ ],
+ "showExportToExcel": true
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "Capacity"
+ },
+ "showPin": true,
+ "name": "storage account capacity metrics",
+ "styleSettings": {
+ "margin": "0 10px 0 10px"
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ "name": "Storage account + backup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Azure Backup now provides a set of customizable reporting templates to help you generate audit evidence reports for backup in an easier way. [Learn more](https://aka.ms/BCDRAuditReportTemplates).",
+ "style": "upsell"
+ },
+ "name": "AuditText"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Backup details\r\n### Manage and securely backup your resources\r\nExplore and monitor backup estate at scale in real time across vaults."
+ },
+ "name": "text - 8"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "2373a24f-ad32-4909-a7f6-59b373dcde6c",
+ "version": "KqlParameterItem/1.0",
+ "name": "Workspaces",
+ "label": "Workspace",
+ "type": 5,
+ "description": "LA workspaces configured in vault diagnostic settings",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces' | project id",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": []
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "100",
+ "name": "Filters1"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "parameters": [
+ {
+ "id": "2965ad33-1401-47c9-8f4b-9b7126f87014",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "label": "Time Range",
+ "type": 4,
+ "description": "Period of time for which reports should be viewed",
+ "isRequired": true,
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 259200000
+ },
+ {
+ "durationMs": 604800000
+ },
+ {
+ "durationMs": 1209600000
+ },
+ {
+ "durationMs": 2419200000
+ },
+ {
+ "durationMs": 2592000000
+ },
+ {
+ "durationMs": 5184000000
+ },
+ {
+ "durationMs": 7776000000
+ }
+ ],
+ "allowCustom": true
+ },
+ "value": {
+ "durationMs": 604800000
+ }
+ },
+ {
+ "id": "efede5fa-f577-4766-b9b6-6ba4e525f844",
+ "version": "KqlParameterItem/1.0",
+ "name": "DataSourceSubscription",
+ "label": "Datasource Subscription",
+ "type": 6,
+ "description": "Use to filter for datasources within a specific subscription",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "query": "let RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet VaultSubscriptionList = \"*\";\r\nlet VaultLocationList = \"*\";\r\nlet VaultList = \"*\";\r\nlet VaultTypeList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet DisplayAllFields = false;\r\n_AzureBackup_GetBackupInstances(RangeStart, RangeEnd, VaultSubscriptionList, VaultLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, ProtectionInfoList, DatasourceSetName, BackupInstanceName, DisplayAllFields)\r\n| distinct tostring(split(tostring(todynamic(DatasourceResourceId)),\"/\")[2])",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "value": []
+ },
+ {
+ "id": "256c7e33-df90-4956-aaf3-699aeaad912f",
+ "version": "KqlParameterItem/1.0",
+ "name": "DataSourceLocation",
+ "label": "Data source location",
+ "type": 2,
+ "description": "Use to filter for data sources within a specific location",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "query": "let RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet VaultSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet VaultLocationList = \"*\";\r\nlet VaultList = \"*\";\r\nlet VaultTypeList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet DisplayAllFields = false;\r\n_AzureBackup_GetBackupInstances(RangeStart, RangeEnd, VaultSubscriptionList, VaultLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, ProtectionInfoList, DatasourceSetName, BackupInstanceName, DisplayAllFields)\r\n| distinct VaultLocation",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "16ad110f-4ea3-44d6-826b-4ea3bbd68c93",
+ "version": "KqlParameterItem/1.0",
+ "name": "JobOperation",
+ "label": "Job Operation",
+ "type": 2,
+ "description": "Use to filter for a particular operation type",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "jsonData": "\r\n[ \r\n{ \"value\": \"Backup\", \t\t\t\t\t\t\"label\": \"Backup\" },\r\n{ \"value\": \"Restore\", \t\t\t\t\t\t\"label\": \"Restore\" }\r\n]",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "6a6222bf-a28a-4c98-9d74-838e74497167",
+ "version": "KqlParameterItem/1.0",
+ "name": "JobStatus",
+ "label": "Job Status",
+ "type": 2,
+ "description": "Use to filter for a particular job status",
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "selectAllValue": "*",
+ "showDefault": false
+ },
+ "jsonData": "\r\n[ \r\n{ \"value\": \"Completed\", \t\t\t\t\t\t\"label\": \"Completed\" },\r\n{ \"value\": \"Failed\", \t\t\t\"label\": \"Failed\" },\r\n\r\n{ \"value\": \"CompletedWithWarnings\", \t\t\t\t\t\t\"label\": \"CompletedWithWarnings\" },\r\n{ \"value\": \"Cancelled\", \"label\": \"Cancelled\" }\r\n]",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "849a6401-cbaf-44b9-a733-0819f8923791",
+ "version": "KqlParameterItem/1.0",
+ "name": "SearchItem",
+ "label": "Search Item",
+ "type": 1,
+ "description": "Use to search for an item by name"
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Filters2"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Backup job history"
+ },
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Heading2"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains iff(isnotempty('{SearchItem}'),'{SearchItem}',BackupInstanceFriendlyName)\r\n| sort by BackupInstanceId\r\n| summarize count() by Status",
+ "size": 3,
+ "title": "Jobs by Status",
+ "noDataMessage": "No record found for the selected time and scope.",
+ "showRefreshButton": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "UniqueId",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "DurationInSecs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "0",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Chart1",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "parameters": [
+ {
+ "id": "7a64467f-eec7-495b-9099-233fb7bceb08",
+ "version": "KqlParameterItem/1.0",
+ "name": "RowsPerPage",
+ "label": "Rows per page",
+ "type": 2,
+ "description": "Number of rows to display in a single page",
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":10, \"label\":\"10\", \"selected\":true },\r\n { \"value\":25, \"label\":\"25\" },\r\n { \"value\":50, \"label\":\"50\" },\r\n { \"value\":100, \"label\":\"100\" },\r\n { \"value\":250, \"label\":\"250\" },\r\n { \"value\":500, \"label\":\"500\" },\r\n { \"value\":1000, \"label\":\"1000\" }\r\n]"
+ },
+ {
+ "id": "5c65bc61-a721-42b7-960b-3fe7a6170eb6",
+ "version": "KqlParameterItem/1.0",
+ "name": "Page",
+ "type": 2,
+ "description": "Page number",
+ "isRequired": true,
+ "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\nlet backupItem = '{SearchItem}';\r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains backupItem\r\n| summarize c=count()\r\n| project num = (c-1)/toint('{RowsPerPage}') + 1\r\n| project nums = range(1,num,1), num\r\n| mvexpand nums\r\n| project nums = tostring(nums), num = strcat(tostring(nums),\" of \",tostring(num))\r\n\r\n",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "value": "1"
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Filters3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\nlet backupItem = '{SearchItem}';\r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains iff(isnotempty('{SearchItem}'),'{SearchItem}',BackupInstanceFriendlyName)\r\n| sort by BackupInstanceId\r\n| extend row_num = row_number()\r\n| extend page_num = tostring(((row_num-1)/toint('{RowsPerPage}') + 1))\r\n| where page_num has ('{Page}')\r\n| project BackupItem = BackupInstanceId,BackupItemFriendlyName = BackupInstanceFriendlyName ,Vault = VaultResourceId,Subscription = VaultSubscriptionId, VaultLocation = VaultLocation,JobOperation = OperationCategory,JobStartTime = StartTime,JobDuration = tostring(todouble(DurationInSecs)/60/60),JobStatus = Status,FailureCode = ErrorTitle\r\n",
+ "size": 3,
+ "title": "List of jobs in period",
+ "noDataMessage": "No record found for the selected time and scope.",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspaces}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "BackupItem",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "BackupItemFriendlyName",
+ "formatter": 16,
+ "formatOptions": {
+ "linkColumn": "BackupItem",
+ "linkTarget": "Resource",
+ "showIcon": true,
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "Vault",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true,
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "VaultLocation",
+ "formatter": 17,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "JobOperation",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "JobStartTime",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "JobDuration",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ },
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "minimumFractionDigits": 2,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ {
+ "columnMatch": "JobStatus",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "contains",
+ "thresholdValue": "Warning",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Failed",
+ "representation": "failed",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "FailureCode",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "labelSettings": [
+ {
+ "columnId": "BackupItemFriendlyName",
+ "label": "Backup instance"
+ },
+ {
+ "columnId": "Vault",
+ "label": "Vault"
+ },
+ {
+ "columnId": "Subscription",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "VaultLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "JobOperation",
+ "label": "Job operation"
+ },
+ {
+ "columnId": "JobStartTime",
+ "label": "Job start time (UTC)"
+ },
+ {
+ "columnId": "JobDuration",
+ "label": "Job duration (hours)"
+ },
+ {
+ "columnId": "JobStatus",
+ "label": "Job status"
+ },
+ {
+ "columnId": "FailureCode",
+ "label": "Job failure code"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Workspaces",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Grid1",
+ "styleSettings": {
+ "margin": "5px",
+ "padding": "5px",
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Backup"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Storage"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Storage"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "where type has \"microsoft.network\"\r\n| extend type = case(\r\n\ttype == 'microsoft.network/networkinterfaces', \"NICs\",\r\n\ttype == 'microsoft.network/networksecuritygroups', \"NSGs\", \r\n\ttype == \"microsoft.network/publicipaddresses\", \"Public IPs\", \r\n\ttype == 'microsoft.network/virtualnetworks', \"vNets\",\r\n\ttype == 'microsoft.network/networkwatchers/connectionmonitors', \"Connection Monitors\",\r\n\ttype == 'microsoft.network/privatednszones', \"Private DNS\",\r\n\ttype == 'microsoft.network/virtualnetworkgateways', @\"vNet Gateways\",\r\n\ttype == 'microsoft.network/connections', \"Connections\",\r\n\ttype == 'microsoft.network/networkwatchers', \"Network Watchers\",\r\n\ttype == 'microsoft.network/privateendpoints', \"Private Endpoints\",\r\n\ttype == 'microsoft.network/localnetworkgateways', \"Local Network Gateways\",\r\n\ttype == 'microsoft.network/privatednszones/virtualnetworklinks', \"vNet Links\",\r\n\ttype == 'microsoft.network/dnszones', 'DNS Zones',\r\n\ttype == 'microsoft.network/networkwatchers/flowlogs', 'Flow Logs',\r\n\ttype == 'microsoft.network/routetables', 'Route Tables',\r\n\ttype == 'microsoft.network/loadbalancers', 'Load Balancers',\r\n type =~ 'Microsoft.Network/applicationGateways', 'Application Gateways',\r\n\tstrcat(\"Not Translated: \", type))\r\n| summarize count() by type\r\n| where type !has \"Not Translated\"",
+ "size": 3,
+ "title": "Count of all network resources by resource type",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Network resource"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Network security group"
+ },
+ "name": "Network security group title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "7763ba7f-6187-4448-a94c-890392ed31d0",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanNSG",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"and isnotnull(properties.networkInterfaces) or type =~ 'microsoft.network/networksecuritygroups' and isnotnull(properties.subnets)\", \"label\":\"No\" },\r\n { \"value\":\"and isnull(properties.networkInterfaces) and isnull(properties.subnets)\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "and isnotnull(properties.networkInterfaces) or type =~ 'microsoft.network/networksecuritygroups' and isnotnull(properties.subnets)"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "NSG"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'microsoft.network/networksecuritygroups' {OrphanNSG}\r\n| project Resource=id, resourceGroup, subscriptionId, location",
+ "size": 0,
+ "title": "NSGs",
+ "noDataMessage": "No NSGs Found",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "Resource",
+ "parameterName": "SelectedResourceId",
+ "parameterType": 5
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "filter": true
+ },
+ "sortBy": []
+ },
+ "name": "NSGs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n | where type =~ 'microsoft.network/networksecuritygroups'\r\n | where id == \"{SelectedResourceId}\"\r\n | project id, nsgRules = parse_json(parse_json(properties).securityRules), networksecurityGroupName = name, subscriptionId, resourceGroup , location\r\n | mvexpand nsgRule = nsgRules\r\n | project id, location, access=nsgRule.properties.access,protocol=nsgRule.properties.protocol ,direction=nsgRule.properties.direction,provisioningState= nsgRule.properties.provisioningState ,priority=nsgRule.properties.priority, \r\n sourceAddressPrefix = nsgRule.properties.sourceAddressPrefix, \r\n sourceAddressPrefixes = nsgRule.properties.sourceAddressPrefixes,\r\n destinationAddressPrefix = nsgRule.properties.destinationAddressPrefix, \r\n destinationAddressPrefixes = nsgRule.properties.destinationAddressPrefixes, \r\n networksecurityGroupName, networksecurityRuleName = tostring(nsgRule.name), \r\n subscriptionId, resourceGroup,\r\n destinationPortRanges = nsgRule.properties.destinationPortRanges,\r\n destinationPortRange = nsgRule.properties.destinationPortRange,\r\n sourcePortRanges = nsgRule.properties.sourcePortRanges,\r\n sourcePortRange = nsgRule.properties.sourcePortRange\r\n| extend Details = pack_all()\r\n| project id, location, access, direction, priority, sourceAddressPrefix, sourcePortRange, destinationPortRange, subscriptionId, resourceGroup, Details",
+ "size": 1,
+ "title": "NSG rules",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedResourceId",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "NSG rules"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Public IPs"
+ },
+ "name": "Public IP title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "37cdc20d-07c3-466c-84bb-4d8050932641",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanIPs",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"isnotnull\", \"label\":\"No\" },\r\n { \"value\":\"isnull\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "isnotnull"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "Public IPs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'Microsoft.Network/publicIPAddresses' and {OrphanIPs}(properties.ipAddress)\r\n| extend ipAddress = properties.ipAddress\r\n| extend sku = sku.name\r\n| extend Details = pack_all()\r\n| project Resource=id, subscriptionId, resourceGroup, name, location,sku,Details",
+ "size": 0,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ }
+ },
+ "name": "query - Networking Details - PiPs"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Application gateway"
+ },
+ "name": "Application gateway title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "007b8dbe-6bc6-40f9-b4bc-55f2ec14916c",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanAppGW",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"//\", \"label\":\"No\" },\r\n { \"value\":\"|\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "//"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "ApplicationGateway"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'Microsoft.Network/applicationGateways'\r\n| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier= tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools\r\n| project id, name, SKUName, SKUTier, SKUCapacity\r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Network/applicationGateways'\r\n | mvexpand backendPools = properties.backendAddressPools\r\n | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)\r\n | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses)\r\n | extend backendPoolName = backendPools.properties.backendAddressPools.name\r\n | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id\r\n) on id\r\n| project-away id1\r\n{OrphanAppGW} where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))\r\n| order by id asc",
+ "size": 0,
+ "noDataMessage": "No app gateways",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "name": "query - Application Gateways"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Load balancer"
+ },
+ "name": "Load balancer title"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "8cffc283-1878-4035-a669-5d9697e9edc1",
+ "version": "KqlParameterItem/1.0",
+ "name": "OrphanLB",
+ "label": "Orphaned",
+ "type": 10,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\":\"!=\", \"label\":\"No\" },\r\n { \"value\":\"==\", \"label\":\"Yes\" }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "!="
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "LoadBalancers"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/loadbalancers\"\r\n| where properties.backendAddressPools {OrphanLB} \"[]\"\r\n| extend Details = pack_all()\r\n| project Resource=id, subscriptionId, resourceGroup, location, tostring(sku.name), Details",
+ "size": 0,
+ "noDataMessage": "No load balancers",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Resource",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "sku_name",
+ "label": "SKU"
+ }
+ ]
+ }
+ },
+ "name": "query - Load Balancers"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Network"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Network"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Stay informed and act quickly on service issues\r\nAzure Service Health notifies you about Azure service incidents and planned maintenance so you can take action to mitigate downtime. Configure customisable cloud alerts and use your personalised dashboard to analyse health issues, monitor the impact to your cloud resources, get guidance and support, and share details and updates."
+ },
+ "name": "text - 4"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "servicehealthresources\r\n| where type =~ 'Microsoft.ResourceHealth/events'\r\n| extend eventType = properties.EventType, status = properties.Status, description = properties.Title, trackingId = properties.TrackingId, summary = properties.Summary, priority = properties.Priority, impactStartTime = properties.ImpactStartTime, impactMitigationTime = properties.ImpactMitigationTime\r\n| where properties.Status == 'Active' and tolong(impactStartTime) > 1\r\n\r\n| extend Details = pack_all()\r\n| project ServiceHealthID=id, Description=description, Region=location, eventType, Status=status, Details",
+ "size": 1,
+ "title": "All active Service Health events",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ServiceHealthID",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": false,
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "Description",
+ "formatter": 1,
+ "formatOptions": {
+ "customColumnWidthSetting": "60ch"
+ }
+ },
+ {
+ "columnMatch": "eventType",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "name": "query - 15"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Activity log monitoring"
+ },
+ "name": "text - 15"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),\r\nchangeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId, \r\nchangedProperties = properties.changes, changeCount = properties.changeAttributes.changesCount\r\n| where changeTime > ago(1d)\r\n| order by changeTime desc\r\n| project changeTime, targetResourceId, changeType, correlationId, changeCount, changedProperties",
+ "size": 0,
+ "title": "All changes in the past one day",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "changeTime",
+ "formatter": 6,
+ "formatOptions": {
+ "customColumnWidthSetting": "24ch"
+ }
+ },
+ {
+ "columnMatch": "targetResourceId",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "42.7143ch"
+ }
+ },
+ {
+ "columnMatch": "changedProperties",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ]
+ }
+ },
+ "name": "query - 12"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),\r\nchangeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId\r\n| where changeType == \"Delete\"\r\n| order by changeTime desc\r\n| project changeTime, resourceGroup, targetResourceId, changeType, correlationId",
+ "size": 0,
+ "title": "Resources deleted",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "changeTime",
+ "formatter": 6
+ }
+ ]
+ }
+ },
+ "name": "query - 13"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Monitoring"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Monitoring"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Use tags to organize your Azure resources and management hierarchy\r\nTags are metadata elements that you apply to your Azure resources. They're key-value pairs that help you identify resources based on settings that are relevant to your organization. If you want to track the deployment environment for your resources, add a key named Environment. To identify the resources deployed to production, give them a value of Production. The fully formed key-value pair is Environment = Production.\r\n\r\nTo get more information about tags, see [Resource naming and tagging decision guide](https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming-and-tagging-decision-guide?toc=%2Fazure%2Fazure-resource-manager%2Fmanagement%2Ftoc.json)"
+ },
+ "name": "text - 9"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Tag names with spaces, hyphens, and underscores are not supported.",
+ "style": "info"
+ },
+ "name": "warning tag explorer"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "bae67738-90ef-4698-9020-5e1f91d67f82",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "label": "Tag name",
+ "type": 2,
+ "isRequired": true,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ }
+ ],
+ "style": "formVertical",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "33",
+ "name": "parameters - 0"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "cb0ae78d-a49b-457b-baed-d83c97a2c934",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "label": "Tag value",
+ "type": 2,
+ "query": "Resources\r\n| extend TagValue = tostring(tags.{TagName})\r\n| project TagValue\r\n| distinct TagValue",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "formVertical",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "33",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "parameters - 2"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "81756016-e942-4fa0-976e-06d8ce919f83",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceType",
+ "label": "Resource type",
+ "type": 7,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": true,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ }
+ ],
+ "style": "formVertical",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "customWidth": "33",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "ResourceType"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n//| where tags[0] =~ '{TagName}' and tags[1] =~ '{TagValue}'\r\n| where tags[0] == '{TagName}' and tags[1] == '{TagValue}'\r\n| where type contains '{ResourceType}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Resource with tag",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Resource with tag"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n| where tags[0] == '{TagName}' and tags[1] == ''\r\n| where type contains '{ResourceType}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Tag with empty value",
+ "noDataMessage": "No tagged resources with empty value found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource name"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Empty value"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where tags =~ '' or tags =~ '{}'\r\n| where type contains '{ResourceType}'\r\n| project Name=id",
+ "size": 0,
+ "title": "Untagged resources",
+ "noDataMessage": "No untagged resources found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 100,
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "Name",
+ "label": "Resource name"
+ }
+ ]
+ }
+ },
+ "name": "query - Untagged resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcecontainers\r\n| where type == \"microsoft.resources/subscriptions\"\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n| where tags[0] == '{TagName}' and tags[1] == '{TagValue}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Subscription list",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "tag",
+ "formatter": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Subscription list"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcecontainers\r\n| where type == \"microsoft.resources/subscriptions/resourcegroups\"\r\n| extend tag = tags.{TagName}\r\n| mv-expand bagexpansion=array tags\r\n| where isnotempty(tags)\r\n| where tags[0] == '{TagName}' and tags[1] == '{TagValue}'\r\n| project id, tag",
+ "size": 0,
+ "title": "Resource groups list",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "tag",
+ "formatter": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "tag",
+ "label": "Tag value"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "TagName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - ResourceGroup list"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - TagQueries"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Tag"
+ },
+ "name": "RC_Tags"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/securescores\"\r\n| extend subscriptionSecureScore = round(100 * bin((todouble(properties.score.current))/ todouble(properties.score.max), 0.001))\r\n| where subscriptionSecureScore > 0\r\n| project subscriptionId, subscriptionSecureScore\r\n| order by subscriptionSecureScore asc",
+ "size": 0,
+ "title": "Security Scores by Subscription",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true,
+ "customColumnWidthSetting": "65ch"
+ }
+ },
+ {
+ "columnMatch": "subscriptionSecureScore",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "max": 100,
+ "palette": "redGreen",
+ "customColumnWidthSetting": "55ch"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false
+ }
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "subscriptionSecureScore",
+ "label": "Subscription Secure Score"
+ }
+ ]
+ }
+ },
+ "name": "query - Monitor & Security - Security Scores"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "SecurityResources \r\n| where type == 'microsoft.security/securescores/securescorecontrols' \r\n| extend SecureControl = properties.displayName, unhealthy = properties.unhealthyResourceCount, currentscore = properties.score.current, maxscore = properties.score.max, subscriptionId, details = properties\r\n| project SecureControl , unhealthy, currentscore, maxscore, subscriptionId, details",
+ "size": 0,
+ "title": "Security Scores by Control",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "65ch"
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "65ch"
+ }
+ },
+ {
+ "columnMatch": "SecureControl",
+ "formatter": 5,
+ "tooltipFormat": {}
+ },
+ {
+ "columnMatch": "unhealthy",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "palette": "greenRed",
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "currentscore",
+ "formatter": 8,
+ "formatOptions": {
+ "palette": "redGreen",
+ "customColumnWidthSetting": "20ch"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "maxscore",
+ "formatter": 8,
+ "formatOptions": {
+ "palette": "blue",
+ "customColumnWidthSetting": "20ch"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "Details",
+ "linkIsContextBlade": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionSecureScore",
+ "formatter": 8,
+ "formatOptions": {
+ "min": 0,
+ "max": 100,
+ "palette": "redGreen",
+ "customColumnWidthSetting": "20"
+ },
+ "numberFormat": {
+ "unit": 1,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false
+ }
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "SecureControl"
+ },
+ "labelSettings": [
+ {
+ "columnId": "unhealthy",
+ "label": "Unhealthy"
+ },
+ {
+ "columnId": "currentscore",
+ "label": "Current Score"
+ },
+ {
+ "columnId": "maxscore",
+ "label": "Max Score"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Monitor & Security - Security Scores by Control"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "4f93ebba-a9d5-4e11-8de4-b605c2b4368f",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceIdFilter",
+ "type": 1,
+ "isGlobal": true,
+ "isHiddenWhenLocked": true,
+ "label": "Resource ID"
+ },
+ {
+ "id": "e505498f-d2eb-4dd6-928f-0f0f0e9cc371",
+ "version": "KqlParameterItem/1.0",
+ "name": "AlertDisplayNameFilter",
+ "type": 1,
+ "isGlobal": true,
+ "isHiddenWhenLocked": true,
+ "label": "Alert display name"
+ },
+ {
+ "id": "39e382f9-4780-40fa-8595-15eda0f08ad4",
+ "version": "KqlParameterItem/1.0",
+ "name": "NewAlertFilter",
+ "type": 1,
+ "isGlobal": true,
+ "isHiddenWhenLocked": true,
+ "label": "New alert"
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 15"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | where properties.Status in ('Active')\r\n | where properties.Severity in ('Low', 'Medium', 'High')\r\n | extend SeverityRank = case(\r\n properties.Severity == 'High', 3,\r\n properties.Severity == 'Medium', 2,\r\n properties.Severity == 'Low', 1,\r\n 0\r\n )\r\n | project-away SeverityRank\r\n | extend Severity = properties.Severity\r\n | project Severity = tostring(Severity)\r\n | summarize Count = count() by Severity",
+ "size": 0,
+ "title": "Severity ",
+ "exportedParameters": [
+ {
+ "fieldName": "Subscription",
+ "parameterName": "Subscription",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Severity",
+ "parameterName": "SeverityFilter",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Severity",
+ "formatter": 1
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Count"
+ ],
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Medium",
+ "color": "orange"
+ },
+ {
+ "seriesName": "High",
+ "color": "redDark"
+ },
+ {
+ "seriesName": "Low",
+ "color": "yellow"
+ }
+ ]
+ }
+ },
+ "customWidth": "33",
+ "name": "Severity"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | summarize Count =count() by resourceGroup",
+ "size": 0,
+ "title": "Resource Group",
+ "exportFieldName": "resourceGroup",
+ "exportParameterName": "resourceGroupFilter",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "33",
+ "name": "query - 9"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n | project id = tolower(id), tags\r\n | join kind=inner (securityresources\r\n | where type =~ \"microsoft.security/locations/alerts\"\r\n | extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n | extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n | extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n | extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n | extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n | extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))| project-away resourceNameIndex, splitAffectedResourceId, hostName, isAzure\r\n | project alertId = id, subscriptionId, alertProperties = properties, affectedResourceId = tolower(affectedResourceId)\r\n ) on $left.id == $right.affectedResourceId\r\n | extend id = alertId, subscriptionId, properties = alertProperties\r\n | where properties.Status in ('Active')\r\n | where properties.Severity in ('Low', 'Medium', 'High')\r\n | extend SeverityRank = case(\r\n properties.Severity == 'High', 3,\r\n properties.Severity == 'Medium', 2,\r\n properties.Severity == 'Low', 1,\r\n 0\r\n )\r\n | sort by SeverityRank desc, tostring(properties.SystemAlertId) asc\r\n | extend Tag = parse_json(tags)\r\n | mv-expand Tag\r\n | parse Tag with * ':\"' TagValue '\"}'\r\n | project TagValue, alertId\r\n | summarize Count = count() by TagValue",
+ "size": 0,
+ "title": "Tag",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "30",
+ "name": "query - 7",
+ "styleSettings": {
+ "maxWidth": "100%"
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "datatable(ResourceId: string) [ \"All\"] | union (securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | where Prop.Severity == \"High\"\r\n | extend ResourceIdentifiers = Prop.[\"ResourceIdentifiers\"]\r\n | project ResourceIdentifiers\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | where isnotempty(ResourceId )\r\n| summarize Count=count() by tostring(ResourceId)\r\n | top 5 by Count)",
+ "size": 1,
+ "title": "Top 5 attacked resources (with High Severity)",
+ "noDataMessage": "There are no Top 5 attacked resources found",
+ "exportedParameters": [
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "ResourceIdFilter",
+ "defaultValue": "All"
+ },
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "ShowTable",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Resource ID",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "ResourceId",
+ "label": "Resource ID"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "33",
+ "name": "Top 5 attacked resources (with High Severity)"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " datatable(AlertDisplayName: string) [ \"All\"] | union(securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n | project tostring(AlertDisplayName)\r\n | summarize Count = count() by AlertDisplayName\r\n | top 5 by Count)",
+ "size": 1,
+ "title": "Top alert types ",
+ "exportedParameters": [
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "AlertDisplayNameFilter",
+ "defaultValue": "All"
+ },
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "ShowTable",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert display name"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Count",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "33",
+ "name": "Top alert types"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " datatable(AlertDisplayName: string) [ \"All\"] | union(securityresources\r\n| where type =~ 'microsoft.security/locations/alerts'\r\n| extend Prop = parse_json(properties)\r\n| extend TimeGeneratedUtc = Prop.[\"TimeGeneratedUtc\"]\r\n| extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n| where TimeGeneratedUtc > ago(24h)\r\n| summarize Count=count() by tostring(AlertDisplayName))",
+ "size": 1,
+ "title": "New Alerts (Since last 24hrs)",
+ "noDataMessage": "No new alerts in Last 24 hours",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "NewAlertFilter",
+ "defaultValue": "All"
+ },
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "ShowTable",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ClearOther",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert display name"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "customWidth": "33",
+ "name": "New Alerts (Since last 24hrs)"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "",
+ "size": 0,
+ "title": "Parameters at this point",
+ "queryType": 2
+ },
+ "conditionalVisibility": {
+ "parameterName": "parameter1",
+ "comparison": "isEqualTo",
+ "value": "1"
+ },
+ "name": "query - 23"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/locations/alerts\"\r\n| project-rename P= properties\r\n| extend Details = parse_json(P)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = tostring(Details.[\"Severity\"])\r\n| where Severity == \"High\"\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = tostring(Details.[\"Status\"])\r\n| extend Tactics = tostring(Details.[\"Intent\"])\r\n| extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n| mv-expand ResourceIdentifiers\r\n| extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n| where Status == \"Active\"\r\n| where (\"{ResourceIdFilter}\" == \"All\" or ResourceId == \"{ResourceIdFilter}\") \r\n // if either alert name or new alert are set, union those 2 together, if neither are set treat as all\r\n and ((\"{AlertDisplayNameFilter}\" == \"All\" and \"{NewAlertFilter}\" == \"All\") or AlertDisplayName == \"{AlertDisplayNameFilter}\" or AlertDisplayName == \"{NewAlertFilter}\")\r\n| extend SeverityRank = case(\r\n Severity == 'High', 3,\r\n Severity == 'Medium', 2,\r\n Severity == 'Low', 1,\r\n 0\r\n )\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n| project\r\n Severity,\r\n SystemAlertId,\r\n AlertDisplayName,\r\n IsIncident = iif(IsIncident == \"true\", \"Incident\", \"Alert\"),\r\n AlertUri,\r\n Tactics,\r\n SeverityRank,\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n ResourceId\r\n| sort by SeverityRank",
+ "size": 0,
+ "title": "{$rowCount} Active Alerts ",
+ "exportedParameters": [
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "Resource",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertUri",
+ "parameterName": "AlertUri",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SystemAlertId",
+ "parameterName": "SystemAlertId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubscriptionId",
+ "parameterName": "SubscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "ResourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Location",
+ "parameterName": "Location",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Severity",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "contains",
+ "thresholdValue": "High",
+ "representation": "redBright",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Low",
+ "representation": "yellow",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Informational ",
+ "representation": "gray",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": null,
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SystemAlertId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertDisplayName",
+ "formatter": 1,
+ "formatOptions": {
+ "linkTarget": "OpenBlade",
+ "bladeOpenContext": {
+ "bladeName": "AlertBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "alertId",
+ "source": "column",
+ "value": "SystemAlertId"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "column",
+ "value": "SubscriptionId"
+ },
+ {
+ "name": "resourceGroup",
+ "source": "column",
+ "value": "ResourceGroup"
+ },
+ {
+ "name": "referencedFrom",
+ "source": "static",
+ "value": "activeAlertsWorkbook"
+ },
+ {
+ "name": "location",
+ "source": "column",
+ "value": "Location"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "columnMatch": "IsIncident",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "AlertUri",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Tactics",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "ResourceId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "TenantId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Description",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProviderName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorOriginalId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceComputerId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceLevel",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceScore",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "StartTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "EndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProcessingEndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedProperties",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Entities",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceSystem",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceSubscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceResourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedLinks",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductComponentName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertLink",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "SystemIncidentId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SystemAlertId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SystemAlertId",
+ "label": "Alert ID"
+ },
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert name"
+ },
+ {
+ "columnId": "IsIncident",
+ "label": "Incident/alert"
+ },
+ {
+ "columnId": "SeverityRank",
+ "label": "Severity"
+ },
+ {
+ "columnId": "SubscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "ResourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "ResourceId",
+ "label": "Resource"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "ShowTable",
+ "comparison": "isNotEqualTo"
+ },
+ "showPin": true,
+ "name": "SecurityIncidents - FilterbyResourceId",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "list",
+ "links": [
+ {
+ "id": "2f6ff56b-9afb-46f6-968d-a59cb744ea14",
+ "linkTarget": "OpenBlade",
+ "linkLabel": "Open Alert View",
+ "style": "primary",
+ "bladeOpenContext": {
+ "bladeName": "AlertBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "alertId",
+ "source": "static",
+ "value": "{SystemAlertId}"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "static",
+ "value": "{SubscriptionId}"
+ },
+ {
+ "name": "resourceGroup",
+ "source": "static",
+ "value": "{ResourceGroup}"
+ },
+ {
+ "name": "referencedFrom",
+ "source": "static",
+ "value": "activeAlertsWorkbook"
+ },
+ {
+ "name": "location",
+ "source": "static",
+ "value": "{Location}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SystemAlertId",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Alerts "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### MITRE ATT&CK tactics "
+ },
+ "customWidth": "100",
+ "name": "text - 17"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/locations/alerts\"\r\n| extend Details = parse_json(properties)\r\n| extend Tactics = Details.[\"Intent\"]\r\n| project Tactics\r\n| extend Tactic = split(Tactics,\",\")\r\n| mv-expand Tactic\r\n| extend Tactic = trim(\" \",tostring(Tactic))\r\n| summarize Count = count() by Tactic\r\n| sort by Count desc\r\n",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "barchart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "Tactics",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "Tactics",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "mapSettings": {
+ "locInfo": "LatLong",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "type": "heatmap",
+ "colorAggregation": "Sum",
+ "nodeColorField": "count_",
+ "heatmapPalette": "greenRed"
+ }
+ }
+ },
+ "name": "query - 17"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "bd374a50-b240-4232-ad4a-77725f80bcf5",
+ "cellValue": "View",
+ "linkTarget": "parameter",
+ "linkLabel": "List View",
+ "subTarget": "List",
+ "preText": "",
+ "style": "link"
+ },
+ {
+ "id": "588b7d9f-8ff1-4afa-8d3f-b0085ae6b148",
+ "cellValue": "View",
+ "linkTarget": "parameter",
+ "linkLabel": "Map View",
+ "subTarget": "Map",
+ "preText": "",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 10"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "1ffc8fe9-a919-4c9e-8489-a92f0a7d79e1",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceFilter",
+ "label": "Resource",
+ "type": 5,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend ResourceIdentifiers = Prop.[\"ResourceIdentifiers\"]\r\n | project ResourceIdentifiers\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n //| where isnotempty(ResourceId )\r\n | extend Resource = tolower(tostring(ResourceId))\r\n | summarize count() by Resource\r\n | project Resource\r\n //| order by Resource asc\r\n",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "e9522d87-143f-408b-93ea-b8f07223995e",
+ "version": "KqlParameterItem/1.0",
+ "name": "SeverityFilter",
+ "label": "Severity",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "value": [
+ "value::all"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n\r\n{\"value\": \"High\", \"label\":\"High\"},\r\n{\"value\": \"Medium\", \"label\":\"Medium\"},\r\n{\"value\": \"Low\", \"label\":\"Low\"},\r\n{\"value\": \"Informational\", \"label\":\"Informational\"}\r\n]\r\n \r\n ",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all"
+ },
+ {
+ "id": "664365b5-1fc4-4cfa-b99d-a72e3d35ab11",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroupFilter",
+ "label": "Resource group",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend resourceGroup = iif(isempty(resourceGroup),\" \",resourceGroup)\r\n| summarize Count =count() by resourceGroup\r\n | project resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "48a8dd7e-43ab-413e-88f8-a433100d92ce",
+ "version": "KqlParameterItem/1.0",
+ "name": "AlertNameFilter",
+ "label": "Alert name",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n | distinct tostring(AlertDisplayName)\r\n | order by AlertDisplayName asc\r\n ",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "378aeb0c-9135-43fa-b46a-86f71baa0137",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagFilter",
+ "label": "Tag",
+ "type": 2,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "securityresources\r\n | where type =~ \"microsoft.security/locations/alerts\"\r\n | extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n | extend Details = parse_json(properties)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n | extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n | extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n | extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n | extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n | extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))| project-away resourceNameIndex, splitAffectedResourceId, hostName\r\n | extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | extend Resource = tolower(tostring(ResourceId))\r\n | project alertId = id, subscriptionId, alertProperties = properties, affectedResourceId = tolower(affectedResourceId),tostring(Severity), SystemAlertId, AlertDisplayName,IsIncident = iif(IsIncident==\"true\",\"Incident\",\"Alert\"),AlertUri,Status,Tactics,SubscriptionId,ResourceGroup,Location, ResourceIdentifier=Details.[\"ResourceIdentifiers\"],Resource\r\n | join kind=leftouter (\r\n resources\r\n | project id = tolower(id), tags\r\n ) on $left.affectedResourceId == $right.id\r\n | extend Tag = parse_json(tags)\r\n | mv-expand Tag\r\n | parse Tag with * ':\"' TagValue '\"}'\r\n | extend TagValue = iif(isempty(TagValue),\" \",TagValue)\r\n | project TagValue, alertId\r\n | distinct TagValue\r\n ",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "List"
+ },
+ "name": "parameters - 23"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type =~ \"microsoft.security/locations/alerts\"\r\n| extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n| extend Details = parse_json(properties)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n| extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n| extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n| extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n| extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n| extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))\r\n| project-away resourceNameIndex, splitAffectedResourceId, hostName\r\n| extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n| mv-expand ResourceIdentifiers\r\n| extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n| extend Resource = tolower(tostring(ResourceId))\r\n| project\r\n alertId = id,\r\n subscriptionId,\r\n alertProperties = properties,\r\n affectedResourceId = tolower(affectedResourceId),\r\n tostring(Severity),\r\n SystemAlertId,\r\n AlertDisplayName,\r\n IsIncident = iif(IsIncident == \"true\", \"Incident\", \"Alert\"),\r\n AlertUri,\r\n Status,\r\n Tactics,\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n ResourceId,\r\n ResourceIdentifier=Details.[\"ResourceIdentifiers\"],\r\n Resource\r\n| join kind=leftouter (\r\n resources\r\n | project id = tolower(id), tags\r\n )\r\n on $left.affectedResourceId == $right.id\r\n| extend id = alertId, subscriptionId, properties = alertProperties\r\n| extend ResourceFilter =\" {ResourceFilter}\"\r\n| where Resource in~ ({ResourceFilter})\r\n| where Severity in~ ({SeverityFilter})\r\n| where AlertDisplayName in~ ({AlertNameFilter})\r\n| where Status == \"Active\"\r\n| extend ResourceGroup = iif(isempty(ResourceGroup), \" \", ResourceGroup)\r\n| where ResourceGroup in~ ({ResourceGroupFilter})\r\n| extend tag = iff(isempty(tags), dynamic({\"tags\": \" \"}), parse_json(tags))\r\n| mv-expand tag\r\n| parse tag with * ':\"' TagValue '\"}'\r\n| extend TagValue = iif(isempty(TagValue), \" \", TagValue)\r\n| where TagValue in ({TagFilter})\r\n| where AlertDisplayName !startswith ('[SAMPLE ALERT]')\r\n| project\r\n (Severity),\r\n tostring(SystemAlertId),\r\n tostring(AlertDisplayName),\r\n IsIncident = iif(IsIncident == \"true\", \"Incident\", \"Alert\"),\r\n AlertURI = tostring(AlertUri),\r\n tostring(Status),\r\n tostring(Tactics),\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n TagValue,\r\n tostring(tags),\r\n tostring(ResourceId)\r\n| distinct\r\n Severity,\r\n SystemAlertId,\r\n AlertDisplayName,\r\n IsIncident,\r\n AlertURI,\r\n Status,\r\n Tactics,\r\n SubscriptionId,\r\n ResourceGroup,\r\n Location,\r\n tags,\r\n ResourceId\r\n| order by Severity asc",
+ "size": 0,
+ "title": "Active Alerts ",
+ "exportedParameters": [
+ {
+ "fieldName": "Resource",
+ "parameterName": "Resource",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertUri",
+ "parameterName": "AlertUri",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SystemAlertId",
+ "parameterName": "SystemAlertId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubscriptionId",
+ "parameterName": "SubscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "ResourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Location",
+ "parameterName": "Location",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Severity",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "contains",
+ "thresholdValue": "High",
+ "representation": "redBright",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Low",
+ "representation": "yellow",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "contains",
+ "thresholdValue": "Informational ",
+ "representation": "gray",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": null,
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SystemAlertId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "IsIncident",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "AlertURI",
+ "formatter": 5,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Location",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ResourceId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Alert ID",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Alert URI",
+ "formatter": 5,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "Resource ID",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertUri",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ResourceIdentifier",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "TenantId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Description",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProviderName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VendorOriginalId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceComputerId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceLevel",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ConfidenceScore",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "StartTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "EndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProcessingEndTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedProperties",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Entities",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SourceSystem",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceSubscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WorkspaceResourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ExtendedLinks",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "ProductComponentName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AlertLink",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "Url"
+ }
+ },
+ {
+ "columnMatch": "SystemIncidentId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SystemAlertId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "AlertDisplayName",
+ "label": "Alert name"
+ },
+ {
+ "columnId": "IsIncident",
+ "label": "Incident/alert"
+ },
+ {
+ "columnId": "AlertURI",
+ "label": "Alert URI"
+ },
+ {
+ "columnId": "SubscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "ResourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "tags",
+ "label": "Tags"
+ },
+ {
+ "columnId": "ResourceId",
+ "label": "Resource"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "List"
+ },
+ "showPin": true,
+ "name": "SecurityIncidents"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "list",
+ "links": [
+ {
+ "id": "8e6f9368-ccbe-4092-b898-8a27c77a06b3",
+ "linkTarget": "OpenBlade",
+ "linkLabel": "Open Alert View",
+ "preText": "",
+ "style": "primary",
+ "bladeOpenContext": {
+ "bladeName": "AlertBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "alertId",
+ "source": "static",
+ "value": "{SystemAlertId}"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "static",
+ "value": "{SubscriptionId}"
+ },
+ {
+ "name": "resourceGroup",
+ "source": "static",
+ "value": "{ResourceGroup}"
+ },
+ {
+ "name": "referencedFrom",
+ "source": "static",
+ "value": "activeAlertsWorkbook"
+ },
+ {
+ "name": "location",
+ "source": "static",
+ "value": "{Location}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "List"
+ },
+ {
+ "parameterName": "SystemAlertId",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "links - 19"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": " To see more information about the alerts in the map view: 1. Configure continuous export to export your security alerts to a Log Analytics workspace by following the instructions described \r\n [ here. ](https://docs.microsoft.com/azure/defender-for-cloud/continuous-export?tabs=azure-portal)\r\n 2. In the \"Workspace\" filter below, choose the Log Analytics workspace your security alerts are exported to.\r\n\r\n"
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ "name": "text - 21"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "8724f927-b766-4814-a895-8c55565fb7f8",
+ "version": "KqlParameterItem/1.0",
+ "name": "Workspace",
+ "type": 5,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| where type contains \"solution\"\r\n| where name contains \"security\"\r\n| project id = tostring(properties.workspaceResourceId)\r\n| distinct id",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ "name": "parameters - 15"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/locations/alerts\"\r\n| project-rename P= properties\r\n| extend Details = parse_json(P)\r\n | extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertLink = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertLink with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertLink with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertLink with * '/location/' Location \r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | where isnotempty(ResourceId )\r\n| project Severity, SystemAlertId, tostring(AlertDisplayName),IsIncident = iif(IsIncident==\"true\",\"Incident\",\"Alert\"),tostring(AlertLink),Status,Tactics,tostring(ResourceId),SubscriptionId,ResourceGroup,Location\r\n| distinct tostring(SystemAlertId),tostring(AlertDisplayName),tostring(AlertLink),tostring(ResourceId)\r\n| summarize count() by ResourceId, AlertLink, AlertDisplayName\r\n",
+ "size": 0,
+ "title": "AlertsMapView ",
+ "exportMultipleValues": true,
+ "exportAggregateParts": true,
+ "exportedParameters": [
+ {
+ "fieldName": "ResourceId",
+ "parameterName": "Resource",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertLink",
+ "parameterName": "AlertLink",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "AlertDisplayName",
+ "parameterName": "AlertDisplayName",
+ "parameterType": 1
+ }
+ ],
+ "exportToExcelOptions": "all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "map",
+ "mapSettings": {
+ "locInfo": "AzureResource",
+ "locInfoColumn": "ResourceId",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "nodeColorField": "count_",
+ "colorAggregation": "Sum",
+ "type": "heatmap",
+ "heatmapPalette": "coldHot"
+ }
+ }
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ "name": "AlertsMapView ",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "let T = datatable ( AlertLink:string)\r\n[\r\n{AlertLink}\r\n];\r\nT\r\n| parse AlertLink with * '/alertId/' AlertId '/subscriptionId/' SubscriptionId '/resourceGroup/' ResourceGroup '/' * 'location/' Location \r\n| distinct AlertLink, AlertId, ResourceGroup,Location,SubscriptionId\r\n| join kind = inner (SecurityAlert\r\n| where isempty(ResourceId) == false\r\n| where TimeGenerated > ago(90d)\r\n| project SystemAlertId,ResourceId, DisplayName,StartTime) on $left.AlertId == $right.SystemAlertId\r\n| project ResourceId,DisplayName,AlertId, SubscriptionId, ResourceGroup, Location,StartTime\r\n| order by ResourceId,DisplayName, StartTime asc\r\n\r\n\r\n\r\n",
+ "size": 0,
+ "exportedParameters": [
+ {
+ "fieldName": "AlertId",
+ "parameterName": "AlertId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubscriptionId",
+ "parameterName": "SubscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Location",
+ "parameterName": "Location",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "ResourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{Workspace}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ResourceId",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "23ch"
+ }
+ },
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "45ch"
+ }
+ },
+ {
+ "columnMatch": "AlertId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Location",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "StartTime",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "23ch"
+ }
+ },
+ {
+ "columnMatch": "TimeGenerated",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "22ch"
+ }
+ },
+ {
+ "columnMatch": "AlertLink",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "ResourceId",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "DisplayName",
+ "label": "Alert name"
+ },
+ {
+ "columnId": "AlertId",
+ "label": "Alert ID"
+ },
+ {
+ "columnId": "SubscriptionId",
+ "label": "Subscription ID"
+ },
+ {
+ "columnId": "ResourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "StartTime",
+ "label": "Start time"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "customWidth": "45",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "View",
+ "comparison": "isEqualTo",
+ "value": "Map"
+ },
+ {
+ "parameterName": "AlertLink",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "AlertLink-Table"
+ }
+ ]
+ },
+ "name": "Security Discipline"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Security"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_Security"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "1e6e4cc7-5d76-48ef-8ce1-16f33f4f6dea",
+ "version": "KqlParameterItem/1.0",
+ "name": "SubscriptionAge",
+ "label": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ }
+ ],
+ "style": "above",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - SubscriptionAge"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Azure resource age\r\nAzure *resource age* is one of the metric to monitor as part of the \"resource consistency\" discipline of the Cloud Adoption Framework. This metric help you to identify old resources to be assessed and cleaned if they are not used anymore."
+ },
+ "name": "text - ResourceAgeDescription"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Common/noSubscriptions",
+ "items": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "SubscriptionAge",
+ "comparison": "isEqualTo",
+ "value": ""
+ },
+ "name": "No Subscriptions group - Age"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SubscriptionAge:id}/resources?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-04-01\"},{\"key\":\"$expand\",\"value\":\"createdTime,changedTime,provisioningState\"}],\"batchDisabled\":true,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"$..id\",\"columnid\":\"id\",\"columnType\":\"string\"},{\"path\":\"$..type\",\"columnid\":\"type\",\"columnType\":\"string\"},{\"path\":\"$..location\",\"columnid\":\"location\",\"columnType\":\"string\"},{\"path\":\"$..createdTime\",\"columnid\":\"createdTime\",\"columnType\":\"datetime\"},{\"path\":\"$..changedTime\",\"columnid\":\"changedTime\",\"columnType\":\"datetime\"},{\"path\":\"$..provisioningState\",\"columnid\":\"provisioningState\",\"columnType\":\"string\"},{\"path\":\"$..tags\",\"columnid\":\"tags\"}]}}]}",
+ "size": 0,
+ "title": "Resource age",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "type",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "location",
+ "formatter": 17
+ },
+ {
+ "columnMatch": "createdTime",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "changedTime",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "provisioningState",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "tags",
+ "formatter": 1
+ }
+ ],
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "changedTime",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "type",
+ "label": "Resource Type"
+ },
+ {
+ "columnId": "location",
+ "label": "Region"
+ },
+ {
+ "columnId": "createdTime",
+ "label": "Created Time"
+ },
+ {
+ "columnId": "changedTime",
+ "label": "Last Change"
+ },
+ {
+ "columnId": "provisioningState",
+ "label": "Provisioning State"
+ },
+ {
+ "columnId": "tags",
+ "label": "Tags"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "changedTime",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SubscriptionAge",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Resource age"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Age"
+ },
+ "name": "Resource Age"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "e15ef842-dadb-4a7b-b5f6-5d1bbe35b7af",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "description": "Cost information can only be displayed per subscription",
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": true,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ },
+ {
+ "id": "b73ef334-95b2-4ead-8dd2-51a90a90ce6f",
+ "version": "KqlParameterItem/1.0",
+ "name": "Aggregation",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n { \"value\": \"SubscriptionId\", \"label\": \"Subscription\", \"selected\":true},\r\n { \"value\": \"ResourceGroup\", \"label\": \"Resource Group\"},\r\n { \"value\": \"ResourceType\", \"label\": \"Resource Type\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "55ef4a45-0603-48cf-bb9b-a963e7a33be2",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeFrame",
+ "type": 2,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[[\r\n { \"value\": \"BillingMonthToDate\", \"label\": \"Billing MonthToDate\"},\r\n { \"value\": \"MonthToDate\", \"label\": \"MonthToDate\", \"selected\":true },\r\n { \"value\": \"TheLastBillingMonth\", \"label\": \"Last Billing Month\"},\r\n { \"value\": \"TheLastMonth\", \"label\": \"Last Month\"},\r\n { \"value\": \"WeekToDate\", \"label\": \"WeekToDate\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "label": "Timeframe"
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - Cost Subscription"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Microsoft Cost Management\r\n\r\nBefore you can control and optimize your costs, you first need to understand where they originated β from the underlying resources used to support your cloud projects to the environments they're deployed in and the owners who manage them. Full visibility backed by a thorough tagging strategy is critical to accurately understand your spending patterns and enforce cost control mechanisms.\r\n\r\n[Cost Management](https://portal.azure.com/#view/Microsoft_Azure_CostManagement/Menu) is a set of FinOps tools that enable you to analyze, manage, and optimize your costs.\r\n\r\nCalculate your estimated hourly or monthly costs for using Azure with the [Azure Calculator](https://azure.microsoft.com/pricing/calculator/).\r\n\r\nFor more advanced reporting options, build custom [Power BI reports in the FinOps toolkit](https://aka.ms/ftk/pbi)."
+ },
+ "name": "text - AzureCostManagement"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":\" {\\r\\n \\\"type\\\": \\\"Usage\\\",\\r\\n \\\"timeframe\\\": \\\"{TimeFrame}\\\",\\r\\n \\\"dataset\\\": {\\r\\n \\\"granularity\\\": \\\"None\\\",\\r\\n \\\"aggregation\\\": {\\r\\n \\\"totalCost\\\": {\\r\\n \\\"name\\\": \\\"PreTaxCost\\\",\\r\\n \\\"function\\\": \\\"Sum\\\"\\r\\n }\\r\\n },\\r\\n \\\"grouping\\\": [\\r\\n {\\r\\n \\\"type\\\": \\\"Dimension\\\",\\r\\n \\\"name\\\": \\\"{Aggregation}\\\"\\r\\n }\\r\\n ]\\r\\n }\\r\\n }\",\"headers\":[],\"method\":\"POST\",\"path\":\"/subscriptions/{Subscription:id}/providers/Microsoft.CostManagement/query?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2023-11-01\"}],\"batchDisabled\":true,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.properties\",\"columns\":[]}}]}",
+ "size": 0,
+ "title": "Overall cost",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "PreTaxCost",
+ "formatter": 0,
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true,
+ "maximumFractionDigits": 2
+ },
+ "emptyValCustomText": "\"0\""
+ }
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "ResourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": false
+ }
+ },
+ {
+ "columnMatch": "ResourceType",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": false,
+ "showIcon": false
+ }
+ }
+ ],
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "$gen_number_PreTaxCost_0",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PreTaxCost",
+ "label": "Cost"
+ },
+ {
+ "columnId": "Currency",
+ "label": "Currency"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_number_PreTaxCost_0",
+ "sortOrder": 2
+ }
+ ],
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - Overall cost"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "6cc7fc26-1a56-41cb-ad43-301e0f9f8903",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "label": "Tag name",
+ "type": 2,
+ "isRequired": true,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ },
+ {
+ "id": "2fc46f5d-ce69-42ea-8ebf-1c3d69c4e780",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "label": "Tag value",
+ "type": 2,
+ "isRequired": true,
+ "query": "Resources\r\n| extend TagValue = tostring(tags.{TagName})\r\n| project TagValue\r\n| distinct TagValue",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": ""
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "parameters - TagFilter"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":\" {\\r\\n \\\"type\\\": \\\"Usage\\\",\\r\\n \\\"timeframe\\\": \\\"{TimeFrame}\\\",\\r\\n \\\"dataset\\\": {\\r\\n \\\"granularity\\\": \\\"None\\\",\\r\\n \\\"filter\\\": {\\r\\n \\\"tags\\\" : {\\r\\n \\\"name\\\" : \\\"{TagName}\\\",\\r\\n \\\"operator\\\" : \\\"In\\\",\\r\\n \\\"values\\\" : [\\r\\n \\\"{TagValue}\\\"\\r\\n ]\\r\\n }\\r\\n },\\r\\n \\\"aggregation\\\": {\\r\\n \\\"totalCost\\\": {\\r\\n \\\"name\\\": \\\"PreTaxCost\\\",\\r\\n \\\"function\\\": \\\"Sum\\\"\\r\\n }\\r\\n },\\r\\n \\\"grouping\\\": [\\r\\n {\\r\\n \\\"type\\\": \\\"Dimension\\\",\\r\\n \\\"name\\\": \\\"{Aggregation}\\\"\\r\\n }\\r\\n ]\\r\\n }\\r\\n }\",\"headers\":[],\"method\":\"POST\",\"path\":\"/subscriptions/{Subscription:id}/providers/Microsoft.CostManagement/query?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2023-11-01\"}],\"batchDisabled\":true,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.properties\",\"columns\":[]}}]}",
+ "size": 3,
+ "title": "Overall cost filtered by tag",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "PreTaxCost",
+ "formatter": 0,
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true,
+ "maximumFractionDigits": 2
+ },
+ "emptyValCustomText": "\"0\""
+ }
+ },
+ {
+ "columnMatch": "SubscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "ResourceType",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": false,
+ "showIcon": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PreTaxCost",
+ "label": "Cost"
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "TagValue",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ "name": "query - Sub cost per tag"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Cost"
+ },
+ "name": "RC_Cost Management"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "value::tenant"
+ ],
+ "parameters": [
+ {
+ "id": "476f61f4-2271-4e58-9b5e-7958d9a4ca3b",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ }
+ ],
+ "style": "above",
+ "doNotRunWhenHidden": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resources/tenants"
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Compliance"
+ },
+ "name": "parameters - Scope Filter For RC_Compliance"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Build and scale your applications quickly while maintaining control\r\nTake advantage of built-in and custom policies to set guardrails in your subscriptions. Easily deploy fully governed environments throughout your organization with Azure Blueprints. And, manage costs by gaining insights into your cloud spend so that you get the most from your cloud investments. \r\n- Enforce and audit your policies for any Azure service \r\n- Create compliant environments using Azure Blueprints, including resources, policies, and role-access controls \r\n- Ensure that youβre compliant with external regulations by using built-in compliance controls \r\n- Monitor cost and encourage accountability across your entire organization"
+ },
+ "name": "text - 16"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Breakdown of compliance information for each assignment at subscription/MG/tenant scope\r\n// Gets aggregated compliance and policy definition information for each of the assignments in the selected scope as well as a few additional details, including: policySetDefinition or policyDefinition details for those assignments, the number of policies/groups within the policysetDefinitions listed, number of non-compliant policies within each policySetDefinition and the resource count breakdown per compliance state for those assignments.\r\n// Click the \"Run query\" command above to execute the query and see results.\r\npolicyResources\r\n| where type =~'Microsoft.Authorization/PolicyAssignments'\r\n| project policyAssignmentId = tolower(tostring(id)), policyAssignmentName = name, policyAssignmentDisplayName = tostring(properties.displayName), policyAssignmentScope = tostring(properties.scope), policyAssignmentDefinitionId = tolower(properties.policyDefinitionId), policyAssignmentNotScopes = tolower(properties.notScopes) \r\n| where policyAssignmentScope == \"{Subscription}\"\r\n| join kind=leftouter(\r\n policyResources\r\n | where type =~'Microsoft.Authorization/PolicySetDefinitions' or type =~'Microsoft.Authorization/PolicyDefinitions'\r\n | project definitionId = tolower(id), type, numberOfPolicies = array_length(properties.policyDefinitions), category = tostring(properties.metadata.category), numberOfGroups= array_length(properties.policyDefinitionGroups), mode = tostring(properties.mode)\r\n | extend isRegulatoryInitiative = iff(category =~ 'Regulatory Compliance', true, false)\r\n | extend definitionType = iff(type =~ 'Microsoft.Authorization/PolicysetDefinitions', 'initiative', 'policy')\r\n | extend isRPMode = iff(mode startswith 'Microsoft.', true, false)\r\n | project definitionId, numberOfPolicies, category, numberOfGroups, isRegulatoryInitiative, definitionType, isRPMode\r\n) on $left.policyAssignmentDefinitionId == $right.definitionId\r\n| join kind=leftouter(\r\n policyResources \r\n | where type =~ 'Microsoft.PolicyInsights/PolicyStates'\r\n | extend complianceState = tostring(properties.complianceState)\r\n | extend policyStateResourceId =id, resourceId = tostring(properties.resourceId), policyAssignmentId = tostring(properties.policyAssignmentId), policyDefinitionId = tostring(properties.policyDefinitionId), policySetDefinitionId = tostring(properties.policySetDefinitionId), policyDefinitionReferenceId = tostring(properties.policyDefinitionReferenceId), policyDefinitionAction = tostring(properties.policyDefinitionAction), policyDefinitionGroupNames = iff(isnotnull(properties.policyDefinitionGroupNames), properties.policyDefinitionGroupNames, dynamic([''])), stateWeight = toint(properties.stateWeight)\r\n | summarize max(stateWeight) by resourceId, policyAssignmentId, policySetDefinitionId\r\n | summarize resourceCounts = count() by policyAssignmentId, policySetDefinitionId, max_stateWeight\r\n| extend complianceState = case(\r\nmax_stateWeight == 300, 'noncompliant',\r\nmax_stateWeight == 200, 'compliant',\r\nmax_stateWeight == 100, 'conflict',\r\nmax_stateWeight == 50, 'exempt',\r\nmax_stateWeight == 10, 'unknown',\r\n'notapplicable')\r\n | extend pack = pack('complianceState', complianceState, 'resourceCounts', resourceCounts), numberOfNonCompliantResources = toint(iff(complianceState =~ 'NonCompliant', resourceCounts,0))\r\n | summarize numberOfNonCompliantResources = max(numberOfNonCompliantResources), details = makelist(pack) by policyAssignmentId, policySetDefinitionId\r\n | limit 5000\r\n) on $left.policyAssignmentId == $right.policyAssignmentId\r\n| sort by numberOfNonCompliantResources desc\r\n| project-away policyAssignmentId1",
+ "size": 0,
+ "title": "Resource compliance",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resources/tenants",
+ "crossComponentResources": [
+ "value::tenant"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "policyAssignmentId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentDisplayName",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "GenericDetails",
+ "linkIsContextBlade": true
+ }
+ },
+ {
+ "columnMatch": "policyAssignmentScope",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentDefinitionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policyAssignmentNotScopes",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "definitionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "numberOfPolicies",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "numberOfGroups",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "isRegulatoryInitiative",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "isRPMode",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "policySetDefinitionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "category",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "policyAssignmentId",
+ "label": "Assignment ID"
+ },
+ {
+ "columnId": "policyAssignmentName",
+ "label": "Assignment name"
+ },
+ {
+ "columnId": "policyAssignmentDisplayName",
+ "label": "Assignment display name"
+ },
+ {
+ "columnId": "policyAssignmentScope",
+ "label": "Assignment scope"
+ },
+ {
+ "columnId": "policyAssignmentDefinitionId",
+ "label": "Assignment definition ID"
+ },
+ {
+ "columnId": "definitionId",
+ "label": "Definition ID"
+ },
+ {
+ "columnId": "numberOfPolicies",
+ "label": "Number of policies"
+ },
+ {
+ "columnId": "category",
+ "label": "Category"
+ },
+ {
+ "columnId": "definitionType",
+ "label": "Type"
+ },
+ {
+ "columnId": "numberOfNonCompliantResources",
+ "label": "Non compliant resources"
+ },
+ {
+ "columnId": "details",
+ "label": "Details"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "category",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "name": "query - ResourceCompliance"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\"\r\n| summarize AggregatedValue = count() by ResourceProviderValue\r\n| order by AggregatedValue desc",
+ "size": 3,
+ "showAnalytics": true,
+ "title": "Failures by resources",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "33",
+ "name": "query - Failures by resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\" or ActivityStatusValue has \"Failed\"\r\n| summarize AggregatedValue = count() by OperationNameValue\r\n| order by AggregatedValue desc",
+ "size": 3,
+ "showAnalytics": true,
+ "title": "Failures by operations",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "33",
+ "name": "query - Failures by operations"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\" or ActivityStatusValue has \"Failed\"\r\n| summarize AggregatedValue = count() by CategoryValue\r\n| order by AggregatedValue desc",
+ "size": 3,
+ "showAnalytics": true,
+ "title": "Failures by category",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "ResourceProviderValue",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "AggregatedValue",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "customWidth": "33",
+ "name": "query - Failures by category"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AzureActivity\r\n| where ActivityStatusValue has \"Failure\" or ActivityStatusValue has \"Failed\"\r\n| order by CategoryValue\r\n",
+ "size": 0,
+ "title": "Failure by category details",
+ "timeContext": {
+ "durationMs": 604800000
+ },
+ "showExportToExcel": true,
+ "queryType": 0,
+ "resourceType": "microsoft.resources/subscriptions",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Authorization",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Authorization_d",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Claims",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Claims_d",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Properties_d",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "_ResourceId",
+ "formatter": 5
+ }
+ ],
+ "filter": true
+ }
+ },
+ "name": "query - Failure by category details"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "group - ComplianceQueries"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Compliance"
+ },
+ "name": "RC_Compliance"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "4168a8b2-a522-4f0d-9575-893d70d9239d",
+ "version": "KqlParameterItem/1.0",
+ "name": "RulesCount",
+ "type": 1,
+ "description": "Count of the governance rule, when there is no rules, empty state will be shown",
+ "query": "securityresources\r\n| where type == \"microsoft.security/governancerules\"\r\n| where tostring(properties.isDisabled) == \"false\"\r\n| count",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "Tabs"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Security governance in Microsoft Defender for Cloud\r\n\r\n Microsoft Defender for Cloud continuously assesses your hybrid and multi-cloud workloads and provides you with recommendations to harden your assets and enhance your security posture. Central security teams often experience challenges when driving the personnel within their organizations to implement recommendations. The organizations' security posture can suffer as a result. \r\nWe're introducing a brand-new, built-in governance experience to set ownership and expected remediation timeframes to resolve recommendations.\r\n\r\nTo use this governance report, you need to create security governance rules.\r\n [Learn more >](https://aka.ms/GovernanceDocumentation)\r\n"
+ },
+ "conditionalVisibility": {
+ "parameterName": "RulesCount",
+ "comparison": "isEqualTo"
+ },
+ "name": "text - 13"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Select one or more governance rules from the list to see a list of affected recommendations",
+ "style": "info"
+ },
+ "name": "RulesGridExplination"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| summarize count() by assignmentStatus\r\n",
+ "size": 3,
+ "title": "Resource status",
+ "noDataMessage": "No unhealthy resources found",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false,
+ "maximumFractionDigits": 2,
+ "maximumSignificantDigits": 3
+ }
+ }
+ },
+ "showBorder": true
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Ontime",
+ "color": "blue"
+ },
+ {
+ "seriesName": "Completed",
+ "color": "green"
+ },
+ {
+ "seriesName": "Unassigned",
+ "color": "orange"
+ },
+ {
+ "seriesName": "Overdue",
+ "color": "redBright"
+ }
+ ]
+ }
+ },
+ "customWidth": "20",
+ "name": "statusePerAssessment"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources\r\n| where type == \"microsoft.security/governancerules\"\r\n| where tostring(properties.isDisabled) == \"false\"\r\n| extend ruleName = todynamic(name)\r\n| extend ownerType = iif(tostring(properties.ownerSource.type) == \"Manually\", \"Email\", \"ByTag\")\r\n| extend description = tostring(properties.description)\r\n| extend displayName = tostring(properties.displayName)\r\n| extend governanceEmailNotification = todynamic(properties.governanceEmailNotification)\r\n| extend isGracePeriod = todynamic(properties.isGracePeriod)\r\n| extend remediationTimeframe = todynamic(properties.remediationTimeframe)\r\n| extend Days = tolong(totimespan(remediationTimeframe)/1d)\r\n| extend Days = iff(Days > 0, iff(Days == 1, \"1 day\", strcat(Days,\" days\")), \"\")\r\n| extend sourceResourceType = todynamic(properties.sourceResourceType)\r\n| extend conditionSets = todynamic(properties.conditionSets)\r\n| extend rulePriority = todynamic(properties.rulePriority)\r\n| extend ownerSource = todynamic(properties.ownerSource)\r\n| extend isDisabled = todynamic(properties.isDisabled)\r\n| extend ruleType = todynamic(properties.ruleType)\r\n| extend RuleConditionSet = tostring(properties.conditionSets), property = properties.conditionSets[0].conditions[0].property, operator = properties.conditionSets[0].conditions[0].operator\r\n| project Subscription = tostring(subscriptionId), [\"Display name\"] = tostring(properties.displayName), Priority = toint(properties.rulePriority), [\"Remediation timeframe\"] = Days, [\"Owner type\"] = ownerType, Owner = tostring(properties.ownerSource.value), [\"Grace period enabled\"] = tostring(properties.isGracePeriod), Rule = id, properties, RuleConditionSet\r\n| sort by Subscription, Priority asc",
+ "size": 0,
+ "title": "Governance rules",
+ "noDataMessage": "No Rules found",
+ "exportMultipleValues": true,
+ "exportedParameters": [
+ {
+ "fieldName": "Rule",
+ "parameterName": "Rule",
+ "parameterType": 1,
+ "quote": ""
+ },
+ {
+ "fieldName": "RuleConditionSet",
+ "parameterName": "RuleConditionSet",
+ "parameterType": 1,
+ "quote": ""
+ },
+ {
+ "fieldName": "Owner",
+ "parameterName": "Owner",
+ "parameterType": 1,
+ "quote": ""
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Display name",
+ "formatter": 1,
+ "formatOptions": {
+ "bladeOpenContext": {
+ "bladeName": "CreateGovernanceRuleContextBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "",
+ "source": "column",
+ "value": "properties"
+ },
+ {
+ "name": "subscriptionId",
+ "source": "column",
+ "value": "subscriptionId"
+ },
+ {
+ "name": "governanceRuleToEdit",
+ "source": "column",
+ "value": "properties"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "columnMatch": "Priority",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Remediation timeframe",
+ "formatter": 0,
+ "tooltipFormat": {
+ "tooltip": "DD.HH.MM.SS"
+ }
+ },
+ {
+ "columnMatch": "Grace period enabled",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "true",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "false",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Rule",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "ownerDetails",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "isGracePeriod",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "remediationTimeframe",
+ "formatter": 1
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_Subscription_0",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Owner",
+ "label": "Owner details"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_Subscription_0",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "80",
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Rules",
+ "styleSettings": {
+ "maxWidth": "100"
+ }
+ }
+ ],
+ "exportParameters": true
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "RulesCount",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "subscriptionOverView"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "---"
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "resourceView"
+ },
+ "name": "LineSeparator1"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "π‘ Selected filter for **RuleConditionSet:** {RuleConditionSet}\r\nπ‘ Selected filter for **Rule:** {Rule}\r\nπ‘ Selected filter for **Owner:** {Owner}\r\n",
+ "style": "{selectedTab}"
+ },
+ "conditionalVisibility": {
+ "parameterName": "parameter1",
+ "comparison": "isEqualTo",
+ "value": "1"
+ },
+ "name": "ResourceFilter"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": " \r\n---"
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedTab",
+ "comparison": "isEqualTo",
+ "value": "resourceView"
+ },
+ "name": "LineSeparator2"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Select a recommendation from the list to see a list of affected resources",
+ "style": "info"
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Rule",
+ "comparison": "isNotEqualTo"
+ },
+ {
+ "parameterName": "DisplayName",
+ "comparison": "isEqualTo"
+ }
+ ],
+ "name": "assessmentsExplaination"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false\r\n| extend RuleConditionSet = '{RuleConditionSet}'\r\n| where RuleConditionSet contains name or RuleConditionSet contains properties.metadata.severity\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| summarize count() by assignmentStatus",
+ "size": 3,
+ "title": "Status per rule",
+ "noDataMessage": "No unhealthy resources found",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "rowLimit": 10000
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false,
+ "maximumFractionDigits": 2,
+ "maximumSignificantDigits": 3
+ }
+ }
+ },
+ "showBorder": true
+ },
+ "graphSettings": {
+ "type": 0,
+ "topContent": {
+ "columnMatch": "OsType",
+ "formatter": 1
+ },
+ "centerContent": {
+ "columnMatch": "count_",
+ "formatter": 1,
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Ontime",
+ "color": "blue"
+ },
+ {
+ "seriesName": "Completed",
+ "color": "green"
+ },
+ {
+ "seriesName": "Unassigned",
+ "color": "orange"
+ },
+ {
+ "seriesName": "Overdue",
+ "color": "redBright"
+ }
+ ]
+ }
+ },
+ "customWidth": "20",
+ "conditionalVisibility": {
+ "parameterName": "Rule",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "statusPerRule"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false\r\n| extend RuleConditionSet = '{RuleConditionSet}'\r\n| where RuleConditionSet contains name or RuleConditionSet contains properties.metadata.severity\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| where hasAssignment == true\r\n| extend owner = tostring(governanceassignmentsProperties.owner)\r\n| extend owner = iif(isnull(owner) == false and isempty(owner) == false, owner, \"Unspecified\")\r\n| extend assignmentStatus = iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\")\r\n| summarize Ontime = countif(assignmentStatus == \"Ontime\"), Overdue = countif(assignmentStatus == \"Overdue\") by selectedOwner = owner\r\n| sort by Overdue desc",
+ "size": 0,
+ "title": "Status per owner",
+ "exportMultipleValues": true,
+ "exportedParameters": [
+ {
+ "fieldName": "selectedOwner",
+ "parameterName": "selectedOwner",
+ "quote": ""
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Ontime",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "info",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Overdue",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "selectedOwner",
+ "label": "Owner"
+ }
+ ]
+ }
+ },
+ "customWidth": "30",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Owner",
+ "comparison": "isNotEqualTo"
+ },
+ {
+ "parameterName": "RuleConditionSet",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "Owner status"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend DisplayName = tostring(properties.displayName)\r\n| where isempty(DisplayName) == false and isnull(DisplayName) == false\r\n| extend RuleConditionSet = '{RuleConditionSet}'\r\n| where RuleConditionSet contains name or RuleConditionSet contains properties.metadata.severity\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, governanceassignmentsProperties = todynamic(properties), remediationDueDate) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| extend Status = assignmentStatus\r\n| summarize Completed = countif(Status == \"Completed\"), Ontime = countif(Status == \"Ontime\"), Overdue = countif(Status == \"Overdue\"),Unassigned = countif(Status == \"Unassigned\") by DisplayName = tostring(properties.displayName)\r\n| sort by Overdue desc",
+ "size": 0,
+ "title": "Recommendations",
+ "noDataMessage": "No Assessments found",
+ "exportedParameters": [
+ {
+ "fieldName": "id",
+ "parameterName": "id",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "DisplayName",
+ "parameterName": "DisplayName",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "75ch"
+ }
+ },
+ {
+ "columnMatch": "Completed",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Ontime",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "1",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ },
+ {
+ "representation": "Unknown",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Overdue",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Unassigned",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "!=",
+ "thresholdValue": "0",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "0"
+ }
+ ],
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 1,
+ "formatOptions": {
+ "customColumnWidthSetting": "90ch"
+ }
+ },
+ {
+ "columnMatch": "owner",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "40ch"
+ }
+ },
+ {
+ "columnMatch": "DueDate",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "Severity",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "OpenBlade",
+ "linkIsContextBlade": false,
+ "showIcon": true,
+ "bladeOpenContext": {
+ "bladeName": "GenericResourceHealthDetailsBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "resourceId",
+ "source": "cell",
+ "value": "%2Fsubscriptions%2F3b5bc982-20bc-4b59-b1ca-f8488bb86736%2FresourceGroups%2Fdemo%2Fproviders%2FMicrosoft.HybridCompute%2Fmachines%2FW2019"
+ }
+ ]
+ },
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "ResourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Source",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "OperatingSystem",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Category",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "Remediation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 11,
+ "formatOptions": {
+ "linkColumn": "Remediation",
+ "linkTarget": "Url"
+ },
+ "tooltipFormat": {
+ "tooltip": "Click to view remediation steps"
+ }
+ },
+ {
+ "columnMatch": "Code",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Healthy",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Unhealthy",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "$gen_thresholds_Ontime_2",
+ "sortOrder": 2
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "DisplayName",
+ "label": "Display name"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_thresholds_Ontime_2",
+ "sortOrder": 2
+ }
+ ]
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "Rule",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Assessmetns"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": ""
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "RuleConditionSet",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "empty text"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "securityresources \r\n| where type == \"microsoft.security/assessments\"\r\n| where isnull(properties.resourceDetails.AwsResourceId) and isnull(properties.resourceDetails.GcpResourceId)\r\n| extend displayNameFilter = tostring(\"{DisplayName}\")\r\n| extend selectedOwner = '{selectedOwner}'\r\n| where displayNameFilter == tostring(properties.displayName)\r\n| join kind=leftouter (securityresources \r\n| where type == \"microsoft.security/assessments/governanceassignments\"\r\n| extend assignedResourceId = tostring(todynamic(properties).assignedResourceId)\r\n| extend remediationDueDate = todatetime(properties.remediationDueDate)\r\n| project id = assignedResourceId, owner = properties.owner,governanceassignmentsProperties = todynamic(properties), remediationDueDate, isGrace = properties.isGracePeriod) on id\r\n| extend hasAssignment = isempty( governanceassignmentsProperties) == false and isnull( governanceassignmentsProperties) == false\r\n| extend assignmentStatus = iif(tostring(properties.status.code) == \"Unhealthy\",iif(hasAssignment == true, iif(bin(remediationDueDate, 1d) < bin(now(), 1d), \"Overdue\", \"Ontime\"), \"Unassigned\") , \"Completed\")\r\n| extend source = trim(' ', tolower(tostring(properties.resourceDetails.Source)))\r\n | extend resourceId = iff(source =~ \"azure\", properties.resourceDetails.Id, iff(source =~ \"aws\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), properties.resourceDetails.Id, iff(source =~ \"gcp\" and isnotempty(tostring(properties.resourceDetails.ConnectorId)), properties.resourceDetails.Id, iff(source =~ 'aws', properties.resourceDetails.AzureResourceId, iff(source =~ 'gcp', properties.resourceDetails.AzureResourceId, properties.resourceDetails.Id)))))\r\n| extend owner = tostring(governanceassignmentsProperties.owner)\r\n| extend owner = iif(isnull(owner) == false and isempty(owner) == false and hasAssignment == true , owner, iif(hasAssignment == false, owner, \"Unspecified\"))\r\n| where '{selectedOwner}' == '' or (selectedOwner contains owner and hasAssignment == true)\r\n| project [\"Resource\"] = resourceId, Subscription = subscriptionId ,Status = assignmentStatus, Owner = owner, [\"Due date\"] = remediationDueDate, [\"Grace period enabled\"] = isGrace\r\n| sort by Status desc",
+ "size": 0,
+ "title": "List of resources for: {DisplayName}",
+ "noDataMessage": "No Assessments found",
+ "exportFieldName": "id",
+ "exportParameterName": "id",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Resource id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "90ch"
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Completed",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Unassigned",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Overdue",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Ontime",
+ "representation": "1",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": null,
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 0,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "Grace period enabled",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "true",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "false",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Blank",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "owner",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "40ch"
+ }
+ },
+ {
+ "columnMatch": "DueDate",
+ "formatter": 6
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "90ch"
+ }
+ },
+ {
+ "columnMatch": "DisplayName",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "100ch"
+ }
+ },
+ {
+ "columnMatch": "Completed",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "green",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Ontime",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "blue",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Overdue",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "redBright",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Unassigned",
+ "formatter": 4,
+ "formatOptions": {
+ "palette": "orange",
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "Severity",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "OpenBlade",
+ "linkIsContextBlade": false,
+ "showIcon": true,
+ "bladeOpenContext": {
+ "bladeName": "GenericResourceHealthDetailsBlade",
+ "extensionName": "Microsoft_Azure_Security",
+ "bladeParameters": [
+ {
+ "name": "resourceId",
+ "source": "cell",
+ "value": "%2Fsubscriptions%2F3b5bc982-20bc-4b59-b1ca-f8488bb86736%2FresourceGroups%2Fdemo%2Fproviders%2FMicrosoft.HybridCompute%2Fmachines%2FW2019"
+ }
+ ]
+ },
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "ResourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true,
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Source",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "15ch"
+ }
+ },
+ {
+ "columnMatch": "OperatingSystem",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "25ch"
+ }
+ },
+ {
+ "columnMatch": "Category",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "20ch"
+ }
+ },
+ {
+ "columnMatch": "Remediation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "RemediationSteps",
+ "formatter": 11,
+ "formatOptions": {
+ "linkColumn": "Remediation",
+ "linkTarget": "Url"
+ },
+ "tooltipFormat": {
+ "tooltip": "Click to view remediation steps"
+ }
+ },
+ {
+ "columnMatch": "Code",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Healthy",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Unhealthy",
+ "representation": "3",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "DisplayName",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "Assignments"
+ }
+ ]
+ },
+ "name": "assessmentsWithExplaination"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "π‘ Selected filter for **DisplayName:** {DisplayName}\r\nπ‘ Selected filter for **selectedOwner:** {selectedOwner}\r\n",
+ "style": "{selectedTab}"
+ },
+ "conditionalVisibility": {
+ "parameterName": "parameter1",
+ "comparison": "isEqualTo",
+ "value": "1"
+ },
+ "name": "ResourceFilter - Copy"
+ }
+ ]
+ },
+ "name": "assessmentsGrid"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Governance"
+ },
+ "name": "RC_Governance"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "cc98cfec-0182-4887-854e-536e9f3857da",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": null
+ },
+ {
+ "id": "1c3411d9-e319-4d74-8e97-61e2f4c56a56",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "isRequired": true,
+ "query": "resources\r\n| summarize by location\r\n| where location != \"global\"",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": "westeurope"
+ }
+ ],
+ "style": "above",
+ "queryType": 1,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 0"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Azure subscription and service limits, quotas, and constraints \r\nTo know more about Azure service limits & quotas, see [Azure subscription and service limits, quotas, and constraints](https://learn.microsoft.com/azure/azure-resource-manager/management/azure-subscription-service-limits?toc=%2Fazure%2Fnetworking%2Ftoc.json#networking-limits)."
+ },
+ "name": "text - Limits"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Common/noSubscriptions",
+ "items": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isEqualTo",
+ "value": ""
+ },
+ "name": "No Subscriptions group - RC_Quota"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{Subscription:id}/providers/microsoft.compute/locations/{Location}/usages?api-version=2022-03-01\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"currentValue\",\"columnid\":\"Used\",\"columnType\":\"long\"},{\"path\":\"limit\",\"columnid\":\"Limit\",\"columnType\":\"long\"},{\"path\":\"name.localizedValue\",\"columnid\":\"Resource\"}]}}]}",
+ "size": 0,
+ "title": "Compute resource limits",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "customWidth": "50",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ {
+ "parameterName": "Location",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "query - ComputeLimits"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{Subscription:id}/providers/microsoft.network/locations/{Location}/usages?api-version=2022-01-01\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"currentValue\",\"columnid\":\"Used\",\"columnType\":\"long\"},{\"path\":\"limit\",\"columnid\":\"Limit\",\"columnType\":\"long\"},{\"path\":\"name.localizedValue\",\"columnid\":\"Resource\"}]}}]}",
+ "size": 0,
+ "title": "Network resource limits",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "customWidth": "50",
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - NetworkLimits"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{Subscription:id}/providers/microsoft.storage/locations/{Location}/usages?api-version=2021-09-01\",\"urlParams\":[],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"currentValue\",\"columnid\":\"Used\",\"columnType\":\"long\"},{\"path\":\"limit\",\"columnid\":\"Limit\",\"columnType\":\"long\"},{\"path\":\"name.localizedValue\",\"columnid\":\"Resource\"}]}}]}",
+ "size": 4,
+ "title": "Storage account limits",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "filter": true,
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "Limit",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "customWidth": "100",
+ "conditionalVisibility": {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "query - StorageLimits"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_Quota"
+ },
+ "name": "Usage + limits"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Automation",
+ "expandable": true,
+ "expanded": true,
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.automation'\r\n\tor type has 'microsoft.logic'\r\n\tor type has 'microsoft.web/customapis'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.automation/automationaccounts', 'Automation Accounts',\r\n\ttype == 'microsoft.web/serverfarms', \"App Service Plans\",\r\n\tkind == 'functionapp', \"Azure Functions\", \r\n\tkind == \"api\", \"API Apps\", \r\n\ttype == 'microsoft.web/sites', \"App Services\",\r\n\ttype =~ 'microsoft.web/connections', 'LogicApp Connectors',\r\n\ttype =~ 'microsoft.web/customapis','LogicApp API Connectors',\r\n\ttype =~ 'microsoft.logic/workflows','LogicApps',\r\n\ttype =~ 'microsoft.automation/automationaccounts/runbooks', 'Automation Runbooks',\r\n type =~ 'microsoft.automation/automationaccounts/configurations', 'Automation Configurations',\r\nstrcat(\"Not Translated: \", type))\r\n| summarize count() by type\r\n| where type !has \"Not Translated\"",
+ "size": 3,
+ "title": "Count of all resource types",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "name": "Count of all resource types"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.automation'\r\n\t or type has 'microsoft.logic'\r\n\t or type has 'microsoft.web/customapis'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.automation/automationaccounts', 'Automation Accounts',\r\n\ttype =~ 'microsoft.web/connections', 'LogicApp Connectors',\r\n\ttype =~ 'microsoft.web/customapis','LogicApp API Connectors',\r\n\ttype =~ 'microsoft.logic/workflows','LogicApps',\r\n\ttype =~ 'microsoft.automation/automationaccounts/runbooks', 'Automation Runbooks',\r\n\ttype =~ 'microsoft.automation/automationaccounts/configurations', 'Automation Configurations',\r\n\tstrcat(\"Not Translated: \", type))\r\n| extend RunbookType = tostring(properties.runbookType)\r\n| extend LogicAppTrigger = properties.definition.triggers\r\n| extend LogicAppTrigger = iif(type =~ 'LogicApps', case(\r\n\tLogicAppTrigger has 'manual', tostring(LogicAppTrigger.manual.type),\r\n\tLogicAppTrigger has 'Recurrence', tostring(LogicAppTrigger.Recurrence.type),\r\n\tstrcat(\"Unknown Trigger type\", LogicAppTrigger)), LogicAppTrigger)\r\n| extend State = case(\r\n\ttype =~ 'Automation Runbooks', properties.state, \r\n\ttype =~ 'LogicApps', properties.state,\r\n\ttype =~ 'Automation Accounts', properties.state,\r\n\ttype =~ 'Automation Configurations', properties.state,\r\n\t' ')\r\n| extend CreatedDate = case(\r\n\ttype =~ 'Automation Runbooks', properties.creationTime, \r\n\ttype =~ 'LogicApps', properties.createdTime,\r\n\ttype =~ 'Automation Accounts', properties.creationTime,\r\n\ttype =~ 'Automation Configurations', properties.creationTime,\r\n\t' ')\r\n| extend LastModified = case(\r\n\ttype =~ 'Automation Runbooks', properties.lastModifiedTime, \r\n\ttype =~ 'LogicApps', properties.changedTime,\r\n\ttype =~ 'Automation Accounts', properties.lastModifiedTime,\r\n\ttype =~ 'Automation Configurations', properties.lastModifiedTime,\r\n\t' ')\r\n| extend Details = pack_all()\r\n| project Resource=id, subscriptionId, type, resourceGroup, RunbookType, LogicAppTrigger, State, Details",
+ "size": 0,
+ "title": "Details",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Automation Detailed"
+ }
+ ]
+ },
+ "name": "Group - Automation",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "App services",
+ "expandable": true,
+ "expanded": true,
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.web'\r\n\t or type =~ 'microsoft.apimanagement/service'\r\n\t or type =~ 'microsoft.network/frontdoors'\r\n\t or type =~ 'microsoft.network/applicationgateways'\r\n\t or type =~ 'microsoft.appconfiguration/configurationstores'\r\n| extend type = case(\r\n\ttype == 'microsoft.web/serverfarms', \"App Service Plans\",\r\n\tkind == 'functionapp', \"Azure Functions\", \r\n\tkind == \"api\", \"API Apps\", \r\n\ttype == 'microsoft.web/sites', \"App Services\",\r\n\ttype =~ 'microsoft.network/applicationgateways', 'App Gateways',\r\n\ttype =~ 'microsoft.network/frontdoors', 'Front Door',\r\n\ttype =~ 'microsoft.apimanagement/service', 'API Management',\r\n\ttype =~ 'microsoft.web/certificates', 'App Certificates',\r\n\ttype =~ 'microsoft.appconfiguration/configurationstores', 'App Config Stores',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| summarize count() by type",
+ "size": 3,
+ "title": "Count of all resource types",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Apps Overview"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type has 'microsoft.web'\r\n\t or type =~ 'microsoft.apimanagement/service'\r\n\t or type =~ 'microsoft.network/frontdoors'\r\n\t or type =~ 'microsoft.network/applicationgateways'\r\n\t or type =~ 'microsoft.appconfiguration/configurationstores'\r\n| extend type = case(\r\n\ttype == 'microsoft.web/serverfarms', \"App Service Plans\",\r\n\tkind == 'functionapp', \"Azure Functions\", \r\n\tkind == \"api\", \"API Apps\", \r\n\ttype == 'microsoft.web/sites', \"App Services\",\r\n\ttype =~ 'microsoft.network/applicationgateways', 'App Gateways',\r\n\ttype =~ 'microsoft.network/frontdoors', 'Front Door',\r\n\ttype =~ 'microsoft.apimanagement/service', 'API Management',\r\n\ttype =~ 'microsoft.web/certificates', 'App Certificates',\r\n\ttype =~ 'microsoft.appconfiguration/configurationstores', 'App Config Stores',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| extend Sku = case(\r\n\ttype =~ 'App Gateways', properties.sku.name, \r\n\ttype =~ 'Azure Functions', properties.sku,\r\n\ttype =~ 'API Management', sku.name,\r\n\ttype =~ 'App Service Plans', sku.name,\r\n\ttype =~ 'App Services', properties.sku,\r\n\ttype =~ 'App Config Stores', sku.name,\r\n\t' ')\r\n| extend State = case(\r\n\ttype =~ 'App Config Stores', properties.provisioningState,\r\n\ttype =~ 'App Service Plans', properties.status,\r\n\ttype =~ 'Azure Functions', properties.state,\r\n\ttype =~ 'App Services', properties.state,\r\n\ttype =~ 'API Management', properties.provisioningState,\r\n\ttype =~ 'App Gateways', properties.provisioningState,\r\n\ttype =~ 'Front Door', properties.provisioningState,\r\n\t' ')\r\n| mv-expand publicIpId = properties.frontendIPConfigurations\r\n| mv-expand publicIpId = publicIpId.properties.publicIPAddress.id\r\n| extend publicIpId = tostring(publicIpId)\r\n\t| join kind=leftouter(\r\n\t \tResources\r\n \t\t| where type =~ 'microsoft.network/publicipaddresses'\r\n \t\t| project publicIpId = id, publicIpAddress = tostring(properties.ipAddress)) on publicIpId\r\n| extend PublicIP = case(\r\n\ttype =~ 'API Management', properties.publicIPAddresses,\r\n\ttype =~ 'App Gateways', publicIpAddress,\r\n type =~ 'App Services', properties.inboundIpAddress,\r\n type =~ 'Azure Functions', properties.inboundIpAddress,\r\n\t' ')\r\n| extend Instances = case(\r\n\ttype =~ 'API Management', sku.capacity,\r\n type =~ 'App Services', properties.siteConfig.numberOfWorkers,\r\n type =~ 'Azure Functions', properties.siteConfig.numberOfWorkers,\r\n type =~ 'App Service Plans', properties.currentNumberOfWorkers,\r\n\t' ')\r\n| extend ServicePlan = case(\r\n type =~ 'App Services', properties.serverFarmId,\r\n type =~ 'Azure Functions', properties.serverFarmId,\r\n\t' ')\r\n| extend Details = pack_all()\r\n| project Resource=id, type, subscriptionId, Sku, State, PublicIP, Instances, ServicePlan, Details",
+ "size": 0,
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Apps Detailed"
+ }
+ ]
+ },
+ "name": "Group - App Services",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Data",
+ "expandable": true,
+ "expanded": true,
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.documentdb/databaseaccounts'\r\n\tor type =~ 'microsoft.sql/servers/databases'\r\n\tor type =~ 'microsoft.dbformysql/servers'\r\n\tor type =~ 'microsoft.sql/servers'\r\n or type =~ 'Microsoft.DBforPostgreSQL/servers'\r\n or type =~ 'Microsoft.DBforMariaDB/servers'\r\n or type =~ 'microsoft.dbforpostgresql/flexibleservers'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.documentdb/databaseaccounts', 'CosmosDB',\r\n\ttype =~ 'microsoft.sql/servers/databases', 'SQL DBs',\r\n\ttype =~ 'microsoft.dbformysql/servers', 'MySQL Servers',\r\n\ttype =~ 'microsoft.sql/servers', 'SQL Servers',\r\n type =~ 'Microsoft.DBforPostgreSQL/servers', 'PostgreSQL Servers',\r\n type =~ 'microsoft.dbforpostgresql/flexibleservers', 'PostgreSQL Flexi Servers',\r\n type =~ 'Microsoft.DBforMariaDB/servers', 'MariaDB Servers',\r\n\tstrcat(\"Not Translated: \", type))\r\n| where type !has \"Not Translated\"\r\n| summarize count() by type",
+ "size": 3,
+ "title": "Count of all resource types",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "tiles",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Data Overview"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// data\r\n// Click the \"Run query\" command above to execute the query and see results.\r\nresources \r\n| where type =~ 'microsoft.documentdb/databaseaccounts'\r\n\tor type =~ 'microsoft.sql/servers/databases'\r\n\tor type =~ 'microsoft.dbformysql/servers'\r\n\tor type =~ 'microsoft.sql/servers'\r\n or type =~ 'Microsoft.DBforPostgreSQL/servers'\r\n or type =~ 'Microsoft.DBforMariaDB/servers'\r\n or type =~ 'microsoft.dbforpostgresql/flexibleservers'\r\n| extend type = case(\r\n\ttype =~ 'microsoft.documentdb/databaseaccounts', 'CosmosDB',\r\n\ttype =~ 'microsoft.sql/servers/databases', 'SQL DBs',\r\n\ttype =~ 'microsoft.dbformysql/servers', 'MySQL Servers',\r\n\ttype =~ 'microsoft.sql/servers', 'SQL Servers',\r\n type =~ 'Microsoft.DBforPostgreSQL/servers', 'PostgreSQL Servers',\r\n type =~ 'microsoft.dbforpostgresql/flexibleservers', 'PostgreSQL Flexi Servers',\r\n type =~ 'Microsoft.DBforMariaDB/servers', 'MariaDB Servers',\r\n\tstrcat(\"Not Translated: \", type))\r\n| extend Sku = case(\r\n\ttype =~ 'CosmosDB', properties.databaseAccountOfferType,\r\n\ttype =~ 'SQL DBs', sku.name,\r\n\ttype =~ 'MySQL Servers', sku.name,\r\n type =~ 'PostgreSQL Servers', sku.name,\r\n type =~ 'PostgreSQL Flexi Servers', sku.name,\r\n type =~ 'MariaDB Servers', sku.name,\r\n\t' ')\r\n| extend Status = case(\r\n\ttype =~ 'CosmosDB', properties.provisioningState,\r\n\ttype =~ 'SQL DBs', properties.status,\r\n type =~ 'SQL Servers', properties.state,\r\n\ttype =~ 'MySQL Servers', properties.userVisibleState,\r\n type =~ 'PostgreSQL Servers', properties.state,\r\n type =~ 'PostgreSQL Flexi Servers', properties.state,\r\n type =~ 'MariaDB Servers', properties.userVisibleState,\r\n\t' ')\r\n| extend Endpoint = case(\r\n\ttype =~ 'MySQL Servers', properties.fullyQualifiedDomainName,\r\n\ttype =~ 'SQL Servers', properties.fullyQualifiedDomainName,\r\n\ttype =~ 'CosmosDB', properties.documentEndpoint,\r\n type =~ 'PostgreSQL Servers', properties.fullyQualifiedDomainName,\r\n type =~ 'PostgreSQL Flexi Servers', properties.fullyQualifiedDomainName,\r\n type =~ 'MariaDB Servers', properties.fullyQualifiedDomainName,\r\n\t' ')\r\n| extend PublicNetworkAccess = case(\r\n\ttype =~ 'MySQL Servers', properties.publicNetworkAccess,\r\n\ttype =~ 'SQL Servers', properties.publicNetworkAccess,\r\n type =~ 'PostgreSQL Servers', properties.publicNetworkAccess,\r\n type =~ 'PostgreSQL Flexi Servers', properties.publicNetworkAccess,\r\n type =~ 'MariaDB Servers', properties.publicNetworkAccess,\r\n\t' ')\r\n| extend Version = case(\r\n\ttype =~ 'MySQL Servers', properties.version,\r\n\ttype =~ 'SQL Servers', properties.version,\r\n type =~ 'PostgreSQL Servers', properties.version,\r\n type =~ 'PostgreSQL Flexi Servers', properties.version,\r\n type =~ 'MariaDB Servers', properties.version,\r\n\t' ')\r\n| extend maxSizeGB = todouble(case(\r\n\ttype =~ 'SQL DBs', properties.maxSizeBytes,\r\n\ttype =~ 'MySQL Servers', properties.storageProfile.storageMB,\r\n type =~ 'PostgreSQL Servers', properties.storageProfile.storageMB,\r\n type =~ 'PostgreSQL Flexi Servers', properties.storageProfile.storageMB,\r\n type =~ 'MariaDB Servers', properties.storageProfile.storageMB,\r\n\t' '))\r\n| extend maxSizeGB = iif(type has 'SQL DBs', maxSizeGB /1000 /1000, maxSizeGB)\r\n| extend Details = pack_all()\r\n| project Resource=id, resourceGroup, subscriptionId, type, Sku, Status, Endpoint, Version, PublicNetworkAccess, maxSizeGB, Details\r\n\r\n",
+ "size": 0,
+ "title": "Details",
+ "noDataMessage": "No resources found",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Resource",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxSizeGB",
+ "formatter": 0,
+ "numberFormat": {
+ "unit": 4,
+ "options": {
+ "style": "decimal",
+ "useGrouping": false
+ }
+ }
+ },
+ {
+ "columnMatch": "Details",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "CellDetails",
+ "linkLabel": "π View details",
+ "linkIsContextBlade": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true,
+ "finalBy": "Resource"
+ }
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "type",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": true,
+ "sortCriteriaField": "type",
+ "sortOrderField": 1
+ }
+ },
+ "name": "query - PaaS - Data Detailed"
+ }
+ ]
+ },
+ "name": "Data",
+ "styleSettings": {
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_PaaS"
+ },
+ {
+ "parameterName": "Subscription",
+ "comparison": "isNotEqualTo"
+ }
+ ],
+ "name": "RC_PaaS"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Azure Advisor/AzureServiceRetirement",
+ "items": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RC_ServicesRetirement"
+ },
+ "name": "group - Service retirement"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "community-Workbooks/Common/noSubscriptions",
+ "items": []
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "Subscription",
+ "comparison": "isEqualTo",
+ "value": ""
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Quota"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_Age"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "RC_ServicesRetirement"
+ }
+ ],
+ "name": "No Subscriptions group"
+ }
+ ]
+ },
+ "name": "Azure Governance Workbook"
+ }
+ ],
+ "fallbackResourceIds": [
+ "azure monitor"
+ ],
+ "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
+ },
+ "version": "",
+ "workbookJson": "[string(variables('$fxv#0'))]",
+ "workbookId": "907",
+ "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
+ "finOpsToolkitVersion": "0.8",
+ "resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
+ },
+ "resources": [
+ {
+ "condition": "[parameters('enableDefaultTelemetry')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]",
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "FinOps toolkit",
+ "version": "[variables('finOpsToolkitVersion')]"
+ }
+ },
+ "resources": []
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Insights/workbooks",
+ "apiVersion": "2022-04-01",
+ "name": "[guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[variables('resourceTags')]",
+ "kind": "shared",
+ "properties": {
+ "category": "workbook",
+ "description": "[parameters('description')]",
+ "displayName": "[parameters('displayName')]",
+ "serializedData": "[variables('workbookJson')]",
+ "sourceId": "Azure Monitor",
+ "version": "[variables('version')]"
+ }
+ }
+ ],
+ "outputs": {
+ "workbookId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the workbook."
+ },
+ "value": "[resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))]"
+ },
+ "workbookUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "Link to the workbook in the Azure portal."
+ },
+ "value": "[format('{0}/#view/AppInsightsExtension/UsageNotebookBlade/ComponentId/Azure%20Monitor/ConfigurationId/{1}/Type/{2}/WorkbookTemplateName/{3}', environment().portal, uriComponent(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))), reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').category, uriComponent(reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').displayName))]"
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/deploy/governance-workbook-0.8.ui.json b/docs/deploy/governance-workbook-0.8.ui.json
new file mode 100644
index 000000000..6646035df
--- /dev/null
+++ b/docs/deploy/governance-workbook-0.8.ui.json
@@ -0,0 +1,52 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
+ "handler": "Microsoft.Azure.CreateUIDef",
+ "version": "0.1.2-preview",
+ "parameters": {
+ "config": {
+ "basics": {
+ "description": "The Governance workbook provides an overview of the cost posture of your Azure environment. [Learn more](https://aka.ms/finops/toolkit)",
+ "location": {
+ "label": "Location",
+ "resourceTypes": ["Microsoft.Insights/workbooks"]
+ }
+ }
+ },
+ "resourceTypes": ["Microsoft.Insights/workbooks"],
+ "basics": [
+ {
+ "name": "displayName",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Name",
+ "defaultValue": "Governance",
+ "toolTip": "Name of the workbook.",
+ "constraints": {
+ "required": true,
+ "regex": "^.{1,250}$",
+ "validationMessage": "Name cannot be longer than 250 characters."
+ },
+ "visible": true
+ }
+ ],
+ "steps": [
+ {
+ "name": "tags",
+ "label": "Tags",
+ "elements": [
+ {
+ "name": "tagsByResource",
+ "label": "Tags",
+ "toolTip": "Tags to apply.",
+ "type": "Microsoft.Common.TagsByResource",
+ "resources": ["Microsoft.Insights/workbooks"]
+ }
+ ]
+ }
+ ],
+ "outputs": {
+ "displayName": "[basics('displayName')]",
+ "location": "[location()]",
+ "tags": "[steps('tags').tagsByResource]"
+ }
+ }
+}
diff --git a/docs/deploy/governance-workbook-latest.json b/docs/deploy/governance-workbook-latest.json
index 1fb3f2995..b02d65cc5 100644
--- a/docs/deploy/governance-workbook-latest.json
+++ b/docs/deploy/governance-workbook-latest.json
@@ -4,8 +4,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "2416775183167475351"
+ "version": "0.33.93.31351",
+ "templateHash": "10054098441393474777"
}
},
"parameters": {
@@ -8178,7 +8178,7 @@
"workbookJson": "[string(variables('$fxv#0'))]",
"workbookId": "907",
"telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
- "finOpsToolkitVersion": "0.7",
+ "finOpsToolkitVersion": "0.8",
"resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
},
"resources": [
diff --git a/docs/deploy/optimization-engine/0.8/azuredeploy-nested.bicep b/docs/deploy/optimization-engine/0.8/azuredeploy-nested.bicep
new file mode 100644
index 000000000..8267b138f
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/azuredeploy-nested.bicep
@@ -0,0 +1,2158 @@
+param projectLocation string
+param templateLocation string
+
+param storageAccountName string
+param automationAccountName string
+param sqlServerName string
+param sqlServerAlreadyExists bool
+param sqlDatabaseName string
+param logAnalyticsReuse bool
+param logAnalyticsWorkspaceName string
+param logAnalyticsWorkspaceRG string
+param logAnalyticsRetentionDays int
+param sqlBackupRetentionDays int
+param userObjectId string
+param userPrincipalName string
+param sqlAdminPrincipalType string
+
+param cloudEnvironment string
+param authenticationOption string
+param baseTime string
+param resourceTags object
+param contributorRoleAssignmentGuid string
+
+param argDiskExportJobId string = newGuid()
+param argVhdExportJobId string = newGuid()
+param argVmExportJobId string = newGuid()
+param argVmssExportJobId string = newGuid()
+param argAvailSetExportJobId string = newGuid()
+param advisorExportJobId string = newGuid()
+param consumptionExportJobId string = newGuid()
+param aadObjectsExportJobId string = newGuid()
+param argLoadBalancersExportJobId string = newGuid()
+param argAppGWsExportJobId string = newGuid()
+param rbacExportJobId string = newGuid()
+param argResContainersExportJobId string = newGuid()
+param argNICExportJobId string = newGuid()
+param argNSGExportJobId string = newGuid()
+param argPublicIPExportJobId string = newGuid()
+param argVNetExportJobId string = newGuid()
+param argSqlDbExportJobId string = newGuid()
+param policyStateExportJobId string = newGuid()
+param monitorVmssCpuMaxExportJobId string = newGuid()
+param monitorVmssCpuAvgExportJobId string = newGuid()
+param monitorVmssMemoryMinExportJobId string = newGuid()
+param monitorSqlDbDtuMaxExportJobId string = newGuid()
+param monitorSqlDbDtuAvgExportJobId string = newGuid()
+param monitorAppServiceCpuMaxExportJobId string = newGuid()
+param monitorAppServiceCpuAvgExportJobId string = newGuid()
+param monitorAppServiceMemoryMaxExportJobId string = newGuid()
+param monitorAppServiceMemoryAvgExportJobId string = newGuid()
+param monitorDiskIOPSAvgExportJobId string = newGuid()
+param monitorDiskMBPsAvgExportJobId string = newGuid()
+param argAppServicePlanExportJobId string = newGuid()
+param pricesheetExportJobId string = newGuid()
+param reservationPricesExportJobId string = newGuid()
+param reservationUsageExportJobId string = newGuid()
+param savingsPlansUsageExportJobId string = newGuid()
+param argDiskIngestJobId string = newGuid()
+param argVhdIngestJobId string = newGuid()
+param argVmIngestJobId string = newGuid()
+param argVmssIngestJobId string = newGuid()
+param argAvailSetIngestJobId string = newGuid()
+param advisorIngestJobId string = newGuid()
+param remediationLogsIngestJobId string = newGuid()
+param consumptionIngestJobId string = newGuid()
+param aadObjectsIngestJobId string = newGuid()
+param argLoadBalancersIngestJobId string = newGuid()
+param argAppGWsIngestJobId string = newGuid()
+param argResContainersIngestJobId string = newGuid()
+param rbacIngestJobId string = newGuid()
+param argNICIngestJobId string = newGuid()
+param argNSGIngestJobId string = newGuid()
+param argPublicIPIngestJobId string = newGuid()
+param argVNetIngestJobId string = newGuid()
+param argSqlDbIngestJobId string = newGuid()
+param policyStateIngestJobId string = newGuid()
+param monitorIngestJobId string = newGuid()
+param argAppServicePlanIngestJobId string = newGuid()
+param pricesheetIngestJobId string = newGuid()
+param reservationPricesIngestJobId string = newGuid()
+param reservationUsageIngestJobId string = newGuid()
+param savingsPlansUsageIngestJobId string = newGuid()
+param unattachedDisksRecommendationJobId string = newGuid()
+param advisorCostAugmentedRecommendationJobId string = newGuid()
+param advisorAsIsRecommendationJobId string = newGuid()
+param vmsHaRecommendationJobId string = newGuid()
+param vmOptimizationsRecommendationJobId string = newGuid()
+param aadExpiringCredsRecommendationJobId string = newGuid()
+param unusedLoadBalancersRecommendationJobId string = newGuid()
+param unusedAppGWsRecommendationJobId string = newGuid()
+param armOptimizationsRecommendationJobId string = newGuid()
+param vnetOptimizationsRecommendationJobId string = newGuid()
+param vmssOptimizationsRecommendationJobId string = newGuid()
+param sqldbOptimizationsRecommendationJobId string = newGuid()
+param storageOptimizationsRecommendationJobId string = newGuid()
+param appServiceOptimizationsRecommendationJobId string = newGuid()
+param diskOptimizationsRecommendationJobId string = newGuid()
+param recommendationsIngestJobId string = newGuid()
+param recommendationsLogAnalyticsIngestJobId string = newGuid()
+param suppressionsLogAnalyticsIngestJobId string = newGuid()
+param recommendationsCleanUpJobId string = newGuid()
+
+param roleContributor string = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/ba92f5b4-2d11-453d-a403-e96b0029c9fe'
+
+@description('Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases.')
+param enableDefaultTelemetry bool = true
+
+var telemetryId = '00f120b5-2007-6120-0000-000000000a0e'
+var finOpsToolkitVersion = loadTextContent('ftkver.txt')
+var advisorExportsRunbookName = 'Export-AdvisorRecommendationsToBlobStorage'
+var argVmExportsRunbookName = 'Export-ARGVirtualMachinesPropertiesToBlobStorage'
+var argVmssExportsRunbookName = 'Export-ARGVMSSPropertiesToBlobStorage'
+var argDisksExportsRunbookName = 'Export-ARGManagedDisksPropertiesToBlobStorage'
+var argVhdExportsRunbookName = 'Export-ARGUnmanagedDisksPropertiesToBlobStorage'
+var argAvailSetExportsRunbookName = 'Export-ARGAvailabilitySetPropertiesToBlobStorage'
+var consumptionExportsRunbookName = 'Export-ConsumptionToBlobStorage'
+var aadObjectsExportsRunbookName = 'Export-AADObjectsToBlobStorage'
+var argLoadBalancersExportsRunbookName = 'Export-ARGLoadBalancerPropertiesToBlobStorage'
+var argAppGWsExportsRunbookName = 'Export-ARGAppGatewayPropertiesToBlobStorage'
+var argResContainersExportsRunbookName = 'Export-ARGResourceContainersPropertiesToBlobStorage'
+var rbacExportsRunbookName = 'Export-RBACAssignmentsToBlobStorage'
+var argNICExportsRunbookName = 'Export-ARGNICPropertiesToBlobStorage'
+var argNSGExportsRunbookName = 'Export-ARGNSGPropertiesToBlobStorage'
+var argVNetExportsRunbookName = 'Export-ARGVNetPropertiesToBlobStorage'
+var argPublicIpExportsRunbookName = 'Export-ARGPublicIpPropertiesToBlobStorage'
+var argSqlDbExportsRunbookName = 'Export-ARGSqlDatabasePropertiesToBlobStorage'
+var policyStateExportsRunbookName = 'Export-PolicyComplianceToBlobStorage'
+var monitorExportsRunbookName = 'Export-AzMonitorMetricsToBlobStorage'
+var argAppServicePlanExportsRunbookName = 'Export-ARGAppServicePlanPropertiesToBlobStorage'
+var reservationsExportsRunbookName = 'Export-ReservationsUsageToBlobStorage'
+var reservationsPriceExportsRunbookName = 'Export-ReservationsPriceToBlobStorage'
+var priceSheetExportsRunbookName = 'Export-PriceSheetToBlobStorage'
+var savingsPlansExportsRunbookName = 'Export-SavingsPlansUsageToBlobStorage'
+var advisorExportsScheduleName = 'AzureOptimization_ExportAdvisorWeekly'
+var argExportsScheduleName = 'AzureOptimization_ExportARGDaily'
+var consumptionExportsScheduleName = 'AzureOptimization_ExportConsumptionDaily'
+var aadObjectsExportsScheduleName = 'AzureOptimization_ExportAADObjectsDaily'
+var rbacExportsScheduleName = 'AzureOptimization_ExportRBACDaily'
+var policyStateExportsScheduleName = 'AzureOptimization_ExportPolicyStateDaily'
+var monitorVmssCpuMaxExportsScheduleName = 'AzureOptimization_ExportMonitorVmssCpuMaxHourly'
+var monitorVmssCpuAvgExportsScheduleName = 'AzureOptimization_ExportMonitorVmssCpuAvgHourly'
+var monitorVmssMemoryMinExportsScheduleName = 'AzureOptimization_ExportMonitorVmssMemoryMinHourly'
+var monitorSqlDbDtuMaxExportsScheduleName = 'AzureOptimization_ExportMonitorSqlDbDtuMaxHourly'
+var monitorSqlDbDtuAvgExportsScheduleName = 'AzureOptimization_ExportMonitorSqlDbDtuAvgHourly'
+var monitorAppServiceCpuMaxExportsScheduleName = 'AzureOptimization_ExportMonitorAppServiceCpuMaxHourly'
+var monitorAppServiceCpuAvgExportsScheduleName = 'AzureOptimization_ExportMonitorAppServiceCpuAvgHourly'
+var monitorAppServiceMemoryMaxExportsScheduleName = 'AzureOptimization_ExportMonitorAppServiceMemoryMaxHourly'
+var monitorAppServiceMemoryAvgExportsScheduleName = 'AzureOptimization_ExportMonitorAppServiceMemoryAvgHourly'
+var monitorDiskIOPSAvgExportsScheduleName = 'AzureOptimization_ExportMonitorDiskIOPSHourly'
+var monitorDiskMBPsAvgExportsScheduleName = 'AzureOptimization_ExportMonitorDiskMBPsHourly'
+var priceExportsScheduleName = 'AzureOptimization_ExportPricesWeekly'
+var reservationsUsageExportsScheduleName = 'AzureOptimization_ExportReservationsDaily'
+var savingsPlansUsageExportsScheduleName = 'AzureOptimization_ExportSavingsPlansDaily'
+var csvExportsSchedules = [
+ {
+ exportSchedule: argExportsScheduleName
+ exportDescription: 'Daily Azure Resource Graph exports'
+ exportTimeOffset: 'PT1H05M'
+ exportFrequency: 'Day'
+ }
+ {
+ exportSchedule: advisorExportsScheduleName
+ exportDescription: 'Weekly Azure Advisor exports'
+ exportTimeOffset: 'PT1H15M'
+ exportFrequency: 'Week'
+ }
+ {
+ exportSchedule: consumptionExportsScheduleName
+ exportDescription: 'Daily Azure Consumption exports'
+ exportTimeOffset: 'PT1H'
+ exportFrequency: 'Day'
+ }
+ {
+ exportSchedule: aadObjectsExportsScheduleName
+ exportDescription: 'Daily Microsoft Entra Objects exports'
+ exportTimeOffset: 'PT1H'
+ exportFrequency: 'Day'
+ }
+ {
+ exportSchedule: rbacExportsScheduleName
+ exportDescription: 'Daily Azure RBAC exports'
+ exportTimeOffset: 'PT1H02M'
+ exportFrequency: 'Day'
+ }
+ {
+ exportSchedule: policyStateExportsScheduleName
+ exportDescription: 'Daily Azure Policy State exports'
+ exportTimeOffset: 'PT1H'
+ exportFrequency: 'Day'
+ }
+ {
+ exportSchedule: monitorVmssCpuAvgExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for VMSS Percentage CPU (Avg.)'
+ exportTimeOffset: 'PT1H15M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorVmssCpuMaxExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for VMSS Percentage CPU (Max.)'
+ exportTimeOffset: 'PT1H15M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorVmssMemoryMinExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for VMSS Available Memory (Min.)'
+ exportTimeOffset: 'PT1H15M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorSqlDbDtuMaxExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for SQL Database Percentage DTU (Max.)'
+ exportTimeOffset: 'PT1H15M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorSqlDbDtuAvgExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for SQL Database Percentage DTU (Avg.)'
+ exportTimeOffset: 'PT1H16M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorAppServiceCpuAvgExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for App Service Percentage CPU (Avg.)'
+ exportTimeOffset: 'PT1H16M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorAppServiceCpuMaxExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for App Service Percentage CPU (Max.)'
+ exportTimeOffset: 'PT1H16M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorAppServiceMemoryAvgExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for App Service Percentage RAM (Avg.)'
+ exportTimeOffset: 'PT1H16M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorAppServiceMemoryMaxExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for App Service Percentage RAM (Max.)'
+ exportTimeOffset: 'PT1H17M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorDiskIOPSAvgExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for Disk IOPS (Avg.)'
+ exportTimeOffset: 'PT1H17M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: monitorDiskMBPsAvgExportsScheduleName
+ exportDescription: 'Hourly Azure Monitor metrics exports for Disk MBPs (Avg.)'
+ exportTimeOffset: 'PT1H17M'
+ exportFrequency: 'Hour'
+ }
+ {
+ exportSchedule: priceExportsScheduleName
+ exportDescription: 'Weekly Pricesheet and Reservation Prices exports'
+ exportTimeOffset: 'PT1H35M'
+ exportFrequency: 'Week'
+ }
+ {
+ exportSchedule: reservationsUsageExportsScheduleName
+ exportDescription: 'Daily Reservation Usage exports'
+ exportTimeOffset: 'PT2H'
+ exportFrequency: 'Day'
+ }
+ {
+ exportSchedule: savingsPlansUsageExportsScheduleName
+ exportDescription: 'Daily Savings Plans Usage exports'
+ exportTimeOffset: 'PT2H05M'
+ exportFrequency: 'Day'
+ }
+]
+var csvExports = [
+ {
+ runbookName: advisorExportsRunbookName
+ isOneToMany: false
+ containerName: 'advisorexports'
+ variableName: 'AzureOptimization_AdvisorContainer'
+ variableDescription: 'The Storage Account container where Azure Advisor exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestAdvisorWeekly'
+ ingestDescription: 'Weekly Azure Advisor recommendations ingests'
+ ingestTimeOffset: 'PT1H45M'
+ ingestFrequency: 'Week'
+ ingestJobId: advisorIngestJobId
+ exportSchedule: advisorExportsScheduleName
+ exportJobId: advisorExportJobId
+ }
+ {
+ runbookName: argVmExportsRunbookName
+ isOneToMany: false
+ containerName: 'argvmexports'
+ variableName: 'AzureOptimization_ARGVMContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Virtual Machine exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGVMsDaily'
+ ingestDescription: 'Daily Azure Resource Graph Virtual Machines ingests'
+ ingestTimeOffset: 'PT1H30M'
+ ingestFrequency: 'Day'
+ ingestJobId: argVmIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argVmExportJobId
+ }
+ {
+ runbookName: argVmssExportsRunbookName
+ isOneToMany: false
+ containerName: 'argvmssexports'
+ variableName: 'AzureOptimization_ARGVMSSContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph VMSS exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGVMSSDaily'
+ ingestDescription: 'Daily Azure Resource Graph VMSS ingests'
+ ingestTimeOffset: 'PT1H30M'
+ ingestFrequency: 'Day'
+ ingestJobId: argVmssIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argVmssExportJobId
+ }
+ {
+ runbookName: argDisksExportsRunbookName
+ isOneToMany: false
+ containerName: 'argdiskexports'
+ variableName: 'AzureOptimization_ARGDiskContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Managed Disks exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGDisksDaily'
+ ingestDescription: 'Daily Azure Resource Graph Managed Disks ingests'
+ ingestTimeOffset: 'PT1H30M'
+ ingestFrequency: 'Day'
+ ingestJobId: argDiskIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argDiskExportJobId
+ }
+ {
+ runbookName: argVhdExportsRunbookName
+ isOneToMany: false
+ containerName: 'argvhdexports'
+ variableName: 'AzureOptimization_ARGVhdContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Unmanaged Disks exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGVHDsDaily'
+ ingestDescription: 'Daily Azure Resource Graph Unmanaged Disks ingests'
+ ingestTimeOffset: 'PT1H30M'
+ ingestFrequency: 'Day'
+ ingestJobId: argVhdIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argVhdExportJobId
+ }
+ {
+ runbookName: argAvailSetExportsRunbookName
+ isOneToMany: false
+ containerName: 'argavailsetexports'
+ variableName: 'AzureOptimization_ARGAvailabilitySetContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Availability Set exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGAvailSetsDaily'
+ ingestDescription: 'Daily Azure Resource Graph Availability Sets ingests'
+ ingestTimeOffset: 'PT1H31M'
+ ingestFrequency: 'Day'
+ ingestJobId: argAvailSetIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argAvailSetExportJobId
+ }
+ {
+ runbookName: consumptionExportsRunbookName
+ isOneToMany: false
+ containerName: 'consumptionexports'
+ variableName: 'AzureOptimization_ConsumptionContainer'
+ variableDescription: 'The Storage Account container where Azure Consumption exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestConsumptionDaily'
+ ingestDescription: 'Daily Azure Consumption ingests'
+ ingestTimeOffset: 'PT2H'
+ ingestFrequency: 'Day'
+ ingestJobId: consumptionIngestJobId
+ exportSchedule: consumptionExportsScheduleName
+ exportJobId: consumptionExportJobId
+ }
+ {
+ runbookName: aadObjectsExportsRunbookName
+ isOneToMany: false
+ containerName: 'aadobjectsexports'
+ variableName: 'AzureOptimization_AADObjectsContainer'
+ variableDescription: 'The Storage Account container where Microsoft Entra Objects exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestAADObjectsDaily'
+ ingestDescription: 'Daily Microsoft Entra Objects ingests'
+ ingestTimeOffset: 'PT2H'
+ ingestFrequency: 'Day'
+ ingestJobId: aadObjectsIngestJobId
+ exportSchedule: aadObjectsExportsScheduleName
+ exportJobId: aadObjectsExportJobId
+ }
+ {
+ runbookName: argLoadBalancersExportsRunbookName
+ isOneToMany: false
+ containerName: 'arglbexports'
+ variableName: 'AzureOptimization_ARGLoadBalancerContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Load Balancer exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGLoadBalancersDaily'
+ ingestDescription: 'Daily Azure Resource Graph Load Balancers ingests'
+ ingestTimeOffset: 'PT1H31M'
+ ingestFrequency: 'Day'
+ ingestJobId: argLoadBalancersIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argLoadBalancersExportJobId
+ }
+ {
+ runbookName: argAppGWsExportsRunbookName
+ isOneToMany: false
+ containerName: 'argappgwexports'
+ variableName: 'AzureOptimization_ARGAppGatewayContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Application Gateway exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGAppGWsDaily'
+ ingestDescription: 'Daily Azure Resource Graph Application Gateways ingests'
+ ingestTimeOffset: 'PT1H31M'
+ ingestFrequency: 'Day'
+ ingestJobId: argAppGWsIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argAppGWsExportJobId
+ }
+ {
+ runbookName: argResContainersExportsRunbookName
+ isOneToMany: false
+ containerName: 'argrescontainersexports'
+ variableName: 'AzureOptimization_ARGResourceContainersContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Resource Containers exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGResourceContainersDaily'
+ ingestDescription: 'Daily Azure Resource Graph Resource Containers ingests'
+ ingestTimeOffset: 'PT1H32M'
+ ingestFrequency: 'Day'
+ ingestJobId: argResContainersIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argResContainersExportJobId
+ }
+ {
+ runbookName: rbacExportsRunbookName
+ isOneToMany: false
+ containerName: 'rbacexports'
+ variableName: 'AzureOptimization_RBACAssignmentsContainer'
+ variableDescription: 'The Storage Account container where RBAC Assignments exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestRBACDaily'
+ ingestDescription: 'Daily Azure RBAC ingests'
+ ingestTimeOffset: 'PT1H32M'
+ ingestFrequency: 'Day'
+ ingestJobId: rbacIngestJobId
+ exportSchedule: rbacExportsScheduleName
+ exportJobId: rbacExportJobId
+ }
+ {
+ runbookName: argNICExportsRunbookName
+ isOneToMany: false
+ containerName: 'argnicexports'
+ variableName: 'AzureOptimization_ARGNICContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph NIC exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGNICsDaily'
+ ingestDescription: 'Daily Azure Resource Graph NIC ingests'
+ ingestTimeOffset: 'PT1H32M'
+ ingestFrequency: 'Day'
+ ingestJobId: argNICIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argNICExportJobId
+ }
+ {
+ runbookName: argNSGExportsRunbookName
+ isOneToMany: false
+ containerName: 'argnsgexports'
+ variableName: 'AzureOptimization_ARGNSGContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph NSG exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGNSGsDaily'
+ ingestDescription: 'Daily Azure Resource Graph NSG ingests'
+ ingestTimeOffset: 'PT1H32M'
+ ingestFrequency: 'Day'
+ ingestJobId: argNSGIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argNSGExportJobId
+ }
+ {
+ runbookName: argVNetExportsRunbookName
+ isOneToMany: false
+ containerName: 'argvnetexports'
+ variableName: 'AzureOptimization_ARGVNetContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph VNet exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGVNetsDaily'
+ ingestDescription: 'Daily Azure Resource Graph Virtual Network ingests'
+ ingestTimeOffset: 'PT1H33M'
+ ingestFrequency: 'Day'
+ ingestJobId: argVNetIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argVNetExportJobId
+ }
+ {
+ runbookName: argPublicIpExportsRunbookName
+ isOneToMany: false
+ containerName: 'argpublicipexports'
+ variableName: 'AzureOptimization_ARGPublicIpContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph Public IP exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGPublicIPsDaily'
+ ingestDescription: 'Daily Azure Resource Graph Public IP ingests'
+ ingestTimeOffset: 'PT1H33M'
+ ingestFrequency: 'Day'
+ ingestJobId: argPublicIPIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argPublicIPExportJobId
+ }
+ {
+ runbookName: argSqlDbExportsRunbookName
+ isOneToMany: false
+ containerName: 'argsqldbexports'
+ variableName: 'AzureOptimization_ARGSqlDatabaseContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph SQL DB exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGSqlDbDaily'
+ ingestDescription: 'Daily Azure Resource Graph SQL DB ingests'
+ ingestTimeOffset: 'PT1H33M'
+ ingestFrequency: 'Day'
+ ingestJobId: argSqlDbIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argSqlDbExportJobId
+ }
+ {
+ runbookName: policyStateExportsRunbookName
+ isOneToMany: false
+ containerName: 'policystateexports'
+ variableName: 'AzureOptimization_PolicyStatesContainer'
+ variableDescription: 'The Storage Account container where Azure Policy State exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestPolicyStateDaily'
+ ingestDescription: 'Daily Azure Policy State ingests'
+ ingestTimeOffset: 'PT1H33M'
+ ingestFrequency: 'Day'
+ ingestJobId: policyStateIngestJobId
+ exportSchedule: policyStateExportsScheduleName
+ exportJobId: policyStateExportJobId
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ isOneToMany: true
+ containerName: 'azmonitorexports'
+ variableName: 'AzureOptimization_AzMonitorContainer'
+ variableDescription: 'The Storage Account container where Azure Monitor metrics exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestAzMonitorMetricsHourly'
+ ingestDescription: 'Hourly Azure Monitor metrics ingests'
+ ingestTimeOffset: 'PT2H'
+ ingestFrequency: 'Hour'
+ ingestJobId: monitorIngestJobId
+ exportSchedule: null
+ exportJobId: 'dummy'
+ }
+ {
+ runbookName: argAppServicePlanExportsRunbookName
+ isOneToMany: false
+ containerName: 'argappserviceplanexports'
+ variableName: 'AzureOptimization_ARGAppServicePlanContainer'
+ variableDescription: 'The Storage Account container where Azure Resource Graph App Service Plan exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestARGAppServicePlanDaily'
+ ingestDescription: 'Daily Azure Resource Graph App Service Plan ingests'
+ ingestTimeOffset: 'PT1H34M'
+ ingestFrequency: 'Day'
+ ingestJobId: argAppServicePlanIngestJobId
+ exportSchedule: argExportsScheduleName
+ exportJobId: argAppServicePlanExportJobId
+ }
+ {
+ runbookName: priceSheetExportsRunbookName
+ isOneToMany: false
+ containerName: 'pricesheetexports'
+ variableName: 'AzureOptimization_PriceSheetContainer'
+ variableDescription: 'The Storage Account container where Pricesheet exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestPricesheetWeekly'
+ ingestDescription: 'Weekly Pricesheet ingests'
+ ingestTimeOffset: 'PT2H'
+ ingestFrequency: 'Week'
+ ingestJobId: pricesheetIngestJobId
+ exportSchedule: priceExportsScheduleName
+ exportJobId: pricesheetExportJobId
+ }
+ {
+ runbookName: reservationsPriceExportsRunbookName
+ isOneToMany: false
+ containerName: 'reservationspriceexports'
+ variableName: 'AzureOptimization_ReservationsPriceContainer'
+ variableDescription: 'The Storage Account container where Reservations Prices exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestReservationsPriceWeekly'
+ ingestDescription: 'Weekly Reservations Prices ingests'
+ ingestTimeOffset: 'PT2H'
+ ingestFrequency: 'Week'
+ ingestJobId: reservationPricesIngestJobId
+ exportSchedule: priceExportsScheduleName
+ exportJobId: reservationPricesExportJobId
+ }
+ {
+ runbookName: reservationsExportsRunbookName
+ isOneToMany: false
+ containerName: 'reservationsexports'
+ variableName: 'AzureOptimization_ReservationsContainer'
+ variableDescription: 'The Storage Account container where Reservations Usage exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestReservationsUsageDaily'
+ ingestDescription: 'Daily Reservations Usage ingests'
+ ingestTimeOffset: 'PT2H30M'
+ ingestFrequency: 'Day'
+ ingestJobId: reservationUsageIngestJobId
+ exportSchedule: reservationsUsageExportsScheduleName
+ exportJobId: reservationUsageExportJobId
+ }
+ {
+ runbookName: savingsPlansExportsRunbookName
+ isOneToMany: false
+ containerName: 'savingsplansexports'
+ variableName: 'AzureOptimization_SavingsPlansContainer'
+ variableDescription: 'The Storage Account container where Savings Plans Usage exports are dumped to'
+ ingestSchedule: 'AzureOptimization_IngestSavingsPlansUsageDaily'
+ ingestDescription: 'Daily Savings Plans Usage ingests'
+ ingestTimeOffset: 'PT2H35M'
+ ingestFrequency: 'Day'
+ ingestJobId: savingsPlansUsageIngestJobId
+ exportSchedule: savingsPlansUsageExportsScheduleName
+ exportJobId: savingsPlansUsageExportJobId
+ }
+]
+var csvParameterizedExports = [
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorVmssCpuMaxExportsScheduleName
+ exportJobId: monitorVmssCpuMaxExportJobId
+ parameters: {
+ ResourceType: 'microsoft.compute/virtualmachinescalesets'
+ TimeSpan: '01:00:00'
+ aggregationType: 'Maximum'
+ MetricNames: 'Percentage CPU'
+ TimeGrain: '01:00:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorVmssCpuAvgExportsScheduleName
+ exportJobId: monitorVmssCpuAvgExportJobId
+ parameters: {
+ ResourceType: 'microsoft.compute/virtualmachinescalesets'
+ TimeSpan: '01:00:00'
+ aggregationType: 'Average'
+ MetricNames: 'Percentage CPU'
+ TimeGrain: '01:00:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorVmssMemoryMinExportsScheduleName
+ exportJobId: monitorVmssMemoryMinExportJobId
+ parameters: {
+ ResourceType: 'microsoft.compute/virtualmachinescalesets'
+ TimeSpan: '01:00:00'
+ aggregationType: 'Minimum'
+ MetricNames: 'Available Memory Bytes'
+ TimeGrain: '01:00:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorSqlDbDtuMaxExportsScheduleName
+ exportJobId: monitorSqlDbDtuMaxExportJobId
+ parameters: {
+ ResourceType: 'microsoft.sql/servers/databases'
+ ARGFilter: 'sku.tier in (\'Standard\',\'Premium\')'
+ TimeSpan: '01:00:00'
+ aggregationType: 'Maximum'
+ MetricNames: 'dtu_consumption_percent'
+ TimeGrain: '01:00:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorSqlDbDtuAvgExportsScheduleName
+ exportJobId: monitorSqlDbDtuAvgExportJobId
+ parameters: {
+ ResourceType: 'microsoft.sql/servers/databases'
+ ARGFilter: 'sku.tier in (\'Standard\',\'Premium\')'
+ TimeSpan: '01:00:00'
+ aggregationType: 'Average'
+ AggregationOfType: 'Maximum'
+ MetricNames: 'dtu_consumption_percent'
+ TimeGrain: '00:01:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorAppServiceCpuMaxExportsScheduleName
+ exportJobId: monitorAppServiceCpuMaxExportJobId
+ parameters: {
+ ResourceType: 'microsoft.web/serverfarms'
+ ARGFilter: 'properties.computeMode == \'Dedicated\' and sku.tier != \'Free\''
+ TimeSpan: '01:00:00'
+ aggregationType: 'Maximum'
+ MetricNames: 'CpuPercentage'
+ TimeGrain: '01:00:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorAppServiceCpuAvgExportsScheduleName
+ exportJobId: monitorAppServiceCpuAvgExportJobId
+ parameters: {
+ ResourceType: 'microsoft.web/serverfarms'
+ ARGFilter: 'properties.computeMode == \'Dedicated\' and sku.tier != \'Free\''
+ TimeSpan: '01:00:00'
+ aggregationType: 'Average'
+ AggregationOfType: 'Maximum'
+ MetricNames: 'CpuPercentage'
+ TimeGrain: '00:01:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorAppServiceMemoryMaxExportsScheduleName
+ exportJobId: monitorAppServiceMemoryMaxExportJobId
+ parameters: {
+ ResourceType: 'microsoft.web/serverfarms'
+ ARGFilter: 'properties.computeMode == \'Dedicated\' and sku.tier != \'Free\''
+ TimeSpan: '01:00:00'
+ aggregationType: 'Maximum'
+ MetricNames: 'MemoryPercentage'
+ TimeGrain: '01:00:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorAppServiceMemoryAvgExportsScheduleName
+ exportJobId: monitorAppServiceMemoryAvgExportJobId
+ parameters: {
+ ResourceType: 'microsoft.web/serverfarms'
+ ARGFilter: 'properties.computeMode == \'Dedicated\' and sku.tier != \'Free\''
+ TimeSpan: '01:00:00'
+ aggregationType: 'Average'
+ AggregationOfType: 'Maximum'
+ MetricNames: 'MemoryPercentage'
+ TimeGrain: '00:01:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorDiskIOPSAvgExportsScheduleName
+ exportJobId: monitorDiskIOPSAvgExportJobId
+ parameters: {
+ ResourceType: 'microsoft.compute/disks'
+ ARGFilter: 'sku.name startswith \'Premium_\' and properties.diskState =~ \'Attached\''
+ TimeSpan: '01:00:00'
+ aggregationType: 'Average'
+ AggregationOfType: 'Maximum'
+ MetricNames: 'Composite Disk Read Operations/sec,Composite Disk Write Operations/sec'
+ TimeGrain: '00:01:00'
+ }
+ }
+ {
+ runbookName: monitorExportsRunbookName
+ exportSchedule: monitorDiskMBPsAvgExportsScheduleName
+ exportJobId: monitorDiskMBPsAvgExportJobId
+ parameters: {
+ ResourceType: 'microsoft.compute/disks'
+ ARGFilter: 'sku.name startswith \'Premium_\' and properties.diskState =~ \'Attached\''
+ TimeSpan: '01:00:00'
+ aggregationType: 'Average'
+ AggregationOfType: 'Maximum'
+ MetricNames: 'Composite Disk Read Bytes/sec,Composite Disk Write Bytes/sec'
+ TimeGrain: '00:01:00'
+ }
+ }
+]
+var unattachedDisksRecommendationsRunbookName = 'Recommend-UnattachedDisksToBlobStorage'
+var advisorCostAugmentedRecommendationsRunbookName = 'Recommend-AdvisorCostAugmentedToBlobStorage'
+var advisorAsIsRecommendationsRunbookName = 'Recommend-AdvisorAsIsToBlobStorage'
+var vmsHARecommendationsRunbookName = 'Recommend-VMsHighAvailabilityToBlobStorage'
+var vmOptimizationsRecommendationsRunbookName = 'Recommend-VMOptimizationsToBlobStorage'
+var aadExpiringCredsRecommendationsRunbookName = 'Recommend-AADExpiringCredentialsToBlobStorage'
+var unusedLBsRecommendationsRunbookName = 'Recommend-UnusedLoadBalancersToBlobStorage'
+var unusedAppGWsRecommendationsRunbookName = 'Recommend-UnusedAppGWsToBlobStorage'
+var armOptimizationsRecommendationsRunbookName = 'Recommend-ARMOptimizationsToBlobStorage'
+var vnetOptimizationsRecommendationsRunbookName = 'Recommend-VNetOptimizationsToBlobStorage'
+var vmssOptimizationsRecommendationsRunbookName = 'Recommend-VMSSOptimizationsToBlobStorage'
+var sqldbOptimizationsRecommendationsRunbookName = 'Recommend-SqlDbOptimizationsToBlobStorage'
+var storageOptimizationsRecommendationsRunbookName = 'Recommend-StorageAccountOptimizationsToBlobStorage'
+var appServiceOptimizationsRecommendationsRunbookName = 'Recommend-AppServiceOptimizationsToBlobStorage'
+var diskOptimizationsRecommendationsRunbookName = 'Recommend-DiskOptimizationsToBlobStorage'
+var cleanUpOlderRecommendationsRunbookName = 'CleanUp-OlderRecommendationsFromSqlServer'
+var recommendations = [
+ {
+ recommendationJobId: unattachedDisksRecommendationJobId
+ runbookName: unattachedDisksRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: advisorCostAugmentedRecommendationJobId
+ runbookName: advisorCostAugmentedRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: advisorAsIsRecommendationJobId
+ runbookName: advisorAsIsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: vmsHaRecommendationJobId
+ runbookName: vmsHARecommendationsRunbookName
+ }
+ {
+ recommendationJobId: vmOptimizationsRecommendationJobId
+ runbookName: vmOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: aadExpiringCredsRecommendationJobId
+ runbookName: aadExpiringCredsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: unusedLoadBalancersRecommendationJobId
+ runbookName: unusedLBsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: unusedAppGWsRecommendationJobId
+ runbookName: unusedAppGWsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: armOptimizationsRecommendationJobId
+ runbookName: armOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: vnetOptimizationsRecommendationJobId
+ runbookName: vnetOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: vmssOptimizationsRecommendationJobId
+ runbookName: vmssOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: sqldbOptimizationsRecommendationJobId
+ runbookName: sqldbOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: storageOptimizationsRecommendationJobId
+ runbookName: storageOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: appServiceOptimizationsRecommendationJobId
+ runbookName: appServiceOptimizationsRecommendationsRunbookName
+ }
+ {
+ recommendationJobId: diskOptimizationsRecommendationJobId
+ runbookName: diskOptimizationsRecommendationsRunbookName
+ }
+]
+var remediationLogsContainerName = 'remediationlogs'
+var recommendationsContainerName = 'recommendationsexports'
+var csvIngestRunbookName = 'Ingest-OptimizationCSVExportsToLogAnalytics'
+var recommendationsIngestRunbookName = 'Ingest-RecommendationsToSQLServer'
+var recommendationsLogAnalyticsIngestRunbookName = 'Ingest-RecommendationsToLogAnalytics'
+var suppressionsLogAnalyticsIngestRunbookName = 'Ingest-SuppressionsToLogAnalytics'
+var advisorRightSizeFilteredRemediationRunbookName = 'Remediate-AdvisorRightSizeFiltered'
+var longDeallocatedVMsFilteredRemediationRunbookName = 'Remediate-LongDeallocatedVMsFiltered'
+var unattachedDisksFilteredRemediationRunbookName = 'Remediate-UnattachedDisksFiltered'
+var remediationLogsIngestScheduleName = 'AzureOptimization_IngestRemediationLogsDaily'
+var recommendationsScheduleName = 'AzureOptimization_RecommendationsWeekly'
+var recommendationsIngestScheduleName = 'AzureOptimization_IngestRecommendationsWeekly'
+var suppressionsIngestScheduleName = 'AzureOptimization_IngestSuppressionsWeekly'
+var recommendationsCleanUpScheduleName = 'AzureOptimization_CleanUpRecommendationsWeekly'
+var Az_Accounts = {
+ name: 'Az.Accounts'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.Accounts/2.12.1'
+}
+var Microsoft_Graph_Authentication = {
+ name: 'Microsoft.Graph.Authentication'
+ url: 'https://www.powershellgallery.com/api/v2/package/Microsoft.Graph.Authentication/2.4.0'
+}
+var psModules = [
+ {
+ name: 'Az.Compute'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.Compute/5.7.0'
+ }
+ {
+ name: 'Az.OperationalInsights'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.OperationalInsights/3.2.0'
+ }
+ {
+ name: 'Az.ResourceGraph'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.ResourceGraph/0.13.0'
+ }
+ {
+ name: 'Az.Storage'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.Storage/5.5.0'
+ }
+ {
+ name: 'Az.Resources'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.Resources/6.6.0'
+ }
+ {
+ name: 'Az.Monitor'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.Monitor/4.4.1'
+ }
+ {
+ name: 'Az.PolicyInsights'
+ url: 'https://www.powershellgallery.com/api/v2/package/Az.PolicyInsights/1.6.0'
+ }
+ {
+ name: 'Microsoft.Graph.Users'
+ url: 'https://www.powershellgallery.com/api/v2/package/Microsoft.Graph.Users/2.4.0'
+ }
+ {
+ name: 'Microsoft.Graph.Groups'
+ url: 'https://www.powershellgallery.com/api/v2/package/Microsoft.Graph.Groups/2.4.0'
+ }
+ {
+ name: 'Microsoft.Graph.Applications'
+ url: 'https://www.powershellgallery.com/api/v2/package/Microsoft.Graph.Applications/2.4.0'
+ }
+ {
+ name: 'Microsoft.Graph.Identity.DirectoryManagement'
+ url: 'https://www.powershellgallery.com/api/v2/package/Microsoft.Graph.Identity.DirectoryManagement/2.4.0'
+ }
+]
+var runbooks = [
+ {
+ name: advisorExportsRunbookName
+ version: '1.4.3.0'
+ description: 'Exports Azure Advisor recommendations to Blob Storage using the Advisor API'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${advisorExportsRunbookName}.ps1')
+ }
+ {
+ name: argDisksExportsRunbookName
+ version: '1.3.5.0'
+ description: 'Exports Managed Disks properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argDisksExportsRunbookName}.ps1')
+ }
+ {
+ name: argVhdExportsRunbookName
+ version: '1.1.5.0'
+ description: 'Exports Unmanaged Disks (owned by a VM) properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVhdExportsRunbookName}.ps1')
+ }
+ {
+ name: argVmExportsRunbookName
+ version: '1.4.5.0'
+ description: 'Exports Virtual Machine properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVmExportsRunbookName}.ps1')
+ }
+ {
+ name: argVmssExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports VMSS properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVmssExportsRunbookName}.ps1')
+ }
+ {
+ name: argAvailSetExportsRunbookName
+ version: '1.1.5.0'
+ description: 'Exports Availability Set properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argAvailSetExportsRunbookName}.ps1')
+ }
+ {
+ name: consumptionExportsRunbookName
+ version: '2.1.1.0'
+ description: 'Exports Azure Consumption events to Blob Storage using Azure Consumption API'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${consumptionExportsRunbookName}.ps1')
+ }
+ {
+ name: aadObjectsExportsRunbookName
+ version: '1.3.1.0'
+ description: 'Exports Azure AAD Objects to Blob Storage using Azure ARM API'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${aadObjectsExportsRunbookName}.ps1')
+ }
+ {
+ name: argLoadBalancersExportsRunbookName
+ version: '1.1.5.0'
+ description: 'Exports Load Balancer properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argLoadBalancersExportsRunbookName}.ps1')
+ }
+ {
+ name: argAppGWsExportsRunbookName
+ version: '1.1.5.0'
+ description: 'Exports Application Gateway properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argAppGWsExportsRunbookName}.ps1')
+ }
+ {
+ name: argResContainersExportsRunbookName
+ version: '1.0.6.0'
+ description: 'Exports Resource Containers properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argResContainersExportsRunbookName}.ps1')
+ }
+ {
+ name: rbacExportsRunbookName
+ version: '1.1.1.0'
+ description: 'Exports RBAC assignments to Blob Storage using ARM and Microsoft Entra'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${rbacExportsRunbookName}.ps1')
+ }
+ {
+ name: argNICExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports NIC properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argNICExportsRunbookName}.ps1')
+ }
+ {
+ name: argNSGExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports NSG properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argNSGExportsRunbookName}.ps1')
+ }
+ {
+ name: argPublicIpExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports Public IP properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argPublicIpExportsRunbookName}.ps1')
+ }
+ {
+ name: argVNetExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports VNet properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argVNetExportsRunbookName}.ps1')
+ }
+ {
+ name: argSqlDbExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports SQL DB properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argSqlDbExportsRunbookName}.ps1')
+ }
+ {
+ name: policyStateExportsRunbookName
+ version: '1.0.4.0'
+ description: 'Exports Azure Policy State to Blob Storage'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${policyStateExportsRunbookName}.ps1')
+ }
+ {
+ name: monitorExportsRunbookName
+ version: '1.0.3.0'
+ description: 'Exports Azure Monitor metrics to Blob Storage'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${monitorExportsRunbookName}.ps1')
+ }
+ {
+ name: argAppServicePlanExportsRunbookName
+ version: '1.0.2.0'
+ description: 'Exports App Service Plan properties to Blob Storage using Azure Resource Graph'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${argAppServicePlanExportsRunbookName}.ps1')
+ }
+ {
+ name: reservationsExportsRunbookName
+ version: '1.1.3.0'
+ description: 'Exports Reservations Usage to Blob Storage using the EA or MCA APIs'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${reservationsExportsRunbookName}.ps1')
+ }
+ {
+ name: reservationsPriceExportsRunbookName
+ version: '1.0.2.0'
+ description: 'Exports Reservations Prices to Blob Storage using the Retail Prices API'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${reservationsPriceExportsRunbookName}.ps1')
+ }
+ {
+ name: priceSheetExportsRunbookName
+ version: '1.1.2.0'
+ description: 'Exports Price Sheet to Blob Storage using the EA or MCA APIs'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${priceSheetExportsRunbookName}.ps1')
+ }
+ {
+ name: savingsPlansExportsRunbookName
+ version: '1.0.2.0'
+ description: 'Exports Savings Plans Usage to Blob Storage using the EA or MCA APIs'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${savingsPlansExportsRunbookName}.ps1')
+ }
+ {
+ name: csvIngestRunbookName
+ version: '1.6.2.0'
+ description: 'Ingests CSV blobs as custom logs to Log Analytics'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/data-collection/${csvIngestRunbookName}.ps1')
+ }
+ {
+ name: unattachedDisksRecommendationsRunbookName
+ version: '2.5.1.0'
+ description: 'Generates unattached disks recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${unattachedDisksRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: advisorCostAugmentedRecommendationsRunbookName
+ version: '2.10.1.0'
+ description: 'Generates augmented Advisor Cost recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${advisorCostAugmentedRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: advisorAsIsRecommendationsRunbookName
+ version: '1.6.1.0'
+ description: 'Generates all types of Advisor recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${advisorAsIsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: vmsHARecommendationsRunbookName
+ version: '1.1.1.0'
+ description: 'Generates VMs High Availability recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${vmsHARecommendationsRunbookName}.ps1')
+ }
+ {
+ name: vmOptimizationsRecommendationsRunbookName
+ version: '1.1.1.0'
+ description: 'Generates VM optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${vmOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: aadExpiringCredsRecommendationsRunbookName
+ version: '1.2.1.0'
+ description: 'Generates AAD Objects with expiring credentials recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${aadExpiringCredsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: unusedLBsRecommendationsRunbookName
+ version: '1.3.1.0'
+ description: 'Generates unused Load Balancers recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${unusedLBsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: unusedAppGWsRecommendationsRunbookName
+ version: '1.3.1.0'
+ description: 'Generates unused Application Gateways recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${unusedAppGWsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: armOptimizationsRecommendationsRunbookName
+ version: '1.1.1.0'
+ description: 'Generates ARM optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${armOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: vnetOptimizationsRecommendationsRunbookName
+ version: '1.1.1.0'
+ description: 'Generates Virtual Network optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${vnetOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: vmssOptimizationsRecommendationsRunbookName
+ version: '1.2.1.0'
+ description: 'Generates VM Scale Set optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${vmssOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: sqldbOptimizationsRecommendationsRunbookName
+ version: '1.2.1.0'
+ description: 'Generates SQL DB optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${sqldbOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: storageOptimizationsRecommendationsRunbookName
+ version: '1.1.1.0'
+ description: 'Generates Storage Account optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${storageOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: appServiceOptimizationsRecommendationsRunbookName
+ version: '1.1.1.0'
+ description: 'Generates App Service optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${appServiceOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: diskOptimizationsRecommendationsRunbookName
+ version: '1.2.1.0'
+ description: 'Generates Disk optimizations recommendations'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${diskOptimizationsRecommendationsRunbookName}.ps1')
+ }
+ {
+ name: recommendationsIngestRunbookName
+ version: '1.7.1.0'
+ description: 'Ingests JSON-based recommendations into an Azure SQL Database'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${recommendationsIngestRunbookName}.ps1')
+ }
+ {
+ name: recommendationsLogAnalyticsIngestRunbookName
+ version: '1.1.1.0'
+ description: 'Ingests JSON-based recommendations into Log Analytics'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${recommendationsLogAnalyticsIngestRunbookName}.ps1')
+ }
+ {
+ name: suppressionsLogAnalyticsIngestRunbookName
+ version: '1.1.0.0'
+ description: 'Ingests suppressions into Log Analytics'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/recommendations/${suppressionsLogAnalyticsIngestRunbookName}.ps1')
+ }
+ {
+ name: advisorRightSizeFilteredRemediationRunbookName
+ version: '1.3.1.0'
+ description: 'Remediates Azure Advisor right-size recommendations given fit and tag filters'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/remediations/${advisorRightSizeFilteredRemediationRunbookName}.ps1')
+ }
+ {
+ name: longDeallocatedVMsFilteredRemediationRunbookName
+ version: '1.1.1.0'
+ description: 'Remediates long-deallocated VMs recommendations given fit and tag filters'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/remediations/${longDeallocatedVMsFilteredRemediationRunbookName}.ps1')
+ }
+ {
+ name: unattachedDisksFilteredRemediationRunbookName
+ version: '1.1.1.0'
+ description: 'Remediates unattached disks recommendations given fit and tag filters'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/remediations/${unattachedDisksFilteredRemediationRunbookName}.ps1')
+ }
+ {
+ name: cleanUpOlderRecommendationsRunbookName
+ version: '1.1.0.0'
+ description: 'Cleans up older recommendations from SQL Database'
+ type: 'PowerShell'
+ scriptUri: uri(templateLocation, 'runbooks/maintenance/${cleanUpOlderRecommendationsRunbookName}.ps1')
+ }
+]
+var automationVariables = [
+ {
+ name: 'AzureOptimization_CloudEnvironment'
+ description: 'Azure Cloud environment (e.g., AzureCloud, AzureChinaCloud, etc.)'
+ value: '"${cloudEnvironment}"'
+ }
+ {
+ name: 'AzureOptimization_AuthenticationOption'
+ description: 'Runbook authentication type (RunAsAccount or ManagedIdentity)'
+ value: '"${authenticationOption}"'
+ }
+ {
+ name: 'AzureOptimization_StorageSink'
+ description: 'The Azure Storage Account where data source exports are dumped to'
+ value: '"${storageAccountName}"'
+ }
+ {
+ name: 'AzureOptimization_ConsumptionOffsetDays'
+ description: 'The offset (in days) for querying for consumption data'
+ value: 3
+ }
+ {
+ name: 'AzureOptimization_AdvisorFilter'
+ description: 'The category filter to use for Azure Advisor (non-Cost) recommendations exports'
+ value: '"HighAvailability,Security,Performance,OperationalExcellence"'
+ }
+ {
+ name: 'AzureOptimization_ReferenceRegion'
+ description: 'The Azure region used as a reference for getting details about Azure VM sizes available'
+ value: '"${projectLocation}"'
+ }
+ {
+ name: 'AzureOptimization_SQLServerDatabase'
+ description: 'The Azure SQL Database name for the ingestion control and recommendations tables'
+ value: '"${sqlDatabaseName}"'
+ }
+ {
+ name: 'AzureOptimization_LogAnalyticsChunkSize'
+ description: 'The size (in rows) for each chunk of Log Analytics ingestion request'
+ value: 6000
+ }
+ {
+ name: 'AzureOptimization_StorageBlobsPageSize'
+ description: 'The size (in blobs count) for each page of Storage Account container blob listing'
+ value: 1000
+ }
+ {
+ name: 'AzureOptimization_SQLServerInsertSize'
+ description: 'The size (in inserted lines) for each page of recommendations ingestion into the SQL Database'
+ value: 900
+ }
+ {
+ name: 'AzureOptimization_LogAnalyticsLogPrefix'
+ description: 'The prefix for all Azure Optimization custom log tables in Log Analytics'
+ value: '"AzureOptimization"'
+ }
+ {
+ name: 'AzureOptimization_LogAnalyticsWorkspaceName'
+ description: 'The Log Analytics Workspace Name where optimization data will be ingested'
+ value: '"${logAnalyticsWorkspaceName}"'
+ }
+ {
+ name: 'AzureOptimization_LogAnalyticsWorkspaceRG'
+ description: 'The resource group for the Log Analytics Workspace where optimization data will be ingested'
+ value: '"${((!logAnalyticsReuse) ? resourceGroup().name : logAnalyticsWorkspaceRG)}"'
+ }
+ {
+ name: 'AzureOptimization_LogAnalyticsWorkspaceSubId'
+ description: 'The Azure subscription for the Log Analytics Workspace where optimization data will be ingested'
+ value: '"${subscription().subscriptionId}"'
+ }
+ {
+ name: 'AzureOptimization_LogAnalyticsWorkspaceTenantId'
+ description: 'The Microsoft Entra tenant for the Log Analytics Workspace where optimization data will be ingested'
+ value: '"${subscription().tenantId}"'
+ }
+ {
+ name: 'AzureOptimization_PriceSheetMeterCategories'
+ description: 'Comma-separated meter categories to be included in the Price Sheet (remove variable to include all categories)'
+ value: '"Virtual Machines,Storage"'
+ }
+ {
+ name: 'AzureOptimization_RetailPricesCurrencyCode'
+ description: 'The currency code to be used for the retail prices exports (used for Reservations prices)'
+ value: '"EUR"'
+ }
+ {
+ name: 'AzureOptimization_RecommendAdvisorPeriodInDays'
+ description: 'The period (in days) to look back for Advisor exported recommendations'
+ value: 7
+ }
+ {
+ name: 'AzureOptimization_RecommendationLongDeallocatedVmsIntervalDays'
+ description: 'The period (in days) for considering a VM long deallocated'
+ value: 30
+ }
+ {
+ name: 'AzureOptimization_PerfPercentileCpu'
+ description: 'The percentile to be used for processor metrics'
+ value: 99
+ }
+ {
+ name: 'AzureOptimization_PerfPercentileMemory'
+ description: 'The percentile to be used for memory metrics'
+ value: 99
+ }
+ {
+ name: 'AzureOptimization_PerfPercentileNetwork'
+ description: 'The percentile to be used for network metrics'
+ value: 99
+ }
+ {
+ name: 'AzureOptimization_PerfPercentileDisk'
+ description: 'The percentile to be used for disk metrics'
+ value: 99
+ }
+ {
+ name: 'AzureOptimization_PerfPercentileSqlDtu'
+ description: 'The percentile to be used for SQL DB DTU metrics'
+ value: 99
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdCpuPercentage'
+ description: 'The processor usage percentage threshold above which the fit score is decreased or below which the instance is considered underutilized'
+ value: 30
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdMemoryPercentage'
+ description: 'The memory usage percentage threshold above which the fit score is decreased or below which the instance is considered underutilized'
+ value: 50
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdCpuDegradedMaxPercentage'
+ description: 'The maximum processor usage percentage threshold above which the instance is considered degraded'
+ value: 95
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdCpuDegradedAvgPercentage'
+ description: 'The average processor usage percentage threshold above which the instance is considered degraded'
+ value: 75
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdMemoryDegradedPercentage'
+ description: 'The memory usage percentage threshold above which the instance is considered degraded'
+ value: 90
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdNetworkMbps'
+ description: 'The network usage threshold (in Mbps) above which the fit score is decreased'
+ value: 750
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdCpuShutdownPercentage'
+ description: 'The processor usage percentage threshold above which the fit score is decreased (shutdown scenarios)'
+ value: 5
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdMemoryShutdownPercentage'
+ description: 'The memory usage percentage threshold above which the fit score is decreased (shutdown scenarios)'
+ value: 100
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdNetworkShutdownMbps'
+ description: 'The network usage threshold (in Mbps) above which the fit score is decreased (shutdown scenarios)'
+ value: 10
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdDtuPercentage'
+ description: 'The DTU usage percentage threshold below which a SQL Database instance is considered underutilized'
+ value: 40
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdDtuDegradedPercentage'
+ description: 'The DTU usage percentage threshold above which a SQL Database instance is considered performance degraded'
+ value: 75
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdDiskIOPSPercentage'
+ description: 'The IOPS usage percentage threshold below which a Disk is considered underutilized'
+ value: 5
+ }
+ {
+ name: 'AzureOptimization_PerfThresholdDiskMBsPercentage'
+ description: 'The throughput (MBps) usage percentage threshold below which a Disk is considered underutilized'
+ value: 5
+ }
+ {
+ name: 'AzureOptimization_RemediateRightSizeMinFitScore'
+ description: 'The minimum fit score for right-size remediation'
+ value: '"5.0"'
+ }
+ {
+ name: 'AzureOptimization_RemediateRightSizeMinWeeksInARow'
+ description: 'The minimum number of weeks in a row required for a right-size recommendation to be remediated'
+ value: 4
+ }
+ {
+ name: 'AzureOptimization_RecommendationAdvisorCostRightSizeId'
+ description: 'The Azure Advisor VM right-size recommendation ID'
+ value: '"e10b1381-5f0a-47ff-8c7b-37bd13d7c974"'
+ }
+ {
+ name: 'AzureOptimization_RemediateLongDeallocatedVMsMinFitScore'
+ description: 'The minimum fit score for long-deallocated VM remediation'
+ value: '"5.0"'
+ }
+ {
+ name: 'AzureOptimization_RemediateLongDeallocatedVMsMinWeeksInARow'
+ description: 'The minimum number of weeks in a row required for a long-deallocated VM recommendation to be remediated'
+ value: 4
+ }
+ {
+ name: 'AzureOptimization_RecommendationLongDeallocatedVMsId'
+ description: 'The long deallocated VM recommendation ID'
+ value: '"c320b790-2e58-452a-aa63-7b62c383ad8a"'
+ }
+ {
+ name: 'AzureOptimization_RemediateUnattachedDisksMinFitScore'
+ description: 'The minimum fit score for unattached disk remediation'
+ value: '"5.0"'
+ }
+ {
+ name: 'AzureOptimization_RemediateUnattachedDisksMinWeeksInARow'
+ description: 'The minimum number of weeks in a row required for a unattached disk recommendation to be remediated'
+ value: 4
+ }
+ {
+ name: 'AzureOptimization_RemediateUnattachedDisksAction'
+ description: 'The action for the unattached disk recommendation to be remediated (Delete or Downsize)'
+ value: '"Delete"'
+ }
+ {
+ name: 'AzureOptimization_RecommendationUnattachedDisksId'
+ description: 'The unattached disk recommendation ID'
+ value: '"c84d5e86-e2d6-4d62-be7c-cecfbd73b0db"'
+ }
+ {
+ name: 'AzureOptimization_RecommendationAADMinCredValidityDays'
+ description: 'The minimum validity of an AAD Object credential in days'
+ value: 30
+ }
+ {
+ name: 'AzureOptimization_RecommendationAADMaxCredValidityYears'
+ description: 'The maximum validity of an AAD Object credential in years'
+ value: 2
+ }
+ {
+ name: 'AzureOptimization_AADObjectsFilter'
+ description: 'The Microsoft Entra object types to export'
+ value: '"Application,ServicePrincipal,User,Group"'
+ }
+ {
+ name: 'AzureOptimization_RecommendationRBACAssignmentsPercentageThreshold'
+ description: 'The percentage threshold (used to trigger recommendations) for total RBAC assignments limits'
+ value: 80
+ }
+ {
+ name: 'AzureOptimization_RecommendationResourceGroupsPerSubPercentageThreshold'
+ description: 'The percentage threshold (used to trigger recommendations) for resource group count limits'
+ value: 80
+ }
+ {
+ name: 'AzureOptimization_RecommendationVNetSubnetMaxUsedPercentageThreshold'
+ description: 'The percentage threshold (used to trigger recommendations) for maximum subnet address space usage'
+ value: 80
+ }
+ {
+ name: 'AzureOptimization_RecommendationVNetSubnetMinUsedPercentageThreshold'
+ description: 'The percentage threshold (used to trigger recommendations) for minimum subnet address space usage'
+ value: 5
+ }
+ {
+ name: 'AzureOptimization_RecommendationVNetSubnetEmptyMinAgeInDays'
+ description: 'The minimum age (in days) for an empty subnet to trigger an NSG rule recommendation'
+ value: 30
+ }
+ {
+ name: 'AzureOptimization_RecommendationsMaxAgeInDays'
+ description: 'The maximum age (in days) for a recommendation to be kept in the SQL database'
+ value: 365
+ }
+ {
+ name: 'AzureOptimization_RecommendationStorageAcountGrowthThresholdPercentage'
+ description: 'The minimum Storage Account growth percentage required to flag Storage as not having a retention policy in place'
+ value: 5
+ }
+ {
+ name: 'AzureOptimization_RecommendationStorageAcountGrowthMonthlyCostThreshold'
+ description: 'The minimum monthly cost (in your EA/MCA currency) required to flag Storage as not having a retention policy in place'
+ value: 50
+ }
+ {
+ name: 'AzureOptimization_RecommendationStorageAcountGrowthLookbackDays'
+ description: 'The lookback period (in days) for analyzing Storage Account growth'
+ value: 30
+ }
+]
+
+//------------------------------------------------------------------------------
+// Telemetry
+// Used to anonymously count the number of times the template has been deployed
+// and to track and fix deployment bugs to ensure the highest quality.
+// No information about you or your cost data is collected.
+//------------------------------------------------------------------------------
+
+resource defaultTelemetry 'Microsoft.Resources/deployments@2022-09-01' = if (enableDefaultTelemetry) {
+ name: 'pid-${telemetryId}-${uniqueString(deployment().name, projectLocation)}'
+ properties: {
+ mode: 'Incremental'
+ template: {
+ '$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
+ contentVersion: '1.0.0.0'
+ metadata: {
+ _generator: {
+ name: 'FinOps toolkit'
+ version: finOpsToolkitVersion
+ }
+ }
+ resources: []
+ }
+ }
+}
+
+resource logAnalyticsWorkspace 'microsoft.operationalinsights/workspaces@2020-08-01' = if (!logAnalyticsReuse) {
+ name: logAnalyticsWorkspaceName
+ location: projectLocation
+ tags: resourceTags
+ properties: {
+ sku: {
+ name: 'pergb2018'
+ }
+ retentionInDays: logAnalyticsRetentionDays
+ }
+}
+
+resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
+ name: storageAccountName
+ location: projectLocation
+ tags: resourceTags
+ sku: {
+ name: 'Standard_LRS'
+ }
+ kind: 'StorageV2'
+ properties: {
+ allowBlobPublicAccess: false
+ networkAcls: {
+ bypass: 'AzureServices'
+ virtualNetworkRules: []
+ ipRules: []
+ defaultAction: 'Allow'
+ }
+ supportsHttpsTrafficOnly: true
+ encryption: {
+ services: {
+ file: {
+ enabled: true
+ }
+ blob: {
+ enabled: true
+ }
+ }
+ keySource: 'Microsoft.Storage'
+ }
+ minimumTlsVersion: 'TLS1_2'
+ accessTier: 'Cool'
+ }
+}
+
+resource storageBlobServices 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
+ parent: storageAccount
+ name: 'default'
+ properties: {
+ cors: {
+ corsRules: []
+ }
+ deleteRetentionPolicy: {
+ enabled: false
+ }
+ }
+}
+
+resource storageCsvExportsContainers 'Microsoft.Storage/storageAccounts/blobServices/containers@2022-09-01' = [for item in csvExports: {
+ name: '${storageAccountName}/default/${item.containerName}'
+ properties: {
+ publicAccess: 'None'
+ }
+ dependsOn: [
+ storageBlobServices
+ storageAccount
+ ]
+}]
+
+resource storageRecommendationsContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2022-09-01' = {
+ name: '${storageAccountName}/default/${recommendationsContainerName}'
+ properties: {
+ publicAccess: 'None'
+ }
+ dependsOn: [
+ storageBlobServices
+ storageAccount
+ ]
+}
+
+resource storageRemediationLogsContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2022-09-01' = {
+ name: '${storageAccountName}/default/${remediationLogsContainerName}'
+ properties: {
+ publicAccess: 'None'
+ }
+ dependsOn: [
+ storageBlobServices
+ storageAccount
+ ]
+}
+
+resource storageLifecycleManagementPolicy 'Microsoft.Storage/storageAccounts/managementPolicies@2021-02-01' = {
+ parent: storageAccount
+ name: 'default'
+ properties: {
+ policy: {
+ rules: [
+ {
+ enabled: true
+ name: 'Clean6MonthsOldBlobs'
+ type: 'Lifecycle'
+ definition: {
+ actions: {
+ baseBlob: {
+ delete: {
+ daysAfterModificationGreaterThan: 180
+ }
+ }
+ snapshot: {
+ delete: {
+ daysAfterCreationGreaterThan: 180
+ }
+ }
+ version: {
+ delete: {
+ daysAfterCreationGreaterThan: 180
+ }
+ }
+ }
+ filters: {
+ blobTypes: [
+ 'blockBlob'
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ dependsOn: [
+ storageBlobServices
+ ]
+}
+
+resource existingSqlServer 'Microsoft.Sql/servers@2022-05-01-preview' existing = if (sqlServerAlreadyExists) {
+ name: sqlServerName
+}
+
+resource sqlServer 'Microsoft.Sql/servers@2022-05-01-preview' = if (!sqlServerAlreadyExists) {
+ name: sqlServerName
+ location: projectLocation
+ tags: resourceTags
+ properties: {
+ version: '12.0'
+ publicNetworkAccess: 'Enabled'
+ minimalTlsVersion: '1.2'
+ administrators: {
+ administratorType: 'ActiveDirectory'
+ azureADOnlyAuthentication: true
+ login: userPrincipalName
+ principalType: sqlAdminPrincipalType
+ sid: userObjectId
+ tenantId: tenant().tenantId
+ }
+ }
+}
+
+resource sqlAdminsResource 'Microsoft.Sql/servers/administrators@2022-05-01-preview' = if (sqlServerAlreadyExists) {
+ parent: existingSqlServer
+ name: 'ActiveDirectory'
+ properties: {
+ administratorType: 'ActiveDirectory'
+ login: userPrincipalName
+ sid: userObjectId
+ tenantId: tenant().tenantId
+ }
+}
+
+resource sqlAzureAdOnly 'Microsoft.Sql/servers/azureADOnlyAuthentications@2022-05-01-preview' = if (sqlServerAlreadyExists) {
+ name: 'Default'
+ parent: existingSqlServer
+ properties: {
+ azureADOnlyAuthentication: true
+ }
+ dependsOn:[sqlAdminsResource]
+}
+
+resource sqlServerFirewall 'Microsoft.Sql/servers/firewallRules@2022-05-01-preview' = {
+ parent: sqlServer
+ name: 'AllowAllWindowsAzureIps'
+ properties: {
+ endIpAddress: '0.0.0.0'
+ startIpAddress: '0.0.0.0'
+ }
+}
+
+resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-05-01-preview' = {
+ parent: sqlServer
+ name: sqlDatabaseName
+ location: projectLocation
+ tags: resourceTags
+ sku: {
+ name: 'Basic'
+ tier: 'Basic'
+ capacity: 5
+ }
+ properties: {
+ collation: 'SQL_Latin1_General_CP1_CI_AS'
+ maxSizeBytes: 2147483648
+ catalogCollation: 'SQL_Latin1_General_CP1_CI_AS'
+ zoneRedundant: false
+ readScale: 'Disabled'
+ autoPauseDelay: 60
+ requestedBackupStorageRedundancy: 'Geo'
+ }
+}
+
+resource sqlServerName_sqlDatabaseName_default 'Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies@2022-05-01-preview' = {
+ name: '${sqlServerName}/${sqlDatabaseName}/default'
+ properties: {
+ retentionDays: sqlBackupRetentionDays
+ }
+ dependsOn: [
+ sqlDatabase
+ sqlServer
+ ]
+}
+
+resource automationAccount 'Microsoft.Automation/automationAccounts@2020-01-13-preview' = {
+ name: automationAccountName
+ location: projectLocation
+ tags: resourceTags
+ identity: {
+ type: 'SystemAssigned'
+ }
+ properties: {
+ sku: {
+ name: 'Basic'
+ }
+ }
+}
+
+resource automationModule_Az_Accounts 'Microsoft.Automation/automationAccounts/modules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: Az_Accounts.name
+ tags: resourceTags
+ properties: {
+ contentLink: {
+ uri: Az_Accounts.url
+ }
+ }
+}
+
+resource automationModule_Microsoft_Graph_Authentication 'Microsoft.Automation/automationAccounts/modules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: Microsoft_Graph_Authentication.name
+ tags: resourceTags
+ properties: {
+ contentLink: {
+ uri: Microsoft_Graph_Authentication.url
+ }
+ }
+}
+
+resource automationModule_All 'Microsoft.Automation/automationAccounts/modules@2020-01-13-preview' = [for item in psModules: {
+ parent: automationAccount
+ name: item.name
+ tags: resourceTags
+ properties: {
+ contentLink: {
+ uri: item.url
+ }
+ }
+ dependsOn: [
+ automationModule_Az_Accounts
+ automationModule_Microsoft_Graph_Authentication
+ ]
+}]
+
+resource automationRunbooks 'Microsoft.Automation/automationAccounts/runbooks@2020-01-13-preview' = [for item in runbooks: {
+ parent: automationAccount
+ name: item.name
+ tags: resourceTags
+ location: projectLocation
+ properties: {
+ runbookType: item.type
+ logProgress: false
+ logVerbose: false
+ description: item.description
+ publishContentLink: {
+ uri: item.scriptUri
+ version: item.version
+ }
+ }
+ dependsOn: [
+ automationModule_All
+ ]
+}]
+
+resource automationVariablesAll 'Microsoft.Automation/automationAccounts/variables@2020-01-13-preview' = [for item in automationVariables: {
+ parent: automationAccount
+ name: item.name
+ properties: {
+ description: item.description
+ value: item.value
+ }
+}]
+
+resource automationVariables_csvExports 'Microsoft.Automation/automationAccounts/variables@2020-01-13-preview' = [for item in csvExports: {
+ parent: automationAccount
+ name: item.variableName
+ properties: {
+ description: item.variableDescription
+ value: '"${item.containerName}"'
+ }
+}]
+
+resource automationVariables_SQLServerHostname 'Microsoft.Automation/automationAccounts/variables@2020-01-13-preview' = {
+ parent: automationAccount
+ name: 'AzureOptimization_SQLServerHostname'
+ properties: {
+ description: 'The Azure SQL Server hostname for the ingestion control and recommendations tables'
+ value: '"${sqlServer.properties.fullyQualifiedDomainName}"'
+ }
+}
+
+resource automationVariables_LogAnalyticsWorkspaceId 'Microsoft.Automation/automationAccounts/variables@2020-01-13-preview' = {
+ parent: automationAccount
+ name: 'AzureOptimization_LogAnalyticsWorkspaceId'
+ properties: {
+ description: 'The Log Analytics Workspace ID where optimization data will be ingested'
+ value: '"${reference(((!logAnalyticsReuse) ? logAnalyticsWorkspace.id : resourceId(logAnalyticsWorkspaceRG, 'microsoft.operationalinsights/workspaces', logAnalyticsWorkspaceName)), '2020-08-01').customerId}"'
+ }
+}
+
+resource automationVariables_LogAnalyticsWorkspaceKey 'Microsoft.Automation/automationAccounts/variables@2020-01-13-preview' = {
+ parent: automationAccount
+ name: 'AzureOptimization_LogAnalyticsWorkspaceKey'
+ properties: {
+ description: 'The shared key for the Log Analytics Workspace where optimization data will be ingested'
+ value: '"${listKeys(((!logAnalyticsReuse) ? logAnalyticsWorkspace.id : resourceId(logAnalyticsWorkspaceRG, 'microsoft.operationalinsights/workspaces', logAnalyticsWorkspaceName)), '2020-08-01').primarySharedKey}"'
+ isEncrypted: true
+ }
+}
+
+resource automationSchedules_csvExports 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = [for item in csvExportsSchedules: {
+ parent: automationAccount
+ name: item.exportSchedule
+ properties: {
+ description: item.exportDescription
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, item.exportTimeOffset)
+ interval: 1
+ frequency: item.exportFrequency
+ }
+}]
+
+resource automationSchedules_csvIngests 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = [for item in csvExports: {
+ parent: automationAccount
+ name: item.ingestSchedule
+ properties: {
+ description: item.ingestDescription
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, item.ingestTimeOffset)
+ interval: 1
+ frequency: item.ingestFrequency
+ }
+}]
+
+resource automationSchedules_remediationCsvIngest 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: remediationLogsIngestScheduleName
+ properties: {
+ description: 'Starts the daily Remediation Logs ingests'
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, 'PT1H30M')
+ interval: 1
+ frequency: 'Day'
+ }
+}
+
+resource automationSchedules_recommendationsExport 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: recommendationsScheduleName
+ properties: {
+ description: 'Starts the weekly Recommendations generation'
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, 'PT2H30M')
+ interval: 1
+ frequency: 'Week'
+ }
+}
+
+resource automationSchedules_recommendationsIngest 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: recommendationsIngestScheduleName
+ properties: {
+ description: 'Starts the weekly Recommendations ingests'
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, 'PT3H30M')
+ interval: 1
+ frequency: 'Week'
+ }
+}
+
+resource automationSchedules_suppressionsIngest 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: suppressionsIngestScheduleName
+ properties: {
+ description: 'Starts the weekly Suppressions ingests'
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, 'PT3H00M')
+ interval: 1
+ frequency: 'Week'
+ }
+}
+
+resource automationSchedules_recommendationsCleanUp 'Microsoft.Automation/automationAccounts/schedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: recommendationsCleanUpScheduleName
+ properties: {
+ description: 'Starts the weekly Recommendations cleanup'
+ expiryTime: '9999-12-31T17:59:00-06:00'
+ startTime: dateTimeAdd(baseTime, 'P6D')
+ interval: 1
+ frequency: 'Week'
+ }
+}
+
+resource automationJobSchedules_csvExports 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = [for item in csvExports: if (!item.isOneToMany) {
+ parent: automationAccount
+ name: item.exportJobId
+ properties: {
+ schedule: {
+ name: item.exportSchedule
+ }
+ runbook: {
+ name: item.runbookName
+ }
+ }
+ dependsOn: [
+ automationSchedules_csvExports
+ automationModule_All
+ automationRunbooks
+ ]
+}]
+
+resource automationJobSchedules_csvParameterizedExports 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = [for item in csvParameterizedExports: {
+ parent: automationAccount
+ name: item.exportJobId
+ properties: {
+ schedule: {
+ name: item.exportSchedule
+ }
+ runbook: {
+ name: item.runbookName
+ }
+ parameters: item.parameters
+ }
+ dependsOn: [
+ automationSchedules_csvExports
+ automationModule_All
+ automationRunbooks
+ ]
+}]
+
+resource automationJobSchedules_csvIngests 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = [for item in csvExports: {
+ parent: automationAccount
+ name: item.ingestJobId
+ properties: {
+ schedule: {
+ name: item.ingestSchedule
+ }
+ runbook: {
+ name: csvIngestRunbookName
+ }
+ parameters: {
+ StorageSinkContainer: item.containerName
+ }
+ }
+ dependsOn: [
+ automationSchedules_csvIngests
+ automationModule_All
+ automationRunbooks
+ ]
+}]
+
+resource automationJobSchedules_remediationLogsIngests 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: remediationLogsIngestJobId
+ properties: {
+ schedule: {
+ name: remediationLogsIngestScheduleName
+ }
+ runbook: {
+ name: csvIngestRunbookName
+ }
+ parameters: {
+ StorageSinkContainer: remediationLogsContainerName
+ }
+ }
+ dependsOn: [
+ automationSchedules_remediationCsvIngest
+ automationModule_All
+ automationRunbooks
+ ]
+}
+
+resource automationJobSchedules_recommendationsExports 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = [for item in recommendations: {
+ parent: automationAccount
+ name: item.recommendationJobId
+ properties: {
+ schedule: {
+ name: recommendationsScheduleName
+ }
+ runbook: {
+ name: item.runbookName
+ }
+ }
+ dependsOn: [
+ automationSchedules_recommendationsExport
+ automationModule_All
+ automationRunbooks
+ ]
+}]
+
+resource automationJobSchedules_recommendationsIngests 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: recommendationsIngestJobId
+ properties: {
+ schedule: {
+ name: recommendationsIngestScheduleName
+ }
+ runbook: {
+ name: recommendationsIngestRunbookName
+ }
+ }
+ dependsOn: [
+ automationSchedules_recommendationsIngest
+ automationModule_All
+ automationRunbooks
+ ]
+}
+
+resource automationJobSchedules_recommendationsLogAnalyticsIngest 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: recommendationsLogAnalyticsIngestJobId
+ properties: {
+ schedule: {
+ name: recommendationsIngestScheduleName
+ }
+ runbook: {
+ name: recommendationsLogAnalyticsIngestRunbookName
+ }
+ }
+ dependsOn: [
+ automationSchedules_recommendationsIngest
+ automationModule_All
+ automationRunbooks
+ ]
+}
+
+resource automationJobSchedules_suppressionsLogAnalyticsIngest 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: suppressionsLogAnalyticsIngestJobId
+ properties: {
+ schedule: {
+ name: suppressionsIngestScheduleName
+ }
+ runbook: {
+ name: suppressionsLogAnalyticsIngestRunbookName
+ }
+ }
+ dependsOn: [
+ automationSchedules_suppressionsIngest
+ automationModule_All
+ automationRunbooks
+ ]
+}
+
+resource automationJobSchedules_recommendationsCleanUp 'Microsoft.Automation/automationAccounts/jobSchedules@2020-01-13-preview' = {
+ parent: automationAccount
+ name: recommendationsCleanUpJobId
+ properties: {
+ schedule: {
+ name: recommendationsCleanUpScheduleName
+ }
+ runbook: {
+ name: cleanUpOlderRecommendationsRunbookName
+ }
+ }
+ dependsOn: [
+ automationSchedules_recommendationsCleanUp
+ automationModule_All
+ automationRunbooks
+ ]
+}
+
+resource contributorRoleAssignmentGuid_resource 'Microsoft.Authorization/roleAssignments@2018-09-01-preview' = {
+ name: contributorRoleAssignmentGuid
+ properties: {
+ roleDefinitionId: roleContributor
+ principalId: reference(automationAccount.id, '2019-06-01', 'Full').identity.principalId
+ principalType: 'ServicePrincipal'
+ }
+}
+
+output automationPrincipalId string = reference(automationAccount.id, '2019-06-01', 'Full').identity.principalId
diff --git a/docs/deploy/optimization-engine/0.8/azuredeploy.bicep b/docs/deploy/optimization-engine/0.8/azuredeploy.bicep
new file mode 100644
index 000000000..0a09fce3b
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/azuredeploy.bicep
@@ -0,0 +1,82 @@
+targetScope = 'subscription'
+param rgName string
+param readerRoleAssignmentGuid string = guid(subscription().subscriptionId, rgName)
+param contributorRoleAssignmentGuid string = guid(rgName)
+param projectLocation string
+
+@description('The base URI where artifacts required by this template are located')
+param templateLocation string
+
+param storageAccountName string
+param automationAccountName string
+param sqlServerName string
+param sqlServerAlreadyExists bool = false
+param sqlDatabaseName string = 'azureoptimization'
+param logAnalyticsReuse bool
+param logAnalyticsWorkspaceName string
+param logAnalyticsWorkspaceRG string
+param logAnalyticsRetentionDays int = 120
+param sqlBackupRetentionDays int = 7
+param userPrincipalName string
+param userObjectId string
+param sqlAdminPrincipalType string = 'User'
+param cloudEnvironment string = 'AzureCloud'
+param authenticationOption string = 'ManagedIdentity'
+
+@description('Base time for all automation runbook schedules.')
+param baseTime string = utcNow('u')
+param resourceTags object
+
+param roleReader string = '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
+
+@description('Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases.')
+param enableDefaultTelemetry bool = true
+
+resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
+ name: rgName
+ location: projectLocation
+ tags: resourceTags
+ dependsOn: []
+}
+
+module resourcesDeployment './azuredeploy-nested.bicep' = {
+ name: 'resourcesDeployment'
+ scope: resourceGroup(rgName)
+ params: {
+ projectLocation: projectLocation
+ templateLocation: templateLocation
+ storageAccountName: storageAccountName
+ automationAccountName: automationAccountName
+ sqlServerName: sqlServerName
+ sqlServerAlreadyExists: sqlServerAlreadyExists
+ sqlDatabaseName: sqlDatabaseName
+ logAnalyticsReuse: logAnalyticsReuse
+ logAnalyticsWorkspaceName: logAnalyticsWorkspaceName
+ logAnalyticsWorkspaceRG: logAnalyticsWorkspaceRG
+ logAnalyticsRetentionDays: logAnalyticsRetentionDays
+ sqlBackupRetentionDays: sqlBackupRetentionDays
+ cloudEnvironment: cloudEnvironment
+ authenticationOption: authenticationOption
+ baseTime: baseTime
+ contributorRoleAssignmentGuid: contributorRoleAssignmentGuid
+ resourceTags: resourceTags
+ userPrincipalName: userPrincipalName
+ userObjectId: userObjectId
+ sqlAdminPrincipalType: sqlAdminPrincipalType
+ enableDefaultTelemetry: enableDefaultTelemetry
+ }
+ dependsOn: [
+ rg
+ ]
+}
+
+resource readerRoleAssignmentGuid_resource 'Microsoft.Authorization/roleAssignments@2018-09-01-preview' = {
+ name: readerRoleAssignmentGuid
+ properties: {
+ roleDefinitionId: roleReader
+ principalId: resourcesDeployment.outputs.automationPrincipalId
+ principalType: 'ServicePrincipal'
+ }
+}
+
+output automationPrincipalId string = resourcesDeployment.outputs.automationPrincipalId
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1
new file mode 100644
index 000000000..1347d081e
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AADObjectsToBlobStorage.ps1
@@ -0,0 +1,519 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName,
+
+ [Parameter(Mandatory = $false)]
+ [string] $groupFilter,
+
+ [Parameter(Mandatory = $false)]
+ [string] $userFilter
+)
+
+$ErrorActionPreference = "Stop"
+
+function Build-CredObjectWithDates {
+ param (
+ [object] $appObject
+ )
+
+ $credObjects = @()
+
+ foreach ($obj in $appObject.KeyCredentials)
+ {
+ $credObject = New-Object PSObject -Property @{
+ DisplayName = $obj.DisplayName
+ KeyId = $obj.KeyId
+ KeyType = $obj.Type
+ StartDate = (Get-Date($obj.StartDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ EndDate = (Get-Date($obj.EndDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $credObjects += $credObject
+ }
+
+ foreach ($obj in $appObject.PasswordCredentials)
+ {
+ $credObject = New-Object PSObject -Property @{
+ DisplayName = $obj.DisplayName
+ KeyId = $obj.KeyId
+ KeyType = "Password"
+ StartDate = (Get-Date($obj.StartDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ EndDate = (Get-Date($obj.EndDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $credObjects += $credObject
+ }
+
+ return $credObjects
+}
+
+function Build-PrincipalNames {
+ param (
+ [object] $appObject
+ )
+
+ $principalNames = @()
+
+ if ($appObject.Web.HomePageUrl)
+ {
+ $principalNames += $appObject.Web.HomePageUrl
+ }
+
+ foreach ($obj in $appObject.IdentifierUris)
+ {
+ $principalNames += $obj
+ }
+
+ foreach ($obj in $appObject.ServicePrincipalNames)
+ {
+ $principalNames += $obj
+ }
+
+ foreach ($obj in $appObject.AlternativeNames)
+ {
+ $principalNames += $obj
+ }
+
+ return $principalNames
+}
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_AADObjectsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "aadobjectsexports"
+}
+
+# Application,ServicePrincipal,User,Group
+$aadObjectsFilter = Get-AutomationVariable -Name "AzureOptimization_AADObjectsFilter" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($aadObjectsFilter))
+{
+ $aadObjectsFilter = "Application,ServicePrincipal"
+}
+
+$groupFilterVariable = Get-AutomationVariable -Name "AzureOptimization_AADObjectsGroupFilter" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($groupFilter) -and -not([string]::IsNullOrEmpty($groupFilterVariable)))
+{
+ $groupFilter = $groupFilterVariable
+}
+
+$userFilterVariable = Get-AutomationVariable -Name "AzureOptimization_AADObjectsUserFilter" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($userFilter) -and -not([string]::IsNullOrEmpty($userFilterVariable)))
+{
+ $userFilter = $userFilterVariable
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+#workaround for https://github.com/microsoftgraph/msgraph-sdk-powershell/issues/888
+$localPath = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::UserProfile)
+if (-not(get-item "$localPath\.graph\" -ErrorAction SilentlyContinue))
+{
+ New-Item -Type Directory "$localPath\.graph"
+}
+
+Import-Module Microsoft.Graph.Authentication
+Import-Module Microsoft.Graph.Users
+Import-Module Microsoft.Graph.Applications
+Import-Module Microsoft.Graph.Groups
+
+switch ($cloudEnvironment) {
+ "AzureUSGovernment" {
+ $graphEnvironment = "USGov"
+ break
+ }
+ "AzureChinaCloud" {
+ $graphEnvironment = "China"
+ break
+ }
+ "AzureGermanCloud" {
+ $graphEnvironment = "Germany"
+ break
+ }
+ Default {
+ $graphEnvironment = "Global"
+ }
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Microsoft Graph with $externalCredentialName external credential..."
+ Connect-MgGraph -TenantId $externalTenantId -ClientSecretCredential $externalCredential -Environment $graphEnvironment -NoWelcome
+}
+else
+{
+ "Logging in to Microsoft Graph with $authenticationOption..."
+
+ switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-MgGraph -Identity -ClientId $uamiClientID -Environment $graphEnvironment -NoWelcome
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-MgGraph -Identity -Environment $graphEnvironment -NoWelcome
+ break
+ }
+ }
+}
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$aadObjectsTypes = $aadObjectsFilter.Split(",")
+
+$fileDate = $datetime.ToString("yyyyMMdd")
+
+if ("Application" -in $aadObjectsTypes)
+{
+ $aadObjects = @()
+
+ "Getting AAD applications..."
+ $apps = Get-MgApplication -All -ExpandProperty Owners -Property Id,AppId,CreatedDateTime,DeletedDateTime,DisplayName,KeyCredentials,PasswordCredentials,Owners,PublisherDomain,Web,IdentifierUris
+ "Found $($apps.Count) AAD applications"
+
+ foreach ($app in $apps)
+ {
+ $owners = $null
+ if ($app.Owners.Count -gt 0)
+ {
+ $owners = ($app.Owners | Where-Object { [string]::IsNullOrEmpty($_.DeletedDateTime) }).Id | ConvertTo-Json -Compress
+ }
+ $createdDate = $null
+ if ($app.CreatedDateTime)
+ {
+ $createdDate = (Get-Date($app.CreatedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $deletedDate = $null
+ if ($app.DeletedDateTime)
+ {
+ $deletedDate = (Get-Date($app.DeletedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $aadObject = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ ObjectId = $app.Id
+ ObjectType = "Application"
+ ObjectSubType = "N/A"
+ DisplayName = $app.DisplayName
+ SecurityEnabled = "N/A"
+ ApplicationId = $app.AppId
+ Keys = (Build-CredObjectWithDates -appObject $app) | ConvertTo-Json -Compress
+ PrincipalNames = (Build-PrincipalNames -appObject $app) | ConvertTo-Json -Compress
+ Owners = $owners
+ CreatedDate = $createdDate
+ DeletedDate = $deletedDate
+ }
+ $aadObjects += $aadObject
+ }
+
+ $jsonExportPath = "$fileDate-$tenantId-aadobjects-apps.json"
+ $csvExportPath = "$fileDate-$tenantId-aadobjects-apps.csv"
+
+ $aadObjects | ConvertTo-Json -Depth 3 -Compress | Out-File $jsonExportPath
+ "Exported to JSON: $($aadObjects.Count) lines"
+ $aadObjectsJson = Get-Content -Path $jsonExportPath | ConvertFrom-Json
+ "JSON Import: $($aadObjectsJson.Count) lines"
+ $aadObjectsJson | Export-Csv -NoTypeInformation -Path $csvExportPath
+ "Export to $csvExportPath"
+
+ $csvBlobName = $csvExportPath
+ $csvProperties = @{"ContentType" = "text/csv"};
+
+ Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $csvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $csvExportPath from local disk..."
+
+ Remove-Item -Path $jsonExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $jsonExportPath from local disk..."
+}
+
+if ("ServicePrincipal" -in $aadObjectsTypes)
+{
+ $aadObjects = @()
+
+ "Getting AAD service principals..."
+ $spns = Get-MgServicePrincipal -All -ExpandProperty Owners -Property Id,AppId,DeletedDateTime,DisplayName,KeyCredentials,PasswordCredentials,Owners,ServicePrincipalNames,ServicePrincipalType,AccountEnabled,AlternativeNames
+ "Found $($spns.Count) AAD service principals"
+
+ foreach ($spn in $spns)
+ {
+ $owners = $null
+ if ($spn.Owners.Count -gt 0)
+ {
+ $owners = ($spn.Owners | Where-Object { [string]::IsNullOrEmpty($_.DeletedDateTime) }).Id | ConvertTo-Json -Compress
+ }
+ $deletedDate = $null
+ if ($spn.DeletedDateTime)
+ {
+ $deletedDate = (Get-Date($spn.DeletedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $aadObject = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ ObjectId = $spn.Id
+ ObjectType = "ServicePrincipal"
+ ObjectSubType = $spn.ServicePrincipalType
+ DisplayName = $spn.DisplayName
+ SecurityEnabled = $spn.AccountEnabled
+ ApplicationId = $spn.AppId
+ Keys = (Build-CredObjectWithDates -appObject $spn) | ConvertTo-Json -Compress
+ PrincipalNames = (Build-PrincipalNames -appObject $spn) | ConvertTo-Json -Compress
+ Owners = $owners
+ DeletedDate = $deletedDate
+ }
+ $aadObjects += $aadObject
+ }
+
+ $jsonExportPath = "$fileDate-$tenantId-aadobjects-spns.json"
+ $csvExportPath = "$fileDate-$tenantId-aadobjects-spns.csv"
+
+ $aadObjects | ConvertTo-Json -Depth 3 -Compress | Out-File $jsonExportPath
+ "Exported to JSON: $($aadObjects.Count) lines"
+ $aadObjectsJson = Get-Content -Path $jsonExportPath | ConvertFrom-Json
+ "JSON Import: $($aadObjectsJson.Count) lines"
+ $aadObjectsJson | Export-Csv -NoTypeInformation -Path $csvExportPath
+ "Export to $csvExportPath"
+
+ $csvBlobName = $csvExportPath
+ $csvProperties = @{"ContentType" = "text/csv"};
+
+ Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $csvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $csvExportPath from local disk..."
+
+ Remove-Item -Path $jsonExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $jsonExportPath from local disk..."
+}
+
+if ("User" -in $aadObjectsTypes)
+{
+ $aadObjects = @()
+
+ if ([string]::IsNullOrEmpty($userFilter))
+ {
+ "Getting AAD users..."
+ $users = Get-MgUser -All -Property Id,AccountEnabled,DisplayName,UserPrincipalName,UserType,CreatedDateTime,DeletedDateTime
+ }
+ else
+ {
+ "Getting AAD users with filter $userFilter..."
+ $users = Get-MgUser -Filter $userFilter -All -Property Id,AccountEnabled,DisplayName,UserPrincipalName,UserType,CreatedDateTime,DeletedDateTime
+ }
+ "Found $($users.Count) AAD users"
+
+ foreach ($user in $users)
+ {
+ $createdDate = $null
+ if ($user.CreatedDateTime)
+ {
+ $createdDate = (Get-Date($user.CreatedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $deletedDate = $null
+ if ($user.DeletedDateTime)
+ {
+ $deletedDate = (Get-Date($user.DeletedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $aadObject = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ ObjectId = $user.Id
+ ObjectType = "User"
+ ObjectSubType = $user.UserType
+ DisplayName = $user.DisplayName
+ SecurityEnabled = $user.AccountEnabled
+ PrincipalNames = $user.UserPrincipalName
+ CreatedDate = $createdDate
+ DeletedDate = $deletedDate
+ }
+ $aadObjects += $aadObject
+ }
+
+ $jsonExportPath = "$fileDate-$tenantId-aadobjects-users.json"
+ $csvExportPath = "$fileDate-$tenantId-aadobjects-users.csv"
+
+ $aadObjects | Export-Csv -NoTypeInformation -Path $csvExportPath
+ "Export to $csvExportPath"
+
+ $csvBlobName = $csvExportPath
+ $csvProperties = @{"ContentType" = "text/csv"};
+
+ Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $csvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $csvExportPath from local disk..."
+}
+
+if ("Group" -in $aadObjectsTypes)
+{
+ $aadObjects = @()
+
+ if ([string]::IsNullOrEmpty($groupFilter))
+ {
+ "Getting AAD groups..."
+ $groups = Get-MgGroup -All -ExpandProperty Members -Property Id,SecurityEnabled,DisplayName,Members,CreatedDateTime,DeletedDateTime,GroupTypes
+ }
+ else
+ {
+ "Getting AAD groups with filter $groupFilter..."
+ $groups = Get-MgGroup -Filter $groupFilter -All -ExpandProperty Members -Property Id,SecurityEnabled,DisplayName,Members,CreatedDateTime,DeletedDateTime,GroupTypes
+ }
+ "Found $($groups.Count) AAD groups"
+
+ foreach ($group in $groups)
+ {
+ $groupMembers = $null
+ if ($group.Members.Count -gt 0)
+ {
+ $groupMembers = $group.Members.Id | ConvertTo-Json -Compress
+ }
+ $createdDate = $null
+ if ($group.CreatedDateTime)
+ {
+ $createdDate = (Get-Date($group.CreatedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $deletedDate = $null
+ if ($group.DeletedDateTime)
+ {
+ $deletedDate = (Get-Date($group.DeletedDateTime)).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ $aadObject = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ ObjectId = $group.Id
+ ObjectType = "Group"
+ ObjectSubType = $group.GroupTypes | ConvertTo-Json -Compress
+ DisplayName = $group.DisplayName
+ SecurityEnabled = $group.SecurityEnabled
+ PrincipalNames = $groupMembers
+ CreatedDate = $createdDate
+ DeletedDate = $deletedDate
+ }
+ $aadObjects += $aadObject
+ }
+
+ $jsonExportPath = "$fileDate-$tenantId-aadobjects-groups.json"
+ $csvExportPath = "$fileDate-$tenantId-aadobjects-groups.csv"
+
+ $aadObjects | ConvertTo-Json -Depth 3 -Compress | Out-File $jsonExportPath
+ "Exported to JSON: $($aadObjects.Count) lines"
+ $aadObjectsJson = Get-Content -Path $jsonExportPath | ConvertFrom-Json
+ "JSON Import: $($aadObjectsJson.Count) lines"
+ $aadObjectsJson | Export-Csv -NoTypeInformation -Path $csvExportPath
+ "Export to $csvExportPath"
+
+ $csvBlobName = $csvExportPath
+ $csvProperties = @{"ContentType" = "text/csv"};
+
+ Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $csvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $csvExportPath from local disk..."
+
+ Remove-Item -Path $jsonExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $jsonExportPath from local disk..."
+}
+
+"DONE!"
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..5be7b1c69
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAppGatewayPropertiesToBlobStorage.ps1
@@ -0,0 +1,231 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGAppGatewayContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argappgwexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allAppGWs = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$appGWsTotal = @()
+$resultsSoFar = 0
+
+Write-Output "Querying for Application Gateways properties"
+
+$argQuery = @"
+resources
+| where type =~ 'Microsoft.Network/applicationGateways'
+| extend gatewayIPsCount = array_length(properties.gatewayIPConfigurations)
+| extend frontendIPsCount = array_length(properties.frontendIPConfigurations)
+| extend frontendPortsCount = array_length(properties.frontendPorts)
+| extend backendPoolsCount = array_length(properties.backendAddressPools)
+| extend httpSettingsCount = array_length(properties.backendHttpSettingsCollection)
+| extend httpListenersCount = array_length(properties.httpListeners)
+| extend urlPathMapsCount = array_length(properties.urlPathMaps)
+| extend requestRoutingRulesCount = array_length(properties.requestRoutingRules)
+| extend probesCount = array_length(properties.probes)
+| extend rewriteRulesCount = array_length(properties.rewriteRuleSets)
+| extend redirectConfsCount = array_length(properties.redirectConfigurations)
+| project id, name, resourceGroup, subscriptionId, tenantId, location, zones, skuName = properties.sku.name, skuTier = properties.sku.tier, skuCapacity = properties.sku.capacity, enableHttp2 = properties.enableHttp2, gatewayIPsCount, frontendIPsCount, frontendPortsCount, httpSettingsCount, httpListenersCount, backendPoolsCount, urlPathMapsCount, requestRoutingRulesCount, probesCount, rewriteRulesCount, redirectConfsCount, tags
+| join kind=leftouter (
+ resources
+ | where type =~ 'Microsoft.Network/applicationGateways'
+ | mvexpand backendPools = properties.backendAddressPools
+ | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)
+ | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses)
+ | summarize backendIPCount = sum(backendIPCount), backendAddressesCount = sum(backendAddressesCount) by id
+) on id
+| project-away id1
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $appGWs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $appGWs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($appGWs -and $appGWs.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $appGWs = $appGWs.Data
+ }
+ $resultsCount = $appGWs.Count
+ $resultsSoFar += $resultsCount
+ $appGWsTotal += $appGWs
+
+} while ($resultsCount -eq $ARGPageSize)
+
+Write-Output "Found $($appGWsTotal.Count) Application Gateway entries"
+
+<#
+ Building CSV entries
+#>
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+foreach ($appGW in $appGWsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $appGW.tenantId
+ SubscriptionGuid = $appGW.subscriptionId
+ ResourceGroupName = $appGW.resourceGroup.ToLower()
+ InstanceName = $appGW.name.ToLower()
+ InstanceId = $appGW.id.ToLower()
+ SkuName = $appGW.skuName
+ SkuTier = $appGW.skuTier
+ SkuCapacity = $appGW.skuCapacity
+ Location = $appGW.location
+ Zones = $appGW.zones
+ EnableHttp2 = $appGW.enableHttp2
+ GatewayIPsCount = $appGW.gatewayIPsCount
+ FrontendIPsCount = $appGW.frontendIPsCount
+ FrontendPortsCount = $appGW.frontendPortsCount
+ BackendIPCount = $appGW.backendIPCount
+ BackendAddressesCount = $appGW.backendAddressesCount
+ HttpSettingsCount = $appGW.httpSettingsCount
+ HttpListenersCount = $appGW.httpListenersCount
+ BackendPoolsCount = $appGW.backendPoolsCount
+ ProbesCount = $appGW.probesCount
+ UrlPathMapsCount = $appGW.urlPathMapsCount
+ RequestRoutingRulesCount = $appGW.requestRoutingRulesCount
+ RewriteRulesCount = $appGW.rewriteRulesCount
+ RedirectConfsCount = $appGW.redirectConfsCount
+ StatusDate = $statusDate
+ Tags = $appGW.tags
+ }
+
+ $allAppGWs += $logentry
+}
+
+<#
+ Actually exporting CSV to Azure Storage
+#>
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-appgws-$subscriptionSuffix.csv"
+
+$allAppGWs | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..8e4fed27d
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAppServicePlanPropertiesToBlobStorage.ps1
@@ -0,0 +1,209 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGAppServicePlanContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argappserviceplanexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allasp = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$aspTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for App Service Plan properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'microsoft.web/serverfarms'
+ | extend skuName = sku.name, skuTier = sku.tier, skuCapacity = sku.capacity, skuFamily = sku.family, skuSize = sku.size
+ | extend computeMode = properties.computeMode, zoneRedundant = properties.zoneRedundant
+ | extend numberOfWorkers = properties.numberOfWorkers, currentNumberOfWorkers = properties.currentNumberOfWorkers, maximumNumberOfWorkers = properties.maximumNumberOfWorkers
+ | extend numberOfSites = properties.numberOfSites, planName = properties.planName
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $asp = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $asp = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($asp -and $asp.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $asp = $asp.Data
+ }
+ $resultsCount = $asp.Count
+ $resultsSoFar += $resultsCount
+ $aspTotal += $asp
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($aspTotal.Count) App Service Plan entries"
+
+foreach ($asplan in $aspTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $asplan.tenantId
+ SubscriptionGuid = $asplan.subscriptionId
+ ResourceGroupName = $asplan.resourceGroup.ToLower()
+ ZoneRedundant = $asplan.zoneRedundant
+ Location = $asplan.location
+ AppServicePlanName = $asplan.name.ToLower()
+ InstanceId = $asplan.id.ToLower()
+ Kind = $asplan.kind
+ SkuName = $asplan.skuName
+ SkuTier = $asplan.skuTier
+ SkuCapacity = $asplan.skuCapacity
+ SkuFamily = $asplan.skuFamily
+ SkuSize = $asplan.skuSize
+ ComputeMode = $asplan.computeMode
+ NumberOfWorkers = $asplan.numberOfWorkers
+ CurrentNumberOfWorkers = $asplan.currentNumberOfWorkers
+ MaximumNumberOfWorkers = $asplan.maximumNumberOfWorkers
+ NumberOfSites = $asplan.numberOfSites
+ PlanName = $asplan.planName
+ Tags = $asplan.tags
+ StatusDate = $statusDate
+ }
+
+ $allasp += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-asp-$subscriptionSuffix.csv"
+
+$allasp | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..f62883987
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGAvailabilitySetPropertiesToBlobStorage.ps1
@@ -0,0 +1,198 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGAvailabilitySetContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argavailsetexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allAvSets = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$avSetsTotal = @()
+$resultsSoFar = 0
+
+Write-Output "Querying for Availability Set properties"
+
+$argQuery = @"
+resources
+| where type =~ 'Microsoft.Compute/availabilitySets'
+| project id, name, location, resourceGroup, subscriptionId, tenantId, skuName = tostring(sku.name), faultDomains = tostring(properties.platformFaultDomainCount), updateDomains = tostring(properties.platformUpdateDomainCount), vmCount = array_length(properties.virtualMachines), tags, zones
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $avSets = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $avSets = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($avSets -and $avSets.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $avSets = $avSets.Data
+ }
+ $resultsCount = $avSets.Count
+ $resultsSoFar += $resultsCount
+ $avSetsTotal += $avSets
+
+} while ($resultsCount -eq $ARGPageSize)
+
+Write-Output "Found $($avSetsTotal.Count) Availability Set entries"
+
+<#
+ Building CSV entries
+#>
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+foreach ($avSet in $avSetsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $avSet.tenantId
+ SubscriptionGuid = $avSet.subscriptionId
+ ResourceGroupName = $avSet.resourceGroup.ToLower()
+ InstanceName = $avSet.name.ToLower()
+ InstanceId = $avSet.id.ToLower()
+ SkuName = $avSet.skuName
+ Location = $avSet.location
+ FaultDomains = $avSet.faultDomains
+ UpdateDomains = $avSet.updateDomains
+ VmCount = $avSet.vmCount
+ StatusDate = $statusDate
+ Tags = $avSet.tags
+ Zones = $avSet.zones
+ }
+
+ $allAvSets += $logentry
+}
+
+<#
+ Actually exporting CSV to Azure Storage
+#>
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-availsets-$subscriptionSuffix.csv"
+
+$allAvSets | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..f1eadfc1b
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGLoadBalancerPropertiesToBlobStorage.ps1
@@ -0,0 +1,222 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGLoadBalancerContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "arglbexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allLBs = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$LBsTotal = @()
+$resultsSoFar = 0
+
+Write-Output "Querying for Load Balancer properties"
+
+$argQuery = @"
+resources
+| where type =~ 'Microsoft.Network/loadBalancers'
+| extend lbType = iif(properties.frontendIPConfigurations contains 'publicIPAddress', 'Public', iif(properties.frontendIPConfigurations contains 'privateIPAddress', 'Internal', 'Unknown'))
+| extend lbRulesCount = array_length(properties.loadBalancingRules)
+| extend frontendIPsCount = array_length(properties.frontendIPConfigurations)
+| extend inboundNatRulesCount = array_length(properties.inboundNatRules)
+| extend outboundRulesCount = array_length(properties.outboundRules)
+| extend inboundNatPoolsCount = array_length(properties.inboundNatPools)
+| extend backendPoolsCount = array_length(properties.backendAddressPools)
+| extend probesCount = array_length(properties.probes)
+| project id, name, resourceGroup, subscriptionId, tenantId, location, skuName = sku.name, skuTier = sku.tier, lbType, lbRulesCount, frontendIPsCount, inboundNatRulesCount, outboundRulesCount, inboundNatPoolsCount, backendPoolsCount, probesCount, tags
+| join kind=leftouter (
+ resources
+ | where type =~ 'Microsoft.Network/loadBalancers'
+ | mvexpand backendPools = properties.backendAddressPools
+ | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)
+ | extend backendAddressesCount = array_length(backendPools.properties.loadBalancerBackendAddresses)
+ | summarize backendIPCount = sum(backendIPCount), backendAddressesCount = sum(backendAddressesCount) by id
+) on id
+| project-away id1
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $LBs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $LBs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($LBs -and $LBs.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $LBs = $LBs.Data
+ }
+ $resultsCount = $LBs.Count
+ $resultsSoFar += $resultsCount
+ $LBsTotal += $LBs
+
+} while ($resultsCount -eq $ARGPageSize)
+
+Write-Output "Found $($LBsTotal.Count) Load Balancer entries"
+
+<#
+ Building CSV entries
+#>
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+foreach ($lb in $LBsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $lb.tenantId
+ SubscriptionGuid = $lb.subscriptionId
+ ResourceGroupName = $lb.resourceGroup.ToLower()
+ InstanceName = $lb.name.ToLower()
+ InstanceId = $lb.id.ToLower()
+ SkuName = $lb.skuName
+ SkuTier = $lb.skuTier
+ Location = $lb.location
+ LbType = $lb.lbType
+ LbRulesCount = $lb.lbRulesCount
+ InboundNatRulesCount = $lb.inboundNatRulesCount
+ OutboundRulesCount = $lb.outboundRulesCount
+ FrontendIPsCount = $lb.frontendIPsCount
+ BackendIPCount = $lb.backendIPCount
+ BackendAddressesCount = $lb.backendAddressesCount
+ InboundNatPoolsCount = $lb.inboundNatPoolsCount
+ BackendPoolsCount = $lb.backendPoolsCount
+ ProbesCount = $lb.probesCount
+ StatusDate = $statusDate
+ Tags = $lb.tags
+ }
+
+ $allLBs += $logentry
+}
+
+<#
+ Actually exporting CSV to Azure Storage
+#>
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-lbs-$subscriptionSuffix.csv"
+
+$allLBs | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..1fd66721f
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGManagedDisksPropertiesToBlobStorage.ps1
@@ -0,0 +1,232 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGDiskContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argdiskexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$alldisks = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$mdisksTotal = @()
+$resultsSoFar = 0
+
+<#
+ Getting all Managed Disks properties with Azure Resource Graph query
+#>
+
+Write-Output "Querying for ARM Managed Disks properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'Microsoft.Compute/disks'
+ | extend DiskId = tolower(id), OwnerVmId = tolower(managedBy)
+ | join kind=leftouter (
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines' and array_length(properties.storageProfile.dataDisks) > 0
+ | extend OwnerVmId = tolower(id)
+ | mv-expand DataDisks = properties.storageProfile.dataDisks
+ | extend DiskId = tolower(DataDisks.managedDisk.id), diskCaching = tostring(DataDisks.caching), diskType = 'Data'
+ | project DiskId, OwnerVmId, diskCaching, diskType
+ | union (
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | extend OwnerVmId = tolower(id)
+ | extend DiskId = tolower(properties.storageProfile.osDisk.managedDisk.id), diskCaching = tostring(properties.storageProfile.osDisk.caching), diskType = 'OS'
+ | project DiskId, OwnerVmId, diskCaching, diskType
+ )
+ ) on OwnerVmId, DiskId
+ | project-away OwnerVmId, DiskId, OwnerVmId1, DiskId1
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $mdisks = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $mdisks = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($mdisks -and $mdisks.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $mdisks = $mdisks.Data
+ }
+ $resultsCount = $mdisks.Count
+ $resultsSoFar += $resultsCount
+ $mdisksTotal += $mdisks
+
+} while ($resultsCount -eq $ARGPageSize)
+
+Write-Output "Found $($mdisksTotal.Count) Managed Disk entries"
+
+<#
+ Building CSV entries
+#>
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+foreach ($disk in $mdisksTotal)
+{
+ $ownerVmId = $null
+ if ($null -ne $disk.managedBy)
+ {
+ $ownerVmId = $disk.managedBy.ToLower()
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $disk.tenantId
+ SubscriptionGuid = $disk.subscriptionId
+ ResourceGroupName = $disk.resourceGroup.ToLower()
+ DiskName = $disk.name.ToLower()
+ InstanceId = $disk.id.ToLower()
+ Location = $disk.location
+ OwnerVMId = $ownerVmId
+ DeploymentModel = "Managed"
+ DiskType = $disk.diskType
+ TimeCreated = $disk.properties.timeCreated
+ DiskIOPS = $disk.properties.diskIOPSReadWrite
+ DiskThroughput = $disk.properties.diskMBpsReadWrite
+ DiskTier = $disk.properties.tier
+ DiskState = $disk.properties.diskState
+ EncryptionType = $disk.properties.encryption.type
+ Zones = $disk.zones
+ Caching = $disk.diskCaching
+ DiskSizeGB = $disk.properties.diskSizeGB
+ SKU = $disk.sku.name
+ StatusDate = $statusDate
+ Tags = $disk.tags
+ }
+
+ $alldisks += $logentry
+}
+
+<#
+ Actually exporting CSV to Azure Storage
+#>
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-disks-$subscriptionSuffix.csv"
+
+$alldisks | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..d5b91b94c
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGNICPropertiesToBlobStorage.ps1
@@ -0,0 +1,235 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGNICContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argnicexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allnics = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$nicsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for NIC properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'microsoft.network/networkinterfaces'
+ | extend isPrimary = properties.primary
+ | extend enableAcceleratedNetworking = properties.enableAcceleratedNetworking
+ | extend enableIPForwarding = properties.enableIPForwarding
+ | extend tapConfigurationsCount = array_length(properties.tapConfigurations)
+ | extend hostedWorkloadsCount = array_length(properties.hostedWorkloads)
+ | extend internalDomainNameSuffix = properties.dnsSettings.internalDomainNameSuffix
+ | extend appliedDnsServers = properties.dnsSettings.appliedDnsServers
+ | extend dnsServers = properties.dnsSettings.dnsServers
+ | extend ownerVMId = tolower(properties.virtualMachine.id)
+ | extend ownerPEId = tolower(properties.privateEndpoint.id)
+ | extend macAddress = properties.macAddress
+ | extend nicType = properties.nicType
+ | extend nicNsgId = tolower(properties.networkSecurityGroup.id)
+ | mv-expand ipconfigs = properties.ipConfigurations
+ | project-away properties
+ | extend privateIPAddressVersion = tostring(ipconfigs.properties.privateIPAddressVersion)
+ | extend privateIPAllocationMethod = tostring(ipconfigs.properties.privateIPAllocationMethod)
+ | extend isIPConfigPrimary = tostring(ipconfigs.properties.primary)
+ | extend privateIPAddress = tostring(ipconfigs.properties.privateIPAddress)
+ | extend publicIPId = tolower(ipconfigs.properties.publicIPAddress.id)
+ | extend IPConfigName = tostring(ipconfigs.name)
+ | extend subnetId = tolower(ipconfigs.properties.subnet.id)
+ | project-away ipconfigs
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $nics = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $nics = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($nics -and $nics.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $nics = $nics.Data
+ }
+ $resultsCount = $nics.Count
+ $resultsSoFar += $resultsCount
+ $nicsTotal += $nics
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($nicsTotal.Count) ARM VNet nic entries"
+
+foreach ($nic in $nicsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $nic.tenantId
+ SubscriptionGuid = $nic.subscriptionId
+ ResourceGroupName = $nic.resourceGroup.ToLower()
+ Location = $nic.location
+ Name = $nic.name.ToLower()
+ InstanceId = $nic.id.ToLower()
+ IsPrimary = $nic.isPrimary
+ EnableAcceleratedNetworking = $nic.enableAcceleratedNetworking
+ EnableIPForwarding = $nic.enableIPForwarding
+ TapConfigurationsCount = $nic.tapConfigurationsCount
+ HostedWorkloadsCount = $nic.hostedWorkloadsCount
+ InternalDomainNameSuffix = $nic.internalDomainNameSuffix
+ AppliedDnsServers = $nic.appliedDnsServers
+ DnsServers = $nic.dnsServers
+ OwnerVMId = $nic.ownerVMId
+ OwnerPEId = $nic.ownerPEId
+ MacAddress = $nic.macAddress
+ NicType = $nic.nicType
+ NicNSGId = $nic.nicNsgId
+ PrivateIPAddressVersion = $nic.privateIPAddressVersion
+ PrivateIPAllocationMethod = $nic.privateIPAllocationMethod
+ IsIPConfigPrimary = $nic.isIPConfigPrimary
+ PrivateIPAddress = $nic.privateIPAddress
+ PublicIPId = $nic.publicIPId
+ IPConfigName = $nic.IPConfigName
+ SubnetId = $nic.subnetId
+ Tags = $nic.tags
+ StatusDate = $statusDate
+ }
+
+ $allnics += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-nics-$subscriptionSuffix.csv"
+
+$allnics | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..b5da838ea
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGNSGPropertiesToBlobStorage.ps1
@@ -0,0 +1,217 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGNSGContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argnsgexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allnsgRules = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$nsgRulesTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for NSG properties"
+
+$argQuery = @"
+resources
+| where type =~ 'Microsoft.Network/networkSecurityGroups'
+| extend nicCount = iif(isnotempty(properties.networkInterfaces),array_length(properties.networkInterfaces),0)
+| extend subnetCount = iif(isnotempty(properties.subnets),array_length(properties.subnets),0)
+| mvexpand securityRules = properties.securityRules
+| extend ruleName = tolower(securityRules.name)
+| extend ruleProtocol = tolower(securityRules.properties.protocol)
+| extend ruleDirection = tolower(securityRules.properties.direction)
+| extend rulePriority = toint(securityRules.properties.priority)
+| extend ruleAccess = tolower(securityRules.properties.access)
+| extend ruleDestinationAddresses = tolower(iif(array_length(securityRules.properties.destinationAddressPrefixes) > 0,strcat_array(securityRules.properties.destinationAddressPrefixes, ','),securityRules.properties.destinationAddressPrefix))
+| extend ruleSourceAddresses = tolower(iif(array_length(securityRules.properties.sourceAddressPrefixes) > 0,strcat_array(securityRules.properties.sourceAddressPrefixes, ','),securityRules.properties.sourceAddressPrefix))
+| extend ruleDestinationPorts = iif(array_length(securityRules.properties.destinationPortRanges) > 0,strcat_array(securityRules.properties.destinationPortRanges, ','),securityRules.properties.destinationPortRange)
+| extend ruleSourcePorts = iif(array_length(securityRules.properties.sourcePortRanges) > 0,strcat_array(securityRules.properties.sourcePortRanges, ','),securityRules.properties.sourcePortRange)
+| extend ruleId = tolower(securityRules.id)
+| project-away securityRules, properties
+| order by ruleId asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $nsgRules = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $nsgRules = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($nsgRules -and $nsgRules.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $nsgRules = $nsgRules.Data
+ }
+ $resultsCount = $nsgRules.Count
+ $resultsSoFar += $resultsCount
+ $nsgRulesTotal += $nsgRules
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($nsgRulesTotal.Count) ARM NSG entries"
+
+foreach ($nsgRule in $nsgRulesTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $nsgRule.tenantId
+ SubscriptionGuid = $nsgRule.subscriptionId
+ ResourceGroupName = $nsgRule.resourceGroup.ToLower()
+ Location = $nsgRule.location
+ NSGName = $nsgRule.name.ToLower()
+ InstanceId = $nsgRule.id.ToLower()
+ NicCount = $nsgRule.nicCount
+ SubnetCount = $nsgRule.subnetCount
+ RuleName = $nsgRule.ruleName
+ RuleProtocol = $nsgRule.ruleProtocol
+ RuleDirection = $nsgRule.ruleDirection
+ RulePriority = $nsgRule.rulePriority
+ RuleAccess = $nsgRule.ruleAccess
+ RuleDestinationAddresses = $nsgRule.ruleDestinationAddresses
+ RuleSourceAddresses = $nsgRule.ruleSourceAddresses
+ RuleDestinationPorts = $nsgRule.ruleDestinationPorts
+ RuleSourcePorts = $nsgRule.ruleSourcePorts
+ Tags = $nsgRule.tags
+ StatusDate = $statusDate
+ }
+
+ $allnsgRules += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-nsgrules-$subscriptionSuffix.csv"
+
+$allnsgRules | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..063d03cb2
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGPublicIpPropertiesToBlobStorage.ps1
@@ -0,0 +1,275 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGPublicIpContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argpublicipexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allpips = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$pipsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for ARM Public IP properties"
+
+$argQuery = @"
+resources
+| where type =~ 'microsoft.network/publicipaddresses'
+| extend skuName = tolower(sku.name)
+| extend skuTier = tolower(sku.tier)
+| extend allocationMethod = tolower(properties.publicIPAllocationMethod)
+| extend addressVersion = tolower(properties.publicIPAddressVersion)
+| extend associatedResourceId = iif(isnotempty(properties.ipConfiguration.id),tolower(properties.ipConfiguration.id),tolower(properties.natGateway.id))
+| extend ipAddress = tostring(properties.ipAddress)
+| extend fqdn = tolower(properties.dnsSettings.fqdn)
+| extend publicIpPrefixId = tostring(properties.publicIPPrefix.id)
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $pips = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $pips = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($pips -and $pips.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $pips = $pips.Data
+ }
+ $resultsCount = $pips.Count
+ $resultsSoFar += $resultsCount
+ $pipsTotal += $pips
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($pipsTotal.Count) ARM Public IP entries"
+
+foreach ($pip in $pipsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $pip.tenantId
+ SubscriptionGuid = $pip.subscriptionId
+ ResourceGroupName = $pip.resourceGroup.ToLower()
+ Location = $pip.location
+ Name = $pip.name.ToLower()
+ InstanceId = $pip.id.ToLower()
+ Model = "ARM"
+ SkuName = $pip.skuName
+ SkuTier = $pip.skuTier
+ AllocationMethod = $pip.allocationMethod
+ AddressVersion = $pip.addressVersion
+ AssociatedResourceId = $pip.associatedResourceId
+ PublicIpPrefixId = $pip.publicIpPrefixId
+ IPAddress = $pip.ipAddress
+ FQDN = $pip.fqdn
+ Zones = $pip.zones
+ Tags = $pip.tags
+ StatusDate = $statusDate
+ }
+
+ $allpips += $logentry
+}
+
+$pipsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for Classic Reserved IP properties"
+
+$argQuery = @"
+resources
+| where type =~ 'microsoft.classicnetwork/reservedips'
+| extend ipAddress = tostring(properties.ipAddress)
+| extend allocationMethod = 'static'
+| extend addressVersion = 'ipv4'
+| extend associatedResourceId = tolower(properties.attachedTo.id)
+| extend ipAddress = tostring(properties.ipAddress)
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $pips = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $pips = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($pips -and $pips.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $pips = $pips.Data
+ }
+ $resultsCount = $pips.Count
+ $resultsSoFar += $resultsCount
+ $pipsTotal += $pips
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($pipsTotal.Count) Classic Reserved IP entries"
+
+foreach ($pip in $pipsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $pip.tenantId
+ SubscriptionGuid = $pip.subscriptionId
+ ResourceGroupName = $pip.resourceGroup.ToLower()
+ Location = $pip.location
+ Name = $pip.name.ToLower()
+ InstanceId = $pip.id.ToLower()
+ Model = "Classic"
+ AllocationMethod = $pip.allocationMethod
+ AddressVersion = $pip.addressVersion
+ AssociatedResourceId = $pip.associatedResourceId
+ IPAddress = $pip.ipAddress
+ StatusDate = $statusDate
+ }
+
+ $allpips += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-publicips-$subscriptionSuffix.csv"
+
+$allpips | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..329b5031c
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGResourceContainersPropertiesToBlobStorage.ps1
@@ -0,0 +1,272 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGResourceContainersContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argrescontainersexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allResourceContainers = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$rgsTotal = @()
+$subsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for resource groups..."
+
+$argQuery = @"
+ resourcecontainers
+ | where type == "microsoft.resources/subscriptions/resourcegroups"
+ | join kind=leftouter (
+ resources
+ | summarize ResourceCount= count() by subscriptionId, resourceGroup
+ ) on subscriptionId, resourceGroup
+ | extend ResourceCount = iif(isempty(ResourceCount), 0, ResourceCount)
+ | project id, name, type, tenantId, location, subscriptionId, managedBy, tags, properties, ResourceCount
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $rgs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $rgs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($rgs -and $rgs.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $rgs = $rgs.Data
+ }
+ $resultsCount = $rgs.Count
+ $resultsSoFar += $resultsCount
+ $rgsTotal += $rgs
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$resultsSoFar = 0
+
+Write-Output "Querying for subscriptions"
+
+$argQuery = @"
+ resourcecontainers
+ | where type == "microsoft.resources/subscriptions"
+ | join kind=leftouter (
+ resources
+ | summarize ResourceCount= count() by subscriptionId
+ ) on subscriptionId
+ | extend ResourceCount = iif(isempty(ResourceCount), 0, ResourceCount)
+ | project id, name, type, tenantId, subscriptionId, managedBy, tags, properties, ResourceCount
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $subs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $subs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($subs -and $subs.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $subs = $subs.Data
+ }
+ $resultsCount = $subs.Count
+ $resultsSoFar += $resultsCount
+ $subsTotal += $subs
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($rgsTotal.Count) RG entries"
+
+foreach ($rg in $rgsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $rg.tenantId
+ SubscriptionGuid = $rg.subscriptionId
+ Location = $rg.location
+ ContainerType = $rg.type
+ ContainerName = $rg.name.ToLower()
+ InstanceId = $rg.id.ToLower()
+ ResourceCount = $rg.ResourceCount
+ ManagedBy = $rg.managedBy
+ ContainerProperties = $rg.properties | ConvertTo-Json -Compress
+ Tags = $rg.tags
+ StatusDate = $statusDate
+ }
+
+ $allResourceContainers += $logentry
+}
+
+Write-Output "Building $($subsTotal.Count) subscription entries"
+
+foreach ($sub in $subsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $sub.tenantId
+ SubscriptionGuid = $sub.subscriptionId
+ Location = $sub.location
+ ContainerType = $sub.type
+ ContainerName = $sub.name.ToLower()
+ InstanceId = $sub.id.ToLower()
+ ResourceCount = $sub.ResourceCount
+ ManagedBy = $sub.managedBy
+ ContainerProperties = $sub.properties | ConvertTo-Json -Compress
+ Tags = $sub.tags
+ StatusDate = $statusDate
+ }
+
+ $allResourceContainers += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$jsonExportPath = "$today-rescontainers-$subscriptionSuffix.json"
+$csvExportPath = "$today-rescontainers-$subscriptionSuffix.csv"
+
+$allResourceContainers | ConvertTo-Json -Depth 3 -Compress | Out-File $jsonExportPath
+Write-Output "Exported to JSON: $($allResourceContainers.Count) lines"
+$allResourceContainersJson = Get-Content -Path $jsonExportPath | ConvertFrom-Json
+Write-Output "JSON Import: $($allResourceContainersJson.Count) lines"
+$allResourceContainersJson | Export-Csv -NoTypeInformation -Path $csvExportPath
+Write-Output "Export to $csvExportPath"
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..cdb1e3b36
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGSqlDatabasePropertiesToBlobStorage.ps1
@@ -0,0 +1,204 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGSqlDatabaseContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argsqldbexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$alldbs = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$dbsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for SQL Databases properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'microsoft.sql/servers/databases' and name != 'master'
+ | extend skuName = sku.name, skuTier = sku.tier, skuCapacity = sku.capacity
+ | extend storageAccountType = properties.storageAccountType, licenseType = properties.licenseType, serviceObjectiveName = properties.currentServiceObjectiveName
+ | extend zoneRedundant = properties.zoneRedundant, maxSizeBytes = properties.maxSizeBytes, maxLogSizeBytes = properties.maxLogSizeBytes
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $dbs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $dbs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($dbs -and $dbs.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $dbs = $dbs.Data
+ }
+ $resultsCount = $dbs.Count
+ $resultsSoFar += $resultsCount
+ $dbsTotal += $dbs
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($dbsTotal.Count) SQL Database entries"
+
+foreach ($db in $dbsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $db.tenantId
+ SubscriptionGuid = $db.subscriptionId
+ ResourceGroupName = $db.resourceGroup.ToLower()
+ ZoneRedundant = $db.zoneRedundant
+ Location = $db.location
+ DBName = $db.name.ToLower()
+ InstanceId = $db.id.ToLower()
+ SkuName = $db.skuName
+ SkuTier = $db.skuTier
+ SkuCapacity = $db.skuCapacity
+ ServiceObjectiveName = $db.serviceObjectiveName
+ StorageAccountType = $db.storageAccountType
+ LicenseType = $db.licenseType
+ MaxSizeBytes = $db.maxSizeBytes
+ MaxLogSizeBytes = $db.maxLogSizeBytes
+ Tags = $db.tags
+ StatusDate = $statusDate
+ }
+
+ $alldbs += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-sqldbs-$subscriptionSuffix.csv"
+
+$alldbs | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..734e05a02
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGUnmanagedDisksPropertiesToBlobStorage.ps1
@@ -0,0 +1,236 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGVhdContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argvhdexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$alldisks = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$mdisksTotal = @()
+$resultsSoFar = 0
+
+Write-Output "Querying for ARM Unmanaged OS Disks properties"
+
+$argQuery = @"
+resources
+| where type =~ 'Microsoft.Compute/virtualMachines' and isnull(properties.storageProfile.osDisk.managedDisk)
+| extend diskType = 'OS', diskCaching = tostring(properties.storageProfile.osDisk.caching), diskSize = tostring(properties.storageProfile.osDisk.diskSizeGB)
+| extend vhdUriParts = split(tostring(properties.storageProfile.osDisk.vhd.uri),'/')
+| extend diskStorageAccountName = tostring(split(vhdUriParts[2],'.')[0]), diskContainerName = tostring(vhdUriParts[3]), diskVhdName = tostring(vhdUriParts[4])
+| order by id, diskStorageAccountName, diskContainerName, diskVhdName
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $mdisks = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $mdisks = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($mdisks -and $mdisks.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $mdisks = $mdisks.Data
+ }
+ $resultsCount = $mdisks.Count
+ $resultsSoFar += $resultsCount
+ $mdisksTotal += $mdisks
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$resultsSoFar = 0
+
+Write-Output "Found $($mdisksTotal.Count) Unmanaged OS Disk entries"
+
+Write-Output "Querying for ARM Unmanaged Data Disks properties"
+
+$argQuery = @"
+resources
+| where type =~ 'Microsoft.Compute/virtualMachines' and isnull(properties.storageProfile.osDisk.managedDisk)
+| mvexpand dataDisks = properties.storageProfile.dataDisks
+| extend diskType = 'Data', diskCaching = tostring(dataDisks.caching), diskSize = tostring(dataDisks.diskSizeGB)
+| extend vhdUriParts = split(tostring(dataDisks.vhd.uri),'/')
+| extend diskStorageAccountName = tostring(split(vhdUriParts[2],'.')[0]), diskContainerName = tostring(vhdUriParts[3]), diskVhdName = tostring(vhdUriParts[4])
+| order by id, diskStorageAccountName, diskContainerName, diskVhdName
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $mdisks = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $mdisks = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($mdisks -and $mdisks.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $mdisks = $mdisks.Data
+ }
+ $resultsCount = $mdisks.Count
+ $resultsSoFar += $resultsCount
+ $mdisksTotal += $mdisks
+
+} while ($resultsCount -eq $ARGPageSize)
+
+Write-Output "Found overall $($mdisksTotal.Count) Unmanaged Disk entries"
+
+<#
+ Building CSV entries
+#>
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+foreach ($disk in $mdisksTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $disk.tenantId
+ SubscriptionGuid = $disk.subscriptionId
+ ResourceGroupName = $disk.resourceGroup.ToLower()
+ DiskName = $disk.diskVhdName.ToLower()
+ InstanceId = ($disk.diskStorageAccountName + "/" + $disk.diskContainerName + "/" + $disk.diskVhdName).ToLower()
+ OwnerVMId = $disk.id.ToLower()
+ Location = $disk.location
+ DeploymentModel = "Unmanaged"
+ DiskType = $disk.diskType
+ Caching = $disk.diskCaching
+ DiskSizeGB = $disk.diskSize
+ StatusDate = $statusDate
+ Tags = $disk.tags
+ }
+
+ $alldisks += $logentry
+}
+
+<#
+ Actually exporting CSV to Azure Storage
+#>
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-vhds-$subscriptionSuffix.csv"
+
+$alldisks | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..6a2878c3b
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVMSSPropertiesToBlobStorage.ps1
@@ -0,0 +1,239 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGVMSSContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argvmssexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+Write-Output "Getting VM sizes details for $referenceRegion"
+$sizes = Get-AzVMSize -Location $referenceRegion
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allvmss = @()
+
+if ($TargetSubscription)
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = "-" + $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$armVmssTotal = @()
+
+$resultsSoFar = 0
+
+$argQuery = @"
+resources
+| where type =~ 'microsoft.compute/virtualmachinescalesets'
+| project id, tenantId, name, location, resourceGroup, subscriptionId, skUName = tostring(sku.name),
+ computerNamePrefix = tostring(properties.virtualMachineProfile.osProfile.computerNamePrefix),
+ usesManagedDisks = iif(isnull(properties.virtualMachineProfile.storageProfile.osDisk.managedDisk), 'false', 'true'),
+ capacity = tostring(sku.capacity), priority = tostring(properties.virtualMachineProfile.priority), tags, zones,
+ osType = iif(isnotnull(properties.virtualMachineProfile.osProfile.linuxConfiguration), "Linux", "Windows"),
+ osDiskSize = tostring(properties.virtualMachineProfile.storageProfile.osDisk.diskSizeGB),
+ osDiskCaching = tostring(properties.virtualMachineProfile.storageProfile.osDisk.caching),
+ osDiskSKU = tostring(properties.virtualMachineProfile.storageProfile.osDisk.managedDisk.storageAccountType),
+ dataDiskCount = iif(isnotnull(properties.virtualMachineProfile.storageProfile.dataDisks), array_length(properties.virtualMachineProfile.storageProfile.dataDisks), 0),
+ nicCount = array_length(properties.virtualMachineProfile.networkProfile.networkInterfaceConfigurations),
+ imagePublisher = iif(isnotempty(properties.virtualMachineProfile.storageProfile.imageReference.publisher),tostring(properties.virtualMachineProfile.storageProfile.imageReference.publisher),'Custom'),
+ imageOffer = iif(isnotempty(properties.virtualMachineProfile.storageProfile.imageReference.offer),tostring(properties.virtualMachineProfile.storageProfile.imageReference.offer),tostring(properties.virtualMachineProfile.storageProfile.imageReference.id)),
+ imageSku = tostring(properties.virtualMachineProfile.storageProfile.imageReference.sku),
+ imageVersion = tostring(properties.virtualMachineProfile.storageProfile.imageReference.version),
+ imageExactVersion = tostring(properties.virtualMachineProfile.storageProfile.imageReference.exactVersion),
+ singlePlacementGroup = tostring(properties.singlePlacementGroup),
+ upgradePolicy = tostring(properties.upgradePolicy.mode),
+ overProvision = tostring(properties.overprovision),
+ platformFaultDomainCount = tostring(properties.platformFaultDomainCount),
+ zoneBalance = tostring(properties.zoneBalance)
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $armVmss = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $armVmss = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+
+ if ($armVmss -and $armVmss.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $armVmss = $armVmss.Data
+ }
+ $resultsCount = $armVmss.Count
+ $resultsSoFar += $resultsCount
+ $armVmssTotal += $armVmss
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($armVmssTotal.Count) VMSS entries"
+
+foreach ($vmss in $armVmssTotal)
+{
+ $vmSize = $sizes | Where-Object {$_.name -eq $vmss.skUName}
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $vmss.tenantId
+ SubscriptionGuid = $vmss.subscriptionId
+ ResourceGroupName = $vmss.resourceGroup.ToLower()
+ Zones = $vmss.zones
+ Location = $vmss.location
+ VMSSName = $vmss.name.ToLower()
+ ComputerNamePrefix = $vmss.computerNamePrefix.ToLower()
+ InstanceId = $vmss.id.ToLower()
+ VMSSSize = $vmSize.name.ToLower()
+ CoresCount = $vmSize.NumberOfCores
+ MemoryMB = $vmSize.MemoryInMB
+ OSType = $vmss.osType
+ DataDiskCount = $vmss.dataDiskCount
+ NicCount = $vmss.nicCount
+ StatusDate = $statusDate
+ Tags = $vmss.tags
+ Capacity = $vmss.capacity
+ Priority = $vmss.priority
+ OSDiskSize = $vmss.osDiskSize
+ OSDiskCaching = $vmss.osDiskCaching
+ OSDiskSKU = $vmss.osDiskSKU
+ SinglePlacementGroup = $vmss.singlePlacementGroup
+ UpgradePolicy = $vmss.upgradePolicy
+ OverProvision = $vmss.overProvision
+ PlatformFaultDomainCount = $vmss.platformFaultDomainCount
+ ZoneBalance = $vmss.zoneBalance
+ UsesManagedDisks = $vmss.usesManagedDisks
+ ImagePublisher = $vmss.imagePublisher
+ ImageOffer = $vmss.imageOffer
+ ImageSku = $vmss.imageSku
+ ImageVersion = $vmss.imageVersion
+ ImageExactVersion = $vmss.imageExactVersion
+ }
+
+ $allvmss += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-vmss-$subscriptionSuffix.csv"
+
+$allvmss | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..0a252e721
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVNetPropertiesToBlobStorage.ps1
@@ -0,0 +1,308 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGVNetContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argvnetexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allsubnets = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$subnetsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for ARM VNet properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'microsoft.network/virtualnetworks'
+ | mv-expand subnets = properties.subnets limit 400
+ | extend peeringsCount = array_length(properties.virtualNetworkPeerings)
+ | extend vnetPrefixes = properties.addressSpace.addressPrefixes
+ | extend dnsServers = properties.dhcpOptions.dnsServers
+ | extend enableDdosProtection = properties.enableDdosProtection
+ | project-away properties
+ | extend subnetPrefix = tostring(subnets.properties.addressPrefix)
+ | extend subnetDelegationsCount = array_length(subnets.properties.delegations)
+ | extend subnetUsedIPs = iif(isnotempty(subnets.properties.ipConfigurations), array_length(subnets.properties.ipConfigurations), 0)
+ | extend subnetTotalPrefixIPs = pow(2, 32 - toint(split(subnetPrefix,'/')[1])) - 5
+ | extend subnetNsgId = tolower(subnets.properties.networkSecurityGroup.id)
+ | project id, vnetName = name, resourceGroup, subscriptionId, tenantId, location, vnetPrefixes, dnsServers, subnetName = tolower(tostring(subnets.name)), subnetPrefix, subnetDelegationsCount, subnetTotalPrefixIPs, subnetUsedIPs, subnetNsgId, peeringsCount, enableDdosProtection, tags
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $subnets = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $subnets = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($subnets -and $subnets.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $subnets = $subnets.Data
+ }
+ $resultsCount = $subnets.Count
+ $resultsSoFar += $resultsCount
+ $subnetsTotal += $subnets
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($subnetsTotal.Count) ARM VNet subnet entries"
+
+foreach ($subnet in $subnetsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $subnet.tenantId
+ SubscriptionGuid = $subnet.subscriptionId
+ ResourceGroupName = $subnet.resourceGroup.ToLower()
+ Location = $subnet.location
+ VNetName = $subnet.vnetName.ToLower()
+ InstanceId = $subnet.id.ToLower()
+ Model = "ARM"
+ VNetPrefixes = $subnet.vnetPrefixes
+ DNSServers = $subnet.dnsServers
+ PeeringsCount = $subnet.peeringsCount
+ EnableDdosProtection = $subnet.enableDdosProtection
+ SubnetName = $subnet.subnetName
+ SubnetPrefix = $subnet.subnetPrefix
+ SubnetDelegationsCount = $subnet.subnetDelegationsCount
+ SubnetTotalPrefixIPs = $subnet.subnetTotalPrefixIPs
+ SubnetUsedIPs = $subnet.subnetUsedIPs
+ SubnetNSGId = $subnet.subnetNsgId
+ Tags = $subnet.tags
+ StatusDate = $statusDate
+ }
+
+ $allsubnets += $logentry
+}
+
+$subnetsTotal = @()
+
+$resultsSoFar = 0
+
+Write-Output "Querying for Classic VNet properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'microsoft.classicnetwork/virtualnetworks'
+ | extend vNetId = tolower(id)
+ | mv-expand subnets = properties.subnets limit 400
+ | extend subnetName = tolower(tostring(subnets.name))
+ | join kind=leftouter (
+ resources
+ | where type =~ 'microsoft.network/virtualnetworks'
+ | mvexpand peerings = properties.virtualNetworkPeerings limit 400
+ | extend vNetId = tolower(tostring(peerings.properties.remoteVirtualNetwork.id))
+ | where vNetId has "microsoft.classicnetwork"
+ | summarize vNetPeerings=count() by vNetId
+ ) on vNetId
+ | extend peeringsCount = iif(isnotempty(vNetPeerings), vNetPeerings, 0)
+ | extend vnetPrefixes = properties.addressSpace.addressPrefixes
+ | extend dnsServers = properties.dhcpOptions.dnsServers
+ | project-away properties
+ | extend subnetPrefix = tostring(subnets.addressPrefix)
+ | join kind=leftouter (
+ resources
+ | where type =~ 'microsoft.classiccompute/virtualmachines'
+ | extend networkProfile = properties.networkProfile
+ | mvexpand subnets = networkProfile.virtualNetwork.subnetNames limit 400
+ | extend subnetName = tolower(tostring(subnets))
+ | project id, vNetId = tolower(tostring(networkProfile.virtualNetwork.id)), subnetName
+ | summarize subnetUsedIPs = count() by vNetId, subnetName
+ ) on vNetId and subnetName
+ | extend subnetUsedIPs = iif(isnotempty(subnetUsedIPs), subnetUsedIPs, 0)
+ | extend subnetTotalPrefixIPs = pow(2, 32 - toint(split(subnetPrefix,'/')[1])) - 5
+ | extend enableDdosProtection = 'false'
+ | project vNetId, vnetName = name, resourceGroup, subscriptionId, tenantId, location, vnetPrefixes, dnsServers, subnetName, subnetPrefix, subnetTotalPrefixIPs, subnetUsedIPs, peeringsCount, enableDdosProtection
+ | order by vNetId asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $subnets = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $subnets = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($subnets -and $subnets.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $subnets = $subnets.Data
+ }
+ $resultsCount = $subnets.Count
+ $resultsSoFar += $resultsCount
+ $subnetsTotal += $subnets
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($subnetsTotal.Count) Classic VNet subnet entries"
+
+foreach ($subnet in $subnetsTotal)
+{
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $subnet.tenantId
+ SubscriptionGuid = $subnet.subscriptionId
+ ResourceGroupName = $subnet.resourceGroup.ToLower()
+ Location = $subnet.location
+ VNetName = $subnet.vnetName.ToLower()
+ InstanceId = $subnet.vNetId.ToLower()
+ Model = "Classic"
+ VNetPrefixes = $subnet.vnetPrefixes
+ DNSServers = $subnet.dnsServers
+ PeeringsCount = $subnet.peeringsCount
+ EnableDdosProtection = $subnet.enableDdosProtection
+ SubnetName = $subnet.subnetName
+ SubnetPrefix = $subnet.subnetPrefix
+ SubnetTotalPrefixIPs = $subnet.subnetTotalPrefixIPs
+ SubnetUsedIPs = $subnet.subnetUsedIPs
+ StatusDate = $statusDate
+ }
+
+ $allsubnets += $logentry
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-vnetsubnets-$subscriptionSuffix.csv"
+
+$allsubnets | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1
new file mode 100644
index 000000000..1a761c8d5
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ARGVirtualMachinesPropertiesToBlobStorage.ps1
@@ -0,0 +1,340 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ARGVMContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "argvmexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+# get list of all VM sizes
+Write-Output "Getting VM sizes details for $referenceRegion"
+$sizes = Get-AzVMSize -Location $referenceRegion
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allvms = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+$armVmsTotal = @()
+$classicVmsTotal = @()
+
+$resultsSoFar = 0
+
+<#
+ Getting all ARM VMs properties with Azure Resource Graph query
+#>
+
+Write-Output "Querying for ARM VM properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'Microsoft.Compute/virtualMachines'
+ | extend dataDiskCount = array_length(properties.storageProfile.dataDisks), nicCount = array_length(properties.networkProfile.networkInterfaces)
+ | extend usesManagedDisks = iif(isnull(properties.storageProfile.osDisk.managedDisk), 'false', 'true')
+ | extend availabilitySetId = tostring(properties.availabilitySet.id)
+ | extend bootDiagnosticsEnabled = tostring(properties.diagnosticsProfile.bootDiagnostics.enabled)
+ | extend bootDiagnosticsStorageAccount = split(split(properties.diagnosticsProfile.bootDiagnostics.storageUri, '/')[2],'.')[0]
+ | extend powerState = tostring(properties.extended.instanceView.powerState.code)
+ | extend imagePublisher = iif(isnotempty(properties.storageProfile.imageReference.publisher),tostring(properties.storageProfile.imageReference.publisher),'Custom')
+ | extend imageOffer = iif(isnotempty(properties.storageProfile.imageReference.offer),tostring(properties.storageProfile.imageReference.offer),tostring(properties.storageProfile.imageReference.id))
+ | extend imageSku = tostring(properties.storageProfile.imageReference.sku)
+ | extend imageVersion = tostring(properties.storageProfile.imageReference.version)
+ | extend imageExactVersion = tostring(properties.storageProfile.imageReference.exactVersion)
+ | extend osName = tostring(properties.extended.instanceView.osName)
+ | extend osVersion = tostring(properties.extended.instanceView.osVersion)
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $armVms = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $armVms = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($armVms -and $armVms.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $armVms = $armVms.Data
+ }
+ $resultsCount = $armVms.Count
+ $resultsSoFar += $resultsCount
+ $armVmsTotal += $armVms
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$resultsSoFar = 0
+
+<#
+ Getting all Classic VMs properties with Azure Resource Graph query
+#>
+
+Write-Output "Querying for Classic VM properties"
+
+$argQuery = @"
+ resources
+ | where type =~ 'Microsoft.ClassicCompute/virtualMachines'
+ | extend dataDiskCount = iif(isnotnull(properties.storageProfile.dataDisks), array_length(properties.storageProfile.dataDisks), 0), nicCount = iif(isnotnull(properties.networkProfile.virtualNetwork.networkInterfaces), array_length(properties.networkProfile.virtualNetwork.networkInterfaces) + 1, 1)
+ | extend usesManagedDisks = 'false'
+ | extend availabilitySetId = tostring(properties.hardwareProfile.availabilitySet)
+ | extend bootDiagnosticsEnabled = tostring(properties.debugProfile.bootDiagnosticsEnabled)
+ | extend bootDiagnosticsStorageAccount = split(split(properties.debugProfile.serialOutputBlobUri, '/')[2],'.')[0]
+ | extend powerState = tostring(properties.instanceView.status)
+ | extend imageOffer = tostring(properties.storageProfile.operatingSystemDisk.sourceImageName)
+ | order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $classicVms = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $classicVms = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($classicVms -and $classicVms.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $classicVms = $classicVms.Data
+ }
+ $resultsCount = $classicVms.Count
+ $resultsSoFar += $resultsCount
+ $classicVmsTotal += $classicVms
+
+} while ($resultsCount -eq $ARGPageSize)
+
+<#
+ Merging ARM + Classic VMs, enriching VM size details and building CSV entries
+#>
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+Write-Output "Building $($armVmsTotal.Count) ARM VM entries"
+
+foreach ($vm in $armVmsTotal)
+{
+ $vmSize = $sizes | Where-Object {$_.name -eq $vm.properties.hardwareProfile.vmSize}
+
+ $avSetId = $null
+ if ($vm.availabilitySetId)
+ {
+ $avSetId = $vm.availabilitySetId.ToLower()
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $vm.tenantId
+ SubscriptionGuid = $vm.subscriptionId
+ ResourceGroupName = $vm.resourceGroup.ToLower()
+ Zones = $vm.zones
+ Location = $vm.location
+ VMName = $vm.name.ToLower()
+ DeploymentModel = 'ARM'
+ InstanceId = $vm.id.ToLower()
+ VMSize = $vm.properties.hardwareProfile.vmSize
+ CoresCount = $vmSize.NumberOfCores
+ MemoryMB = $vmSize.MemoryInMB
+ OSType = $vm.properties.storageProfile.osDisk.osType
+ LicenseType = $vm.properties.licenseType
+ DataDiskCount = $vm.dataDiskCount
+ NicCount = $vm.nicCount
+ UsesManagedDisks = $vm.usesManagedDisks
+ AvailabilitySetId = $avSetId
+ BootDiagnosticsEnabled = $vm.bootDiagnosticsEnabled
+ BootDiagnosticsStorageAccount = $vm.bootDiagnosticsStorageAccount
+ StatusDate = $statusDate
+ PowerState = $vm.powerState
+ ImagePublisher = $vm.imagePublisher
+ ImageOffer = $vm.imageOffer
+ ImageSku = $vm.imageSku
+ ImageVersion = $vm.imageVersion
+ ImageExactVersion = $vm.imageExactVersion
+ OSName = $vm.osName
+ OSVersion = $vm.osVersion
+ Tags = $vm.tags
+ }
+
+ $allvms += $logentry
+}
+
+Write-Output "Building $($classicVmsTotal.Count) Classic VM entries"
+
+foreach ($vm in $classicVmsTotal)
+{
+ $vmSize = $sizes | Where-Object {$_.name -eq $vm.properties.hardwareProfile.size}
+
+ $avSetId = $null
+ if ($vm.availabilitySetId)
+ {
+ $avSetId = $vm.availabilitySetId.ToLower()
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $vm.tenantId
+ SubscriptionGuid = $vm.subscriptionId
+ ResourceGroupName = $vm.resourceGroup.ToLower()
+ VMName = $vm.name.ToLower()
+ DeploymentModel = 'Classic'
+ Location = $vm.location
+ InstanceId = $vm.id.ToLower()
+ VMSize = $vm.properties.hardwareProfile.size
+ CoresCount = $vmSize.NumberOfCores
+ MemoryMB = $vmSize.MemoryInMB
+ OSType = $vm.properties.storageProfile.operatingSystemDisk.operatingSystem
+ LicenseType = "N/A"
+ DataDiskCount = $vm.dataDiskCount
+ NicCount = $vm.nicCount
+ UsesManagedDisks = $vm.usesManagedDisks
+ AvailabilitySetId = $avSetId
+ BootDiagnosticsEnabled = $vm.bootDiagnosticsEnabled
+ BootDiagnosticsStorageAccount = $vm.bootDiagnosticsStorageAccount
+ PowerState = $vm.powerState
+ StatusDate = $statusDate
+ ImagePublisher = $vm.imagePublisher
+ ImageOffer = $vm.imageOffer
+ ImageSku = $vm.imageSku
+ ImageVersion = $vm.imageVersion
+ ImageExactVersion = $vm.imageExactVersion
+ OSName = $vm.osName
+ OSVersion = $vm.osVersion
+ Tags = $null
+ }
+
+ $allvms += $logentry
+}
+
+<#
+ Actually exporting CSV to Azure Storage
+#>
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-vms-$subscriptionSuffix.csv"
+
+$allvms | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1
new file mode 100644
index 000000000..0f4a9903b
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AdvisorRecommendationsToBlobStorage.ps1
@@ -0,0 +1,247 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $targetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_AdvisorContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "advisorexports"
+}
+
+$CategoryFilter = Get-AutomationVariable -Name "AzureOptimization_AdvisorFilter" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($CategoryFilter))
+{
+ $CategoryFilter = "HighAvailability,Security,Performance,OperationalExcellence" # comma-separated list of categories
+}
+$CategoryFilter += ",Cost"
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$ARGPageSize = 1000
+
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $scope = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" -and $_.SubscriptionPolicies.QuotaId -notlike "AAD*" } | ForEach-Object { "$($_.Id)"}
+ $scope = $tenantId
+}
+
+
+<#
+ Getting Advisor recommendations for each subscription and building CSV entries
+#>
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$recommendationsARG = @()
+
+$resultsSoFar = 0
+
+$FinalCategoryFilter = ""
+
+if (-not([string]::IsNullOrEmpty($CategoryFilter)))
+{
+ $categories = $CategoryFilter.Split(',')
+ for ($i = 0; $i -lt $categories.Count; $i++)
+ {
+ $categories[$i] = "'" + $categories[$i] + "'"
+ }
+ $FinalCategoryFilter = " and properties.category in (" + ($categories -join ",") + ")"
+}
+
+$argQuery = @"
+advisorresources
+| where type == 'microsoft.advisor/recommendations'
+| where isnull(properties.suppressionIds)$FinalCategoryFilter
+| extend resourceId = tostring(split(tolower(id),'/providers/microsoft.advisor')[0])
+| join kind=leftouter (resources | project resourceId=tolower(id), resourceTags=tags) on resourceId
+| project id, category = properties.category, impact = properties.impact, impactedArea = properties.impactedField,
+ description = properties.shortDescription.problem, recommendationText = properties.shortDescription.solution,
+ recommendationTypeId = properties.recommendationTypeId, instanceName = properties.impactedValue,
+ additionalInfo = properties.extendedProperties, tags=resourceTags
+| order by id asc
+"@
+
+do
+{
+ if ($resultsSoFar -eq 0)
+ {
+ $recs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $recs = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($recs -and $recs.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $recs = $recs.Data
+ }
+ $resultsCount = $recs.Count
+ $resultsSoFar += $resultsCount
+ $recommendationsARG += $recs
+
+} while ($resultsCount -eq $ARGPageSize)
+
+Write-Output "Building $($recommendationsARG.Count) recommendations entries"
+
+$recommendations = @()
+
+foreach ($advisorRecommendation in $recommendationsARG)
+{
+ $resourceIdParts = $advisorRecommendation.id.Split('/')
+ if ($resourceIdParts.Count -ge 9)
+ {
+ # if the Resource ID is made of 9 parts, then the recommendation is relative to a specific Azure resource
+ $realResourceIdParts = $resourceIdParts[0..8]
+ $instanceId = ($realResourceIdParts -join "/").ToLower()
+ $resourceGroup = $realResourceIdParts[4].ToLower()
+ $subscriptionId = $realResourceIdParts[2]
+ }
+ else
+ {
+ # otherwise it is not a resource-specific recommendation (e.g., reservations)
+ $resourceGroup = "notavailable"
+ $instanceId = $advisorRecommendation.id.ToLower()
+ $subscriptionId = $resourceIdParts[2]
+ }
+
+ if (-not([string]::IsNullOrEmpty($advisorRecommendation.additionalInfo)))
+ {
+ $additionalInfo = $advisorRecommendation.additionalInfo | ConvertTo-Json -Compress
+ }
+ else
+ {
+ $additionalInfo = $null
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ Category = $advisorRecommendation.category
+ Impact = $advisorRecommendation.impact
+ ImpactedArea = $advisorRecommendation.impactedArea
+ Description = $advisorRecommendation.description
+ RecommendationText = $advisorRecommendation.recommendationText
+ RecommendationTypeId = $advisorRecommendation.recommendationTypeId
+ InstanceId = $instanceId
+ InstanceName = $advisorRecommendation.instanceName
+ Tags = $advisorRecommendation.tags
+ AdditionalInfo = $additionalInfo
+ ResourceGroup = $resourceGroup
+ SubscriptionGuid = $subscriptionId
+ TenantGuid = $tenantId
+ }
+
+ $recommendations += $recommendation
+}
+
+Write-Output "Found $($recommendations.Count) ($CategoryFilter) recommendations..."
+
+$fileDate = $datetime.ToString("yyyyMMdd")
+$advisorFilter = $CategoryFilter.Replace(',','').ToLower()
+$csvExportPath = "$fileDate-$advisorFilter-$scope.csv"
+
+$recommendations | Export-Csv -NoTypeInformation -Path $csvExportPath
+Write-Output "Export to $csvExportPath"
+
+$csvBlobName = $csvExportPath
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
+
+Write-Output "DONE!"
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1
new file mode 100644
index 000000000..eae6d89b1
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-AzMonitorMetricsToBlobStorage.ps1
@@ -0,0 +1,296 @@
+Param (
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $true)]
+ [string] $ResourceType, # ARM resource type
+
+ [Parameter(Mandatory = $false)]
+ [string] $ARGFilter, # e.g., name != 'master' and sku.tier in ('Basic','Standard','Premium')
+
+ [Parameter(Mandatory = $true)]
+ [string] $MetricNames, # comma-separated metrics names (use Get-AzMetricDefinition for a list of supported metric names for a given resource)
+
+ [Parameter(Mandatory = $true)]
+ [ValidateSet("Maximum", "Minimum", "Average", "Total")]
+ [string] $AggregationType,
+
+ [Parameter(Mandatory = $false)]
+ [ValidateSet("Default", "Maximum", "Minimum", "Average", "Total")]
+ [string] $AggregationOfType = "Default",
+
+ [Parameter(Mandatory = $true)]
+ [string] $TimeSpan, # [d.]hh:mm:ss
+
+ [Parameter(Mandatory = $true)]
+ [string] $TimeGrain, # [d.]hh:mm:ss (00:01:00, 00:05:00, 00:15:00, 00:30:00, 01:00:00, 06:00:00, 12:00:00, 1.00:00:00, 7.00:00:00, 30.00:00:00)
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_AzMonitorContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "azmonitorexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+if (-not([string]::IsNullOrEmpty($TargetSubscription))) {
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = "-" + $TargetSubscription
+}
+else {
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = "all-" + $tenantId
+}
+
+[TimeSpan]::Parse($TimeGrain) | Out-Null
+$TimeSpanObj = [TimeSpan]::Parse("-$TimeSpan")
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Querying for $ResourceType with page size $ARGPageSize and target subscription $TargetSubscription..."
+
+$allResources = @()
+
+$resultsSoFar = 0
+
+$argWhere = ""
+if (-not([string]::IsNullOrEmpty($ARGFilter)))
+{
+ $argWhere = " and $ARGFilter"
+}
+
+$argQuery = @"
+resources
+| where type =~ '$ResourceType'$argWhere
+| project id, name, subscriptionId, resourceGroup, tenantId
+| order by id asc
+"@
+
+do {
+ if ($resultsSoFar -eq 0) {
+ $resources = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else {
+ $resources = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($resources -and $resources.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $resources = $resources.Data
+ }
+ $resultsCount = $resources.Count
+ $resultsSoFar += $resultsCount
+ $allResources += $resources
+
+} while ($resultsCount -eq $ARGPageSize)
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Found $($allResources.Count) resources."
+
+$metrics = $MetricNames.Split(',')
+
+$queryDate = Get-Date
+$utcNow = $queryDate.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+$utcAgo = $queryDate.Add($TimeSpanObj).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+
+$customMetrics = @()
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Analyzing resources for $MetricNames metrics ($AggregationType with $TimeGrain time grain) since $utcAgo..."
+
+foreach ($resource in $allResources) {
+ $valuesAggregation = @()
+ $foundResource = $true
+ foreach ($metric in $metrics) {
+ $metricValues = Get-AzMetric -ResourceId $resource.id -MetricName $metric -TimeGrain $TimeGrain -AggregationType $AggregationType `
+ -StartTime $utcAgo -EndTime $utcNow -WarningAction SilentlyContinue -ErrorAction Continue
+ if ($metricValues.Data) {
+ if ($valuesAggregation.Count -eq 0) {
+ $valuesAggregation = $metricValues.Data."$AggregationType"
+ }
+ else {
+ for ($i = 0; $i -lt $valuesAggregation.Count; $i++) {
+ if ($metricValues.Data.Count -gt 1)
+ {
+ $valuesAggregation[$i] += $metricValues.Data[$i]."$AggregationType"
+ }
+ else
+ {
+ $valuesAggregation += $metricValues.Data."$AggregationType"
+ }
+ }
+ }
+ }
+
+ if (-not($metricValues.Id))
+ {
+ $foundResource = $false
+ }
+ }
+
+ if ($foundResource)
+ {
+ $aggregatedValue = $null
+ $finalAggregationType = $AggregationType
+ if ($AggregationOfType -ne "Default")
+ {
+ $finalAggregationType = $AggregationOfType
+ }
+ if ($valuesAggregation.Count -gt 0) {
+ switch ($finalAggregationType) {
+ "Maximum" {
+ $aggregatedValue = ($valuesAggregation | Measure-Object -Maximum).Maximum
+ }
+ "Minimum" {
+ $aggregatedValue = ($valuesAggregation | Measure-Object -Minimum).Minimum
+ }
+ "Average" {
+ $aggregatedValue = ($valuesAggregation | Measure-Object -Average).Average
+ }
+ "Total" {
+ $aggregatedValue = ($valuesAggregation | Measure-Object -Sum).Sum
+ }
+ }
+ }
+
+ $customMetric = New-Object PSObject -Property @{
+ Timestamp = $utcNow
+ Cloud = $cloudEnvironment
+ TenantGuid = $resource.tenantId
+ SubscriptionGuid = $resource.subscriptionId
+ ResourceGroupName = $resource.resourceGroup.ToLower()
+ ResourceName = $resource.name.ToLower()
+ ResourceId = $resource.id.ToLower()
+ MetricNames = $MetricNames
+ AggregationType = $AggregationType
+ AggregationOfType = $AggregationOfType
+ MetricValue = $aggregatedValue
+ TimeGrain = $TimeGrain
+ TimeSpan = $TimeSpan
+ }
+
+ $customMetrics += $customMetric
+ }
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Found $($customMetrics.Count) resources to collect metrics from..."
+
+$metricMoment = $queryDate.Add($TimeSpanObj).ToUniversalTime().ToString("yyyyMMddHHmmss")
+$ResourceTypeName = $ResourceType.Split('/')[1].ToLower()
+$MetricName = $MetricNames.Replace(',','').Replace(' ','').Replace('/','').ToLower()
+$AggregationOfTypeName = ""
+if ($AggregationOfType -ne "Default")
+{
+ $AggregationOfTypeName = ("-$AggregationOfType").ToLower()
+}
+$AggregationTypeName = "$($AggregationType.ToLower())$AggregationOfTypeName"
+$csvExportPath = "$metricMoment-metrics-$ResourceTypeName-$MetricName-$AggregationTypeName-$subscriptionSuffix.csv"
+
+$ci = [CultureInfo]::new([System.Threading.Thread]::CurrentThread.CurrentCulture.Name)
+if ($ci.NumberFormat.NumberDecimalSeparator -ne '.')
+{
+ Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator"
+ $ci.NumberFormat.NumberDecimalSeparator = '.'
+ [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci
+}
+
+$customMetrics | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
+
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1
new file mode 100644
index 000000000..0c68d965d
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ConsumptionToBlobStorage.ps1
@@ -0,0 +1,875 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName,
+
+ [Parameter(Mandatory = $false)]
+ [string] $targetStartDate, # YYYY-MM-DD format
+
+ [Parameter(Mandatory = $false)]
+ [string] $targetEndDate # YYYY-MM-DD format
+)
+
+$ErrorActionPreference = "Stop"
+$global:hadErrors = $false
+$global:scopesWithErrors = @()
+
+function Authenticate-AzureWithOption {
+ param (
+ [string] $authOption = "ManagedIdentity",
+ [string] $cloudEnv = "AzureCloud",
+ [string] $clientID
+ )
+
+ switch ($authOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnv -AccountId $clientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnv
+ break
+ }
+ }
+}
+
+function Generate-CostDetails {
+ param (
+ [string] $ScopeId,
+ [string] $ScopeName
+ )
+
+ $MaxTries = 20 # The typical Retry-After is set to 20 seconds. We'll give ~6 minutes overall to download the cost details report
+ $hadErrors = $false
+
+ $CostDetailsApiPath = "$ScopeId/providers/Microsoft.CostManagement/generateCostDetailsReport?api-version=2022-05-01"
+ $body = "{ `"metric`": `"$consumptionMetric`", `"timePeriod`": { `"start`": `"$targetStartDate`", `"end`": `"$targetEndDate`" } }"
+ $result = Invoke-AzRestMethod -Path $CostDetailsApiPath -Method POST -Payload $body
+ $requestResultPath = $result.Headers.Location.PathAndQuery
+ if ($result.StatusCode -in (200,202))
+ {
+ $tries = 0
+ $requestSuccess = $false
+
+ Write-Output "Obtained cost detail results endpoint: $requestResultPath..."
+
+ Write-Output "Was told to wait $($result.Headers.RetryAfter.Delta.TotalSeconds) seconds."
+
+ $sleepSeconds = 60
+ if ($result.Headers.RetryAfter.Delta.TotalSeconds -gt 0)
+ {
+ $sleepSeconds = $result.Headers.RetryAfter.Delta.TotalSeconds
+ }
+
+ do
+ {
+ $tries++
+ Write-Output "Checking whether export is ready (try $tries)..."
+
+ Start-Sleep -Seconds $sleepSeconds
+ $downloadResult = Invoke-AzRestMethod -Method GET -Path $requestResultPath
+
+ if ($downloadResult.StatusCode -eq 200)
+ {
+
+ Write-Output "Export is ready. Proceeding with CSV download..."
+
+ $downloadBlobJson = $downloadResult.Content | ConvertFrom-Json
+
+ $blobCounter = 0
+ foreach ($blob in $downloadBlobJson.manifest.blobs)
+ {
+ $blobCounter++
+
+ Write-Output "Downloading blob $blobCounter..."
+
+ $csvExportPath = "$env:TEMP\$targetStartDate-$ScopeName-$consumptionMetric-$blobCounter.csv"
+ $finalCsvExportPath = "$env:TEMP\$targetStartDate-$ScopeName-$consumptionMetric-$blobCounter-final.csv"
+
+ Invoke-WebRequest -Uri $blob.blobLink -OutFile $csvExportPath
+
+ Write-Output "Blob downloaded to $csvExportPath successfully."
+
+ $r = [IO.File]::OpenText($csvExportPath)
+ $w = [System.IO.StreamWriter]::new($finalCsvExportPath)
+
+ # header normalization between MCA and EA
+ $headerConversion = @{
+ additionalInfo = "AdditionalInfo";
+ billingAccountId = "BillingAccountId";
+ billingAccountName = "BillingAccountName";
+ billingCurrency = "BillingCurrencyCode";
+ billingPeriodEndDate = "BillingPeriodEndDate";
+ billingPeriodStartDate = "BillingPeriodStartDate";
+ billingProfileId = "BillingProfileId";
+ billingProfileName = "BillingProfileName";
+ chargeType = "ChargeType";
+ consumedService = "ConsumedService";
+ costAllocationRuleName = "CostAllocationRuleName";
+ costCenter = "CostCenter";
+ costInBillingCurrency = "CostInBillingCurrency";
+ date = "Date";
+ effectivePrice = "EffectivePrice";
+ frequency = "Frequency";
+ invoiceSectionId = "InvoiceSectionId";
+ invoiceSectionName = "InvoiceSectionName";
+ isAzureCreditEligible = "IsAzureCreditEligible";
+ meterCategory = "MeterCategory";
+ meterId = "MeterId";
+ meterName = "MeterName";
+ meterRegion = "MeterRegion";
+ meterSubCategory = "MeterSubCategory";
+ offerId = "OfferId";
+ pricingModel = "PricingModel";
+ productOrderId = "ProductOrderId";
+ productOrderName = "ProductOrderName";
+ publisherName = "PublisherName";
+ publisherType = "PublisherType";
+ quantity = "Quantity";
+ reservationId = "ReservationId";
+ reservationName = "ReservationName";
+ resourceGroupName = "ResourceGroup";
+ resourceLocation = "ResourceLocation";
+ serviceFamily = "ServiceFamily";
+ serviceInfo1 = "ServiceInfo1";
+ serviceInfo2 = "ServiceInfo2";
+ subscriptionName = "SubscriptionName";
+ tags = "Tags";
+ term = "Term";
+ unitOfMeasure = "UnitOfMeasure";
+ unitPrice = "UnitPrice"
+ }
+
+ $lineCounter = 0
+ while ($r.Peek() -ge 0) {
+ $line = $r.ReadLine()
+ $lineCounter++
+ if ($lineCounter -eq 1)
+ {
+ $headers = $line.Split(",")
+
+ for ($i = 0; $i -lt $headers.Length; $i++)
+ {
+ $header = $headers[$i]
+ if ($headerConversion.ContainsKey($header))
+ {
+ $headers[$i] = $headerConversion[$header]
+ }
+ }
+
+ $line = $headers -join ","
+
+ $w.WriteLine($line)
+ }
+ else
+ {
+ $w.WriteLine($line)
+ }
+ }
+ $r.Dispose()
+ $w.Close()
+
+ $csvBlobName = [System.IO.Path]::GetFileName($finalCsvExportPath)
+ $csvProperties = @{"ContentType" = "text/csv"};
+ Set-AzStorageBlobContent -File $finalCsvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $csvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Removed $csvExportPath from local disk..."
+
+ Remove-Item -Path $finalCsvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Removed $finalCsvExportPath from local disk..."
+ }
+
+ $requestSuccess = $true
+ }
+ elseif ($downloadResult.StatusCode -eq 202)
+ {
+ Write-Output "Was told to wait a bit more... $($downloadResult.Headers.RetryAfter.Delta.TotalSeconds) seconds."
+
+ $sleepSeconds = 60
+ if ($downloadResult.Headers.RetryAfter.Delta.TotalSeconds -gt 0)
+ {
+ $sleepSeconds = $downloadResult.Headers.RetryAfter.Delta.TotalSeconds
+ }
+ }
+ elseif ($downloadResult.StatusCode -eq 401)
+ {
+ Write-Output "Had an authentication issue. Will login again and sleep just a couple of seconds."
+
+ if ($authenticationOption -eq "UserAssignedManagedIdentity")
+ {
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment -clientID $uamiClientID
+ }
+ else
+ {
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment
+ }
+
+ $sleepSeconds = 2
+ }
+ else
+ {
+ $global:hadErrors = $true
+ $global:scopesWithErrors += $ScopeName
+ Write-Warning "Got an unexpected response code: $($downloadResult.StatusCode)"
+ }
+ }
+ while (-not($requestSuccess) -and $tries -lt $MaxTries)
+
+ if (-not($requestSuccess))
+ {
+ $global:hadErrors = $true
+ $global:scopesWithErrors += $ScopeName
+ if ($tries -eq $MaxTries)
+ {
+ Write-Warning "Reached maximum number of tries. Aborting..."
+ }
+ else
+ {
+ Write-Warning "Error returned by the Download Cost Details API. Status Code: $($downloadResult.StatusCode). Message: $($downloadResult.Content)"
+ }
+ }
+ else
+ {
+ Write-Output "Export download processing complete."
+ }
+ }
+ else
+ {
+ if ($result.StatusCode -ne 204)
+ {
+ $global:hadErrors = $true
+ $global:scopesWithErrors += $ScopeName
+ Write-Warning "Error returned by the Generate Cost Details API. Status Code: $($result.StatusCode). Message: $($result.Content)"
+ }
+ else
+ {
+ Write-Output "Request returned 204 No Content"
+ }
+ }
+}
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ConsumptionContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "consumptionexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+
+$consumptionMetric = Get-AutomationVariable -Name "AzureOptimization_ConsumptionMetric" -ErrorAction SilentlyContinue # AmortizedCost|ActualCost
+if ([string]::IsNullOrEmpty($consumptionMetric))
+{
+ $consumptionMetric = "AmortizedCost"
+}
+
+$consumptionAPIOption = Get-AutomationVariable -Name "AzureOptimization_ConsumptionAPIOption" -ErrorAction SilentlyContinue # CostDetails|UsageDetails
+if ([string]::IsNullOrEmpty($consumptionAPIOption))
+{
+ $consumptionAPIOption = "CostDetails"
+}
+
+$consumptionScope = Get-AutomationVariable -Name "AzureOptimization_ConsumptionScope" -ErrorAction SilentlyContinue # Subscription|BillingAccount
+if ([string]::IsNullOrEmpty($consumptionScope))
+{
+ "Consumption Scope not specified, defaulting to Subscription"
+ $consumptionScope = "Subscription"
+}
+else
+{
+ "Consumption Scope is $consumptionScope"
+ if ($consumptionScope -eq "BillingAccount")
+ {
+ $BillingAccountID = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID"
+ }
+ else
+ {
+ if ($consumptionScope -eq "BillingProfile")
+ {
+ $BillingAccountID = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID"
+ $BillingProfileID = Get-AutomationVariable -Name "AzureOptimization_BillingProfileID"
+ }
+ else
+ {
+ if ($consumptionScope -ne "Subscription")
+ {
+ throw "Invalid value for AzureOptimization_ConsumptionScope. Valid values are 'Subscription' or 'BillingAccount'."
+ }
+ }
+ }
+}
+
+if ($cloudEnvironment -eq "AzureChinaCloud")
+{
+ $chinaEAEnrollment = Get-AutomationVariable -Name "AzureOptimization_AzureChinaEAEnrollment" -ErrorAction SilentlyContinue
+ $chinaEAKey = Get-AutomationVariable -Name "AzureOptimization_AzureChinaEAKey" -ErrorAction SilentlyContinue
+}
+
+"Logging in to Azure with $authenticationOption..."
+
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment -clientID $uamiClientID
+}
+else
+{
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+# compute start+end dates
+
+if ([string]::IsNullOrEmpty($targetStartDate) -or [string]::IsNullOrEmpty($targetEndDate))
+{
+ $targetStartDate = (Get-Date).Date.AddDays($consumptionOffsetDays * -1).ToString("yyyy-MM-dd")
+ $targetEndDate = $targetStartDate
+}
+
+if ($consumptionScope -eq "Subscription")
+{
+ if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+ {
+ $subscriptions = Get-AzSubscription -SubscriptionId $TargetSubscription
+ }
+ else
+ {
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" }
+ }
+ "Exporting consumption data from $targetStartDate to $targetEndDate for $($subscriptions.Count) subscriptions..."
+}
+else
+{
+ "Exporting consumption data from $targetStartDate to $targetEndDate for $consumptionScope..."
+}
+
+
+# for each subscription, get billing data
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+if ($cloudEnvironment -eq "AzureChinaCloud" -and -not([string]::IsNullOrEmpty($chinaEAEnrollment)) -and -not([string]::IsNullOrEmpty($chinaEAKey)))
+{
+ $targetMonth = $targetStartDate.Substring(0,7)
+ $consumption = $null
+ $billingEntries = @()
+
+ $BillingApiUri = "https://ea.azure.cn/rest/$chinaEAEnrollment/usage-report?month=$targetMonth&type=detail&fmt=Csv"
+ $PricesheetApiUri = "https://ea.azure.cn/rest/$chinaEAEnrollment/usage-report?month=$targetMonth&type=pricesheet&fmt=Csv"
+
+ $Headers = @{}
+ $Headers.Add("Authorization","Bearer $chinaEAKey")
+
+ Write-Output "Getting pricesheet for month $targetMonth (EA enrollment $chinaEAEnrollment)..."
+
+ Invoke-RestMethod -Method Get -Uri $PricesheetApiUri -Headers $Headers -OutFile "pricesheet-$targetMonth.csv"
+
+ Write-Output "Pricesheet data exported to disk as CSV."
+
+ $csvFile = Get-Content -Path "pricesheet-$targetMonth.csv"
+
+ Write-Output "Pricesheet data imported from disk as string."
+
+ Remove-Item -Path "pricesheet-$targetMonth.csv" -Force
+
+ Write-Output "Removed pricesheet-$targetMonth.csv from local disk..."
+
+ $csvFile2 = $csvFile[2..($csvFile.Count-1)]
+ $headerLine = $csvFile2[0]
+ $columnHeaders = $headerLine.Split(",")
+ for ($i = 0; $i -lt $columnHeaders.Count; $i++)
+ {
+ if($columnHeaders[$i] -match '.+\((?.+)\)')
+ {
+ $columnHeaders[$i] = $Matches.ColumnName
+ }
+ }
+ $csvFile2[0] = $columnHeaders -join ","
+
+ Write-Output "Removed first 2 lines and replaced header."
+
+ $pricesheet = $csvFile2 | ConvertFrom-Csv
+
+ Write-Output "Starting Azure China billing export process from $targetStartDate to $targetEndDate (month $targetMonth) for EA enrollment $chinaEAEnrollment..."
+
+ $tries = 0
+ $requestSuccess = $false
+ do
+ {
+ try {
+ $tries++
+ Invoke-RestMethod -Method Get -Uri $BillingApiUri -Headers $Headers -OutFile "usagedetails-$targetStartDate.csv"
+
+ Write-Output "Consumption data exported to disk as CSV."
+
+ $csvFile = Get-Content -Path "usagedetails-$targetStartDate.csv"
+
+ Write-Output "Consumption data imported from disk as string."
+
+ Remove-Item -Path "usagedetails-$targetStartDate.csv" -Force
+
+ Write-Output "Removed usagedetails-$targetStartDate.csv from local disk..."
+
+ $csvFile2 = $csvFile[2..($csvFile.Count-1)]
+ $headerLine = $csvFile2[0]
+ $columnHeaders = $headerLine.Split(",")
+ for ($i = 0; $i -lt $columnHeaders.Count; $i++)
+ {
+ if($columnHeaders[$i] -match '.+\((?.+)\)')
+ {
+ $columnHeaders[$i] = $Matches.ColumnName
+ }
+ }
+ $csvFile2[0] = $columnHeaders -join ","
+
+ Write-Output "Removed first 2 lines and replaced header."
+
+ $consumption = $csvFile2 | ConvertFrom-Csv
+ $requestSuccess = $true
+ }
+ catch {
+ $ErrorMessage = $_.Exception.Message
+ Write-Warning "Error getting consumption data: $ErrorMessage. $tries of 3 tries. Waiting 60 seconds..."
+ Start-Sleep -s 60
+ }
+
+ } while ( -not($requestSuccess) -and $tries -lt 3 )
+
+ if (-not($requestSuccess))
+ {
+ throw "Failed consumption export"
+ }
+
+ Write-Output "Consumption data in memory as CSV. Processing lines..."
+
+ foreach ($consumptionLine in $consumption)
+ {
+ $usageDate = [Datetime]::ParseExact($consumptionLine.Date, 'MM/dd/yyyy', $null).ToString("yyyy-MM-dd")
+
+ if ($usageDate -ge $targetStartDate -and $usageDate -le $targetEndDate -and ($subscriptions.Count -gt 1 -or $subscriptions.Id -eq $consumptionLine.SubscriptionGuid))
+ {
+ $instanceId = $null
+ $instanceName = $null
+ if ($null -ne $consumptionLine.'Instance ID')
+ {
+ $instanceId = $consumptionLine.'Instance ID'.ToLower()
+ $idParts = $consumptionLine.'Instance ID'.Split("/")
+ $instanceName = $idParts[$idParts.Count-1].ToLower()
+ }
+
+ $rgName = $null
+ if ($null -ne $consumptionLine.'Resource Group')
+ {
+ $rgName = $consumptionLine.'Resource Group'.ToLower()
+ }
+
+ $convertedCost = 0.0
+ if ([double]$consumptionLine.ExtendedCost -ne 0)
+ {
+ $convertedCost = [double]$consumptionLine.ExtendedCost
+ }
+ $convertedPrice = 0.0
+ if ([double]$consumptionLine.ResourceRate -ne 0)
+ {
+ $convertedPrice = [double]$consumptionLine.ResourceRate
+ }
+
+ $unitPrice = 0.0
+ $partNumber = "N/A"
+ foreach ($priceItem in $pricesheet)
+ {
+ if ($priceItem.Service -eq $consumptionLine.Product)
+ {
+ $partNumber = $priceItem.'Part Number'
+ if ($consumptionLine.'Meter Category' -eq "Virtual Machines")
+ {
+ $tempUnitPrice = [double] $priceItem.'Unit Price'
+ $uom = $priceItem.'Unit of Measure'
+ $currentUnitHours = [int] (Select-String -InputObject $uom -Pattern "^\d+").Matches[0].Value
+ if ($currentUnitHours -gt 0)
+ {
+ $unitPrice = [double] ($tempUnitPrice / $currentUnitHours)
+ }
+ }
+ else
+ {
+ $unitPrice = $convertedPrice
+ }
+ break
+ }
+ }
+
+ $billingEntry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ SubscriptionId = $consumptionLine.SubscriptionGuid
+ ResourceGroup = $rgName
+ ResourceName = $instanceName
+ ResourceId = $instanceId
+ Date = $consumptionLine.Date
+ Tags = $consumptionLine.Tags
+ AdditionalInfo = $consumptionLine.AdditionalInfo
+ BillingCurrencyCode = "CNY"
+ ChargeType = "Usage"
+ ConsumedService = $consumptionLine.'Consumed Service'
+ CostInBillingCurrency = $convertedCost
+ EffectivePrice = $convertedPrice
+ Frequency = "UsageBased"
+ MeterCategory = $consumptionLine.'Meter Category'
+ MeterId = $consumptionLine.'Meter ID'
+ MeterName = $consumptionLine.'Meter Name'
+ MeterSubCategory = $consumptionLine.'Meter Sub-Category'
+ PartNumber = $partNumber
+ ProductName = $consumptionLine.Product
+ Quantity = $consumptionLine.'Consumed Quantity'
+ UnitOfMeasure = $consumptionLine.'Unit of Measure'
+ UnitPrice = $unitPrice
+ ResourceLocation = $consumptionLine.'Resource Location'
+ AccountOwnerId = $consumptionLine.AccountOwnerId
+ }
+
+ $billingEntries += $billingEntry
+ }
+ }
+
+ if ($targetStartDate -ne $targetEndDate)
+ {
+ $targetStartDate = "$targetStartDate-$targetEndDate"
+ }
+
+ $csvExportPath = "$targetStartDate-eachina.csv"
+
+ $billingEntries | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+ Write-Output "Exported $($billingEntries.Count) entries as CSV to $csvExportPath"
+
+ $csvBlobName = $csvExportPath
+ $csvProperties = @{"ContentType" = "text/csv"};
+ Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ Write-Output "Uploaded to blob storage!"
+
+ Remove-Item -Path $csvExportPath -Force
+
+ Write-Output "Removed $csvExportPath from local disk..."
+}
+else
+{
+ if ($consumptionScope -eq "Subscription")
+ {
+ $CostDetailsSupportedQuotaIDs = @('EnterpriseAgreement_2014-09-01','Internal_2014-09-01','CSP_2015-05-01')
+ $ConsumptionSupportedQuotaIDs = @('PayAsYouGo_2014-09-01','MSDN_2014-09-01')
+
+ foreach ($subscription in $subscriptions)
+ {
+ $subscriptionQuotaID = $subscription.SubscriptionPolicies.QuotaId
+
+ if ($subscriptionQuotaID -in $ConsumptionSupportedQuotaIDs -or $consumptionAPIOption -eq "UsageDetails")
+ {
+ $consumption = $null
+ $billingEntries = @()
+
+ $ConsumptionApiPath = "/subscriptions/$($subscription.Id)/providers/Microsoft.Consumption/usageDetails?api-version=2021-10-01&metric=$($consumptionMetric.ToLower())&%24expand=properties%2FmeterDetails%2Cproperties%2FadditionalInfo&%24filter=properties%2FusageStart%20ge%20%27$targetStartDate%27%20and%20properties%2FusageEnd%20le%20%27$targetEndDate%27"
+
+ "Starting consumption export process from $targetStartDate to $targetEndDate for subscription $($subscription.Name)..."
+
+ do
+ {
+ if (-not([string]::IsNullOrEmpty($consumption.nextLink)))
+ {
+ $ConsumptionApiPath = $consumption.nextLink.Substring($consumption.nextLink.IndexOf("/subscriptions/"))
+ }
+ $tries = 0
+ $requestSuccess = $false
+ do
+ {
+ try {
+ $tries++
+ $consumption = (Invoke-AzRestMethod -Path $ConsumptionApiPath -Method GET).Content | ConvertFrom-Json
+ $requestSuccess = $true
+ }
+ catch {
+ $ErrorMessage = $_.Exception.Message
+ Write-Warning "Error getting consumption data: $ErrorMessage. $tries of 3 tries. Waiting 60 seconds..."
+ Start-Sleep -s 60
+ }
+ } while ( -not($requestSuccess) -and $tries -lt 3 )
+
+ foreach ($consumptionLine in $consumption.value)
+ {
+ if ((Get-Date $consumptionLine.properties.date).ToString("yyyy-MM-dd") -ge $targetStartDate -and (Get-Date $consumptionLine.properties.date).ToString("yyyy-MM-dd") -le $targetEndDate)
+ {
+ if ($consumptionLine.tags)
+ {
+ $tags = $consumptionLine.tags | ConvertTo-Json -Compress
+ }
+ else
+ {
+ $tags = $null
+ }
+
+ if ([string]::IsNullOrEmpty($consumptionLine.properties.billingProfileId))
+ {
+ # legacy consumption schema
+
+ $billingEntry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ AccountName = $consumptionLine.properties.accountName
+ AccountOwnerId = $consumptionLine.properties.accountOwnerId
+ AdditionalInfo = $consumptionLine.properties.additionalInfo
+ benefitId = $consumptionLine.properties.benefitId
+ benefitName = $consumptionLine.properties.benefitName
+ BillingAccountId = $consumptionLine.properties.billingAccountId
+ BillingAccountName = $consumptionLine.properties.billingAccountName
+ BillingCurrencyCode = $consumptionLine.properties.billingCurrency
+ BillingPeriodEndDate= $consumptionLine.properties.billingPeriodEndDate
+ BillingPeriodStartDate= $consumptionLine.properties.billingPeriodStartDate
+ BillingProfileId = $consumptionLine.properties.billingProfileId
+ BillingProfileName= $consumptionLine.properties.billingProfileName
+ ChargeType = $consumptionLine.properties.chargeType
+ ConsumedService = $consumptionLine.properties.consumedService
+ CostAllocationRuleName = $consumptionLine.properties.costAllocationRuleName
+ CostCenter = $consumptionLine.properties.costCenter
+ CostInBillingCurrency = $consumptionLine.properties.cost
+ Date = (Get-Date $consumptionLine.properties.date).ToString("MM/dd/yyyy")
+ EffectivePrice = $consumptionLine.properties.effectivePrice
+ Frequency = $consumptionLine.properties.frequency
+ InvoiceSectionName = $consumptionLine.properties.invoiceSection
+ IsAzureCreditEligible = $consumptionLine.properties.isAzureCreditEligible
+ MeterCategory = $consumptionLine.properties.meterDetails.meterCategory
+ MeterId = $consumptionLine.properties.meterId
+ MeterName = $consumptionLine.properties.meterDetails.meterName
+ MeterRegion = $consumptionLine.properties.meterDetails.meterRegion
+ MeterSubCategory = $consumptionLine.properties.meterDetails.meterSubCategory
+ OfferId = $consumptionLine.properties.offerId
+ PartNumber = $consumptionLine.properties.partNumber
+ PayGPrice = $consumptionLine.properties.PayGPrice
+ PlanName = $consumptionLine.properties.planName
+ PricingModel = $consumptionLine.properties.pricingModel
+ ProductName = $consumptionLine.properties.product
+ PublisherName = $consumptionLine.properties.publisherName
+ PublisherType = $consumptionLine.properties.publisherType
+ Quantity = $consumptionLine.properties.quantity
+ ReservationId = $consumptionLine.properties.reservationId
+ ReservationName = $consumptionLine.properties.reservationName
+ ResourceGroup = $consumptionLine.properties.resourceGroup
+ ResourceId = $consumptionLine.properties.resourceId
+ ResourceLocation = $consumptionLine.properties.resourceLocation
+ ResourceName = $consumptionLine.properties.resourceName
+ ServiceFamily = $consumptionLine.properties.meterDetails.serviceFamily
+ SubscriptionId = $consumptionLine.properties.subscriptionId
+ SubscriptionName = $consumptionLine.properties.subscriptionName
+ Tags = $tags
+ Term = $consumptionLine.properties.term
+ UnitOfMeasure = $consumptionLine.properties.meterDetails.unitOfMeasure
+ UnitPrice = $consumptionLine.properties.unitPrice
+ }
+ }
+ else
+ {
+ # MCA consumption schema
+ $billingEntry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ AdditionalInfo = $consumptionLine.properties.additionalInfo
+ benefitId = $consumptionLine.properties.benefitId
+ benefitName = $consumptionLine.properties.benefitName
+ BillingAccountId = $consumptionLine.properties.billingAccountId
+ BillingAccountName = $consumptionLine.properties.billingAccountName
+ BillingCurrencyCode = $consumptionLine.properties.billingCurrencyCode
+ BillingPeriodEndDate= $consumptionLine.properties.billingPeriodEndDate
+ BillingPeriodStartDate= $consumptionLine.properties.billingPeriodStartDate
+ BillingProfileId = $consumptionLine.properties.billingProfileId
+ BillingProfileName= $consumptionLine.properties.billingProfileName
+ ChargeType = $consumptionLine.properties.chargeType
+ ConsumedService = $consumptionLine.properties.consumedService
+ CostAllocationRuleName = $consumptionLine.properties.costAllocationRuleName
+ CostCenter = $consumptionLine.properties.costCenter
+ CostInBillingCurrency = $consumptionLine.properties.costInBillingCurrency
+ costInPricingCurrency = $consumptionLine.properties.costInPricingCurrency
+ costInUSD = $consumptionLine.properties.costInUSD
+ customerName = $consumptionLine.properties.customerName
+ Date = (Get-Date $consumptionLine.properties.date).ToString("MM/dd/yyyy")
+ EffectivePrice = $consumptionLine.properties.effectivePrice
+ exchangeRate = $consumptionLine.properties.exchangeRate
+ exchangeRateDate = $consumptionLine.properties.exchangeRateDate
+ exchangeRatePricingToBilling = $consumptionLine.properties.exchangeRatePricingToBilling
+ Frequency = $consumptionLine.properties.frequency
+ invoiceSectionId = $consumptionLine.properties.invoiceSectionId
+ InvoiceSectionName = $consumptionLine.properties.invoiceSectionName
+ IsAzureCreditEligible = $consumptionLine.properties.isAzureCreditEligible
+ MeterCategory = $consumptionLine.properties.meterCategory
+ MeterId = $consumptionLine.properties.meterId
+ MeterName = $consumptionLine.properties.meterName
+ MeterRegion = $consumptionLine.properties.meterRegion
+ MeterSubCategory = $consumptionLine.properties.meterSubCategory
+ PartNumber = $consumptionLine.properties.partNumber
+ paygCostInBillingCurrency = $consumptionLine.properties.paygCostInBillingCurrency
+ paygCostInUSD = $consumptionLine.properties.paygCostInUSD
+ PayGPrice = $consumptionLine.properties.payGPrice
+ PlanName = $consumptionLine.properties.planName
+ pricingCurrencyCode = $consumptionLine.properties.pricingCurrencyCode
+ PricingModel = $consumptionLine.properties.pricingModel
+ ProductName = $consumptionLine.properties.product
+ productIdentifier = $consumptionLine.properties.productIdentifier
+ PublisherName = $consumptionLine.properties.publisherName
+ PublisherType = $consumptionLine.properties.publisherType
+ Quantity = $consumptionLine.properties.quantity
+ ReservationId = $consumptionLine.properties.reservationId
+ ReservationName = $consumptionLine.properties.reservationName
+ ResourceGroup = $consumptionLine.properties.resourceGroup
+ ResourceId = $consumptionLine.properties.instanceName
+ ResourceLocation = $consumptionLine.properties.resourceLocation
+ resourceLocationNormalized = $consumptionLine.properties.resourceLocationNormalized
+ ServiceFamily = $consumptionLine.properties.serviceFamily
+ SubscriptionId = $consumptionLine.properties.subscriptionGuid
+ SubscriptionName = $consumptionLine.properties.subscriptionName
+ Tags = $tags
+ Term = $consumptionLine.properties.term
+ UnitOfMeasure = $consumptionLine.properties.unitOfMeasure
+ UnitPrice = $consumptionLine.properties.unitPrice
+ }
+ }
+ $billingEntries += $billingEntry
+ }
+ }
+ }
+ while ($requestSuccess -and -not([string]::IsNullOrEmpty($consumption.nextLink)))
+
+ if ($requestSuccess)
+ {
+ "Generated $($billingEntries.Count) entries..."
+
+ "Uploading CSV to Storage"
+
+ $ci = [CultureInfo]::new([System.Threading.Thread]::CurrentThread.CurrentCulture.Name)
+ if ($ci.NumberFormat.NumberDecimalSeparator -ne '.')
+ {
+ "Current culture ($($ci.Name)) does not use . as decimal separator"
+ $ci.NumberFormat.NumberDecimalSeparator = '.'
+ [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci
+ }
+
+ $csvExportPath = "$targetStartDate-$($subscription.Id)-$consumptionMetric.csv"
+
+ $billingEntries | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+ $csvBlobName = $csvExportPath
+ $csvProperties = @{"ContentType" = "text/csv"};
+ Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $csvExportPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ "[$now] Removed $csvExportPath from local disk..."
+ }
+ else
+ {
+ $global:hadErrors = $true
+ $global:scopesWithErrors += $ScopeName
+ Write-Warning "Failed to get consumption data for subscription $($subscription.Name)..."
+ }
+ }
+ elseif ($subscriptionQuotaID -in $CostDetailsSupportedQuotaIDs -or $consumptionAPIOption -eq "CostDetails")
+ {
+ "Starting cost details export process from $targetStartDate to $targetEndDate for subscription $($subscription.Name)..."
+ Generate-CostDetails -ScopeId "/subscriptions/$($subscription.Id)" -ScopeName $subscription.Id
+ }
+ else
+ {
+ $global:hadErrors = $true
+ $global:scopesWithErrors += $ScopeName
+ Write-Warning "Subscription quota $subscriptionQuotaID not supported"
+ }
+ }
+ }
+ else
+ {
+ if ($consumptionScope -eq "BillingAccount")
+ {
+ "Starting cost details export process from $targetStartDate to $targetEndDate for Billing Account ID $BillingAccountID..."
+ Generate-CostDetails -ScopeId "/providers/Microsoft.Billing/billingAccounts/$BillingAccountID" -ScopeName $BillingAccountID.Replace(":","_")
+ }
+ if ($consumptionScope -eq "BillingProfile")
+ {
+ "Starting cost details export process from $targetStartDate to $targetEndDate for Billing Account ID $BillingAccountID / Billing Profile ID $BillingProfileID ..."
+ Generate-CostDetails -ScopeId "/providers/Microsoft.Billing/billingAccounts/$BillingAccountID/billingProfiles/$BillingProfileID" -ScopeName $BillingProfileID
+ }
+ }
+}
+
+if ($global:hadErrors)
+{
+ $scopesWithErrorsString = $global:scopesWithErrors -join ","
+ throw "There were errors during the export process with the following scopes: $scopesWithErrorsString. Please check the output for details."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1
new file mode 100644
index 000000000..ea6177169
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-PolicyComplianceToBlobStorage.ps1
@@ -0,0 +1,644 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetSubscription,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName,
+
+ [Parameter(Mandatory = $false)]
+ [ValidateSet("ARG", "ARM")]
+ [string] $PolicyStatesEndpoint = "ARG"
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion" -ErrorAction SilentlyContinue # e.g., westeurope
+if ([string]::IsNullOrEmpty($referenceRegion))
+{
+ $referenceRegion = "westeurope"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_PolicyStatesContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "policystateexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$ARGPageSize = 1000
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+$cloudSuffix = ""
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudSuffix = $externalCloudEnvironment.ToLower() + "-"
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+$allpolicyStates = @()
+
+Write-Output "Getting subscriptions target $TargetSubscription"
+if (-not([string]::IsNullOrEmpty($TargetSubscription)))
+{
+ $subscriptions = $TargetSubscription
+ $subscriptionSuffix = $TargetSubscription
+}
+else
+{
+ $subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" -and $_.SubscriptionPolicies.QuotaId -notlike "AAD*" } | ForEach-Object { "$($_.Id)"}
+ $subscriptionSuffix = $cloudSuffix + "all-" + $tenantId
+}
+
+Write-Output "Building Policy display names..."
+
+$policyAssignments = @{}
+$policyInitiatives = @{}
+$policyDefinitions = @{}
+$excludedAssignmentScopes = @()
+$allInitiatives = @()
+
+if ($PolicyStatesEndpoint -eq "ARG")
+{
+ $resultsSoFar = 0
+
+ $argQuery = @"
+ policyresources
+ | where type =~ 'microsoft.authorization/policyassignments'
+ | extend displayName = iif(isnotempty(properties.displayName), tostring(properties.displayName), 'N/A')
+ | distinct id, displayName
+ | order by id asc
+"@
+
+ $argAssignmentsTotal = @()
+
+ do
+ {
+ if ($resultsSoFar -eq 0)
+ {
+ $argAssignments = Search-AzGraph -Query $argQuery -First $ARGPageSize -UseTenantScope
+ }
+ else
+ {
+ $argAssignments = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -UseTenantScope
+ }
+ if ($argAssignments -and $argAssignments.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $argAssignments = $argAssignments.Data
+ }
+ $resultsCount = $argAssignments.Count
+ $resultsSoFar += $resultsCount
+ $argAssignmentsTotal += $argAssignments
+
+ } while ($resultsCount -eq $ARGPageSize)
+
+ Write-Output "Building $($argAssignmentsTotal.Count) assignment entries"
+
+ foreach ($assignment in $argAssignmentsTotal)
+ {
+ $policyAssignments.Add($assignment.id, $assignment.displayName)
+ }
+
+ $resultsSoFar = 0
+
+ $argQuery = @"
+ policyresources
+ | where type =~ 'microsoft.authorization/policysetdefinitions'
+ | extend displayName = iif(isnotempty(properties.displayName), tostring(properties.displayName), 'N/A')
+ | distinct id, displayName
+ | order by id asc
+"@
+
+ $argInitiativesTotal = @()
+
+ do
+ {
+ if ($resultsSoFar -eq 0)
+ {
+ $argInitiatives = Search-AzGraph -Query $argQuery -First $ARGPageSize -UseTenantScope
+ }
+ else
+ {
+ $argInitiatives = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -UseTenantScope
+ }
+ if ($argInitiatives -and $argInitiatives.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $argInitiatives = $argInitiatives.Data
+ }
+ $resultsCount = $argInitiatives.Count
+ $resultsSoFar += $resultsCount
+ $argInitiativesTotal += $argInitiatives
+
+ } while ($resultsCount -eq $ARGPageSize)
+
+ Write-Output "Building $($argInitiativesTotal.Count) initiative entries"
+
+ foreach ($initiative in $argInitiativesTotal)
+ {
+ $policyInitiatives.Add($initiative.id, $initiative.displayName)
+ }
+
+ $resultsSoFar = 0
+
+ $argQuery = @"
+ policyresources
+ | where type =~ 'microsoft.authorization/policydefinitions'
+ | extend displayName = iif(isnotempty(properties.displayName), tostring(properties.displayName), 'N/A')
+ | distinct id, displayName
+ | order by id asc
+"@
+
+ $argDefinitionsTotal = @()
+
+ do
+ {
+ if ($resultsSoFar -eq 0)
+ {
+ $argDefinitions = Search-AzGraph -Query $argQuery -First $ARGPageSize -UseTenantScope
+ }
+ else
+ {
+ $argDefinitions = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -UseTenantScope
+ }
+ if ($argDefinitions -and $argDefinitions.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $argDefinitions = $argDefinitions.Data
+ }
+ $resultsCount = $argDefinitions.Count
+ $resultsSoFar += $resultsCount
+ $argDefinitionsTotal += $argDefinitions
+
+ } while ($resultsCount -eq $ARGPageSize)
+
+ Write-Output "Building $($argDefinitionsTotal.Count) definition entries"
+
+ foreach ($definition in $argDefinitionsTotal)
+ {
+ $policyDefinitions.Add($definition.id, $definition.displayName)
+ }
+}
+else
+{
+ foreach ($sub in $subscriptions)
+ {
+ Select-AzSubscription -SubscriptionId $sub | Out-Null
+ $assignments = Get-AzPolicyAssignment -IncludeDescendent
+ foreach ($assignment in $assignments)
+ {
+ if (-not($policyAssignments[$assignment.PolicyAssignmentId]))
+ {
+ $assignmentName = $assignment.Properties.DisplayName
+ if([string]::IsNullOrWhiteSpace($assignmentName)) {
+ $policyAssignments.Add($assignment.PolicyAssignmentId, 'N/A')
+ }
+ else {
+ $policyAssignments.Add($assignment.PolicyAssignmentId, $assignmentName)
+ }
+ }
+ if ($assignment.Properties.NotScopes -and -not($excludedAssignmentScopes | Where-Object { $_.PolicyAssignmentId -eq $assignment.PolicyAssignmentId }))
+ {
+ $excludedAssignmentScopes += $assignment
+ }
+ }
+
+ $initiatives = Get-AzPolicySetDefinition
+ foreach ($initiative in $initiatives)
+ {
+ if (-not($policyInitiatives[$initiative.PolicySetDefinitionId]))
+ {
+ $setDefinitionName = $initiative.Properties.DisplayName
+ if([string]::IsNullOrWhiteSpace($setDefinitionName)) {
+ $policyInitiatives.Add($initiative.PolicySetDefinitionId, 'N/A')
+ }
+ else {
+ $policyInitiatives.Add($initiative.PolicySetDefinitionId, $setDefinitionName)
+ }
+ }
+ if (-not($allInitiatives | Where-Object { $_.PolicySetDefinitionId -eq $initiative.PolicySetDefinitionId }))
+ {
+ $allInitiatives += $initiative
+ }
+ }
+
+ $definitions = Get-AzPolicyDefinition
+ foreach ($definition in $definitions)
+ {
+ if (-not($policyDefinitions[$definition.PolicyDefinitionId]))
+ {
+ $definitionName = $initiative.Properties.DisplayName
+ if([string]::IsNullOrWhiteSpace($definitionName)) {
+ $policyDefinitions.Add($definition.PolicyDefinitionId, 'N/A')
+ }
+ else {
+ $policyDefinitions.Add($definition.PolicyDefinitionId, $definitionName)
+ }
+ }
+ }
+ }
+}
+
+$policyStatesTotal = @()
+
+Write-Output "Querying for Policy states using $PolicyStatesEndpoint endpoint..."
+
+if ($PolicyStatesEndpoint -eq "ARG")
+{
+ $resultsSoFar = 0
+
+ $argQuery = @"
+ policyresources
+ | where type =~ 'microsoft.policyinsights/policystates'
+ | extend complianceState = tostring(properties.complianceState)
+ | extend complianceReason = tostring(properties.complianceReasonCode)
+ | where complianceState != 'Compliant' and complianceReason !contains 'ResourceNotFound'
+ | extend effect = tostring(properties.policyDefinitionAction)
+ | extend assignmentId = tolower(properties.policyAssignmentId)
+ | extend definitionId = tolower(properties.policyDefinitionId)
+ | extend definitionReferenceId = tolower(properties.policyDefinitionReferenceId)
+ | extend initiativeId = tolower(properties.policySetDefinitionId)
+ | extend resourceId = tolower(properties.resourceId)
+ | extend resourceType = tostring(properties.resourceType)
+ | extend evaluatedOn = todatetime(properties.timestamp)
+ | summarize StatesCount = count() by id, tenantId, subscriptionId, resourceGroup, resourceId, resourceType, complianceState, complianceReason, effect, assignmentId, definitionReferenceId, definitionId, initiativeId, evaluatedOn
+ | union ( policyresources
+ | where type =~ 'microsoft.policyinsights/policystates'
+ | extend complianceState = tostring(properties.complianceState)
+ | where complianceState == 'Compliant'
+ | extend effect = tostring(properties.policyDefinitionAction)
+ | extend assignmentId = tolower(properties.policyAssignmentId)
+ | extend definitionId = tolower(properties.policyDefinitionId)
+ | extend definitionReferenceId = tolower(properties.policyDefinitionReferenceId)
+ | extend initiativeId = tolower(properties.policySetDefinitionId)
+ | summarize StatesCount = count() by tenantId, subscriptionId, complianceState, effect, assignmentId, definitionReferenceId, definitionId, initiativeId
+ )
+ | join kind=leftouter (
+ resources
+ | project resourceId=tolower(id), tags
+ ) on resourceId
+ | project-away resourceId1
+ | order by id asc
+"@
+
+ do
+ {
+ if ($resultsSoFar -eq 0)
+ {
+ $policyStates = Search-AzGraph -Query $argQuery -First $ARGPageSize -Subscription $subscriptions
+ }
+ else
+ {
+ $policyStates = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -Subscription $subscriptions
+ }
+ if ($policyStates -and $policyStates.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $policyStates = $policyStates.Data
+ }
+ $resultsCount = $policyStates.Count
+ $resultsSoFar += $resultsCount
+ $policyStatesTotal += $policyStates
+
+ } while ($resultsCount -eq $ARGPageSize)
+
+ Write-Output "Building $($policyStatesTotal.Count) policyState entries"
+}
+else
+{
+ foreach ($sub in $subscriptions)
+ {
+ Select-AzSubscription -SubscriptionId $sub | Out-Null
+ $policyStates = Get-AzPolicyState -All
+
+ $nonCompliantStates = $policyStates | Where-Object { $_.ComplianceState -ne "Compliant" }
+
+ foreach ($policyState in $nonCompliantStates)
+ {
+ $policyStateObject = New-Object PSObject -Property @{
+ tenantId = $tenantId
+ subscriptionId = $sub
+ resourceGroup = $policyState.ResourceGroup
+ resourceId = $policyState.ResourceId
+ resourceType = $policyState.ResourceType
+ complianceState = $policyState.ComplianceState
+ complianceReason = $policyState.AdditionalProperties.complianceReasonCode
+ effect = $policyState.PolicyDefinitionAction
+ assignmentId = $policyState.PolicyAssignmentId
+ initiativeId = $policyState.PolicySetDefinitionId
+ definitionId = $policyState.PolicyDefinitionId
+ definitionReferenceId = $policyState.PolicyDefinitionReferenceId
+ evaluatedOn = $policyState.Timestamp
+ StatesCount = 1
+ }
+ $policyStatesTotal += $policyStateObject
+ }
+
+ $compliantStates = $policyStates | Where-Object { $_.ComplianceState -eq "Compliant" } `
+ | Group-Object PolicyDefinitionAction, PolicyAssignmentId, PolicyDefinitionId, PolicyDefinitionReferenceId, PolicySetDefinitionId
+
+ foreach ($policyState in $compliantStates)
+ {
+ $compliantStateProps = $policyState.Name.Split(',')
+ $definitionReferenceId = $null
+ if ($compliantStateProps[3])
+ {
+ $definitionReferenceId = $compliantStateProps[3].Trim().ToLower()
+ }
+ $initiativeId = $null
+ if ($compliantStateProps[4])
+ {
+ $initiativeId = $compliantStateProps[4].Trim().ToLower()
+ }
+
+ $policyStateObject = New-Object PSObject -Property @{
+ tenantId = $tenantId
+ subscriptionId = $sub
+ complianceState = "Compliant"
+ effect = $compliantStateProps[0]
+ assignmentId = $compliantStateProps[1].Trim().ToLower()
+ definitionId = $compliantStateProps[2].Trim().ToLower()
+ definitionReferenceId = $definitionReferenceId
+ initiativeId = $initiativeId
+ StatesCount = $policyState.Count
+ }
+ $policyStatesTotal += $policyStateObject
+ }
+ }
+
+ Write-Output "Building $($policyStatesTotal.Count) policyState entries"
+}
+
+$datetime = (Get-Date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+$statusDate = $datetime.ToString("yyyy-MM-dd")
+
+foreach ($policyState in $policyStatesTotal)
+{
+ $resourceGroup = $null
+ if ($policyState.resourceGroup)
+ {
+ $resourceGroup = $policyState.resourceGroup.ToLower()
+ }
+
+ if (-not([string]::IsNullOrEmpty($policyState.tags)))
+ {
+ $tags = $policyState.tags | ConvertTo-Json -Compress
+ }
+ else
+ {
+ $tags = $null
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $policyState.tenantId
+ SubscriptionGuid = $policyState.subscriptionId
+ ResourceGroupName = $resourceGroup
+ ResourceId = $policyState.resourceId
+ ResourceType = $policyState.resourceType
+ ComplianceState = $policyState.complianceState
+ ComplianceReason = $policyState.complianceReason
+ Effect = $policyState.effect
+ AssignmentId = $policyState.assignmentId
+ AssignmentName = $policyAssignments[$policyState.assignmentId]
+ InitiativeId = $policyState.initiativeId
+ InitiativeName = $policyInitiatives[$policyState.initiativeId]
+ DefinitionId = $policyState.definitionId
+ DefinitionName = $policyDefinitions[$policyState.definitionId]
+ DefinitionReferenceId = $policyState.definitionReferenceId
+ EvaluatedOn = $policyState.evaluatedOn
+ StatesCount = $policyState.StatesCount
+ Tags = $tags
+ StatusDate = $statusDate
+ }
+
+ $allpolicyStates += $logentry
+}
+
+if ($PolicyStatesEndpoint -eq "ARG")
+{
+ $resultsSoFar = 0
+
+ $argQuery = @"
+ policyresources
+ | where type =~ 'microsoft.authorization/policyassignments'
+ | where array_length(properties.notScopes) > 0
+ | mv-expand notScope = properties.notScopes
+ | extend policyAssignmentId = tolower(id)
+ | extend assignmentPolicyDefinitionId = tolower(properties.policyDefinitionId)
+ | join kind=leftouter (
+ policyresources
+ | where type =~ 'microsoft.authorization/policysetdefinitions'
+ | mv-expand policyDefinition = properties.policyDefinitions
+ | project policySetDefinitionId = tolower(id), policyDefinitionId = tolower(policyDefinition.policyDefinitionId), policyDefinitionReferenceId = tolower(policyDefinition.policyDefinitionReferenceId)
+ ) on `$left.assignmentPolicyDefinitionId == `$right.policySetDefinitionId
+ | project policyAssignmentId, notScope, assignmentPolicyDefinitionId, policySetDefinitionId, policyDefinitionId, policyDefinitionReferenceId
+ | order by policyDefinitionReferenceId, tostring(notScope)
+"@
+
+ do
+ {
+ if ($resultsSoFar -eq 0)
+ {
+ $argExcludedAssignments = Search-AzGraph -Query $argQuery -First $ARGPageSize -UseTenantScope
+ }
+ else
+ {
+ $argExcludedAssignments = Search-AzGraph -Query $argQuery -First $ARGPageSize -Skip $resultsSoFar -UseTenantScope
+ }
+ if ($argExcludedAssignments -and $argExcludedAssignments.GetType().Name -eq "PSResourceGraphResponse")
+ {
+ $argExcludedAssignments = $argExcludedAssignments.Data
+ }
+ $resultsCount = $argExcludedAssignments.Count
+ $resultsSoFar += $resultsCount
+ $excludedAssignmentScopes += $argExcludedAssignments
+
+ } while ($resultsCount -eq $ARGPageSize)
+
+ Write-Output "Adding excluded scopes from $($excludedAssignmentScopes.Count) assignments"
+
+ foreach ($excludedAssignmentScope in $excludedAssignmentScopes)
+ {
+ if (-not([String]::IsNullOrEmpty($excludedAssignmentScope.policySetDefinitionId)))
+ {
+ $initiativeId = $excludedAssignmentScope.policySetDefinitionId
+ $initiativeName = $policyInitiatives[$initiativeId]
+ $definitionReferenceId = $excludedAssignmentScope.policyDefinitionReferenceId
+ $definitionId = $excludedAssignmentScope.policyDefinitionId
+ }
+ else
+ {
+ $initiativeId = $null
+ $initiativeName = $null
+ $definitionReferenceId = $null
+ $definitionId = $excludedAssignmentScope.assignmentPolicyDefinitionId
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $tenantId
+ ResourceId = $excludedAssignmentScope.notScope
+ ComplianceState = 'Excluded'
+ AssignmentId = $excludedAssignmentScope.policyAssignmentId
+ AssignmentName = $policyAssignments[$excludedAssignmentScope.policyAssignmentId]
+ InitiativeId = $initiativeId
+ InitiativeName = $initiativeName
+ DefinitionId = $definitionId
+ DefinitionName = $policyDefinitions[$definitionId]
+ DefinitionReferenceId = $definitionReferenceId
+ StatusDate = $statusDate
+ }
+
+ $allpolicyStates += $logentry
+ }
+}
+else
+{
+ Write-Output "Adding excluded scopes from $($excludedAssignmentScopes.Count) assignments"
+
+ foreach ($excludedAssignment in $excludedAssignmentScopes)
+ {
+ $excludedIDs = @()
+ $excludedInitiative = $allInitiatives | Where-Object { $_.PolicySetDefinitionId -eq $excludedAssignment.Properties.PolicyDefinitionId }
+ if ($excludedInitiative)
+ {
+ $excludedDefinitions = $excludedInitiative.Properties.PolicyDefinitions
+ foreach ($excludedDefinition in $excludedDefinitions)
+ {
+ $excludedIDs += "$($excludedDefinition.policyDefinitionId)|$($excludedDefinition.policyDefinitionReferenceId)"
+ }
+ }
+ else
+ {
+ $excludedIDs += $excludedAssignment.Properties.PolicyDefinitionId
+ }
+
+ foreach ($excludedID in $excludedIDs)
+ {
+ $excludedIDParts = $excludedID.Split('|')
+ $definitionId = $excludedIDParts[0].ToLower()
+ $definitionReferenceId = $null
+ if (-not([string]::IsNullOrEmpty($excludedIDParts[1])))
+ {
+ $definitionReferenceId = $excludedIDParts[1].ToLower()
+ }
+
+ $initiativeId = $null
+ $initiativeName = $null
+ if ($excludedInitiative)
+ {
+ $initiativeId = $excludedInitiative.PolicySetDefinitionId.ToLower()
+ $initiativeName = $policyInitiatives[$initiativeId]
+ }
+
+ foreach ($notScope in $excludedAssignment.Properties.NotScopes)
+ {
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ TenantGuid = $tenantId
+ ResourceId = $notScope.ToLower()
+ ComplianceState = 'Excluded'
+ AssignmentId = $excludedAssignment.PolicyAssignmentId.ToLower()
+ AssignmentName = $policyAssignments[$excludedAssignment.PolicyAssignmentId]
+ InitiativeId = $initiativeId
+ InitiativeName = $initiativeName
+ DefinitionId = $definitionId
+ DefinitionName = $policyDefinitions[$definitionId]
+ DefinitionReferenceId = $definitionReferenceId
+ StatusDate = $statusDate
+ }
+
+ $allpolicyStates += $logentry
+ }
+ }
+ }
+}
+
+Write-Output "Uploading CSV to Storage"
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-policyStates-$subscriptionSuffix.csv"
+
+$allpolicyStates | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+Write-Output "Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+Write-Output "Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1
new file mode 100644
index 000000000..13f0f9e4f
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-PriceSheetToBlobStorage.ps1
@@ -0,0 +1,452 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $BillingAccountID,
+
+ [Parameter(Mandatory = $false)]
+ [string] $BillingProfileID,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName,
+
+ [Parameter(Mandatory = $false)]
+ [string] $billingPeriod, # YYYYMM format
+
+ [Parameter(Mandatory = $false)]
+ [string] $meterCategories, # comma-separated meter categories (e.g., "Virtual Machines,Storage")
+
+ [Parameter(Mandatory = $false)]
+ [string] $meterRegions # comma-separated billing meter regions (e.g., "EU North,EU West")
+)
+
+$ErrorActionPreference = "Stop"
+
+function Authenticate-AzureWithOption {
+ param (
+ [string] $authOption = "ManagedIdentity",
+ [string] $cloudEnv = "AzureCloud",
+ [string] $clientID
+ )
+
+ switch ($authOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnv -AccountId $clientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnv
+ break
+ }
+ }
+}
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_PriceSheetContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "pricesheetexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$meterCategoriesVar = Get-AutomationVariable -Name "AzureOptimization_PriceSheetMeterCategories" -ErrorAction SilentlyContinue
+$meterRegionsVar = Get-AutomationVariable -Name "AzureOptimization_PriceSheetMeterRegions" -ErrorAction SilentlyContinue
+$BillingAccountIDVar = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" -ErrorAction SilentlyContinue
+$BillingProfileIDVar = Get-AutomationVariable -Name "AzureOptimization_BillingProfileID" -ErrorAction SilentlyContinue
+
+"Logging in to Azure with $authenticationOption..."
+
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment -clientID $uamiClientID
+}
+else
+{
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+# compute billing period
+
+if ([string]::IsNullOrEmpty($billingPeriod))
+{
+ $billingPeriod = (Get-Date).Date.AddDays($consumptionOffsetDays * -1).ToString("yyyyMM")
+}
+
+$exportDate = (Get-Date).ToUniversalTime().ToString("yyyyMMdd")
+
+if ([string]::IsNullOrEmpty($BillingAccountID) -and -not([string]::IsNullOrEmpty($BillingAccountIDVar)))
+{
+ $BillingAccountID = $BillingAccountIDVar
+}
+
+if ([string]::IsNullOrEmpty($BillingProfileID) -and -not([string]::IsNullOrEmpty($BillingProfileIDVar)))
+{
+ $BillingProfileID = $BillingProfileIDVar
+}
+
+$mcaBillingAccountIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+):([A-Za-z0-9]+(-[A-Za-z0-9]+)+)_[0-9]{4}-[0-9]{2}-[0-9]{2}"
+$mcaBillingProfileIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+)"
+
+if ([string]::IsNullOrEmpty($BillingAccountID))
+{
+ throw "Billing Account ID undefined. Use either the AzureOptimization_BillingAccountID variable or the BillingAccountID parameter"
+}
+else {
+ if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+ {
+ if ([string]::IsNullOrEmpty($BillingProfileID))
+ {
+ throw "Billing Profile ID undefined for MCA. Use either the AzureOptimization_BillingProfileID variable or the BillingProfileID parameter"
+ }
+ if (-not($BillingProfileID -match $mcaBillingProfileIdRegex))
+ {
+ throw "Billing Profile ID does not follow pattern for MCA: ([A-Za-z0-9]+(-[A-Za-z0-9]+)+)"
+ }
+ }
+}
+
+if (-not([string]::IsNullOrEmpty($meterCategoriesVar)))
+{
+ $meterCategories = $meterCategoriesVar
+}
+
+if (-not([string]::IsNullOrEmpty($meterRegionsVar)))
+{
+ $meterRegions = $meterRegionsVar
+}
+
+$meterCategoryFilters = $null
+$meterRegionFilters = $null
+
+if (-not([string]::IsNullOrEmpty($meterCategories)))
+{
+ $meterCategoryFilters = $meterCategories.Split(',')
+}
+
+if (-not([string]::IsNullOrEmpty($meterRegions)))
+{
+ $meterRegionFilters = $meterRegions.Split(',')
+}
+
+function Generate-Pricesheet {
+ param (
+ [string] $InputCSVPath,
+ [string] $OutputCSVPath,
+ [string] $HeaderLine
+ )
+
+ # header normalization between MCA and EA
+ $headerConversion = @{
+ 'Meter ID' = "MeterID";
+ meterId = "MeterID";
+ 'Meter name' = "MeterName";
+ meterName = "MeterName";
+ 'Meter category' = "MeterCategory";
+ meterCategory = "MeterCategory";
+ 'Meter sub-category' = "MeterSubCategory";
+ meterSubCategory = "MeterSubCategory";
+ 'Meter region' = "MeterRegion";
+ meterRegion = "MeterRegion";
+ 'Unit of measure' = "UnitOfMeasure";
+ unitOfMeasure = "UnitOfMeasure";
+ 'Part number' = "PartNumber";
+ 'Unit price' = "UnitPrice";
+ unitPrice = "UnitPrice";
+ 'Currency code' = "CurrencyCode";
+ currency = "CurrencyCode";
+ 'Included quantity' = "IncludedQuantity";
+ includedQuantity = "IncludedQuantity";
+ 'Offer Id' = "OfferId";
+ Term = "Term";
+ 'Price type' = "PriceType";
+ priceType = "PriceType"
+ }
+
+ $r = [IO.File]::OpenText($InputCSVPath)
+ $w = [System.IO.StreamWriter]::new($OutputCSVPath)
+ $lineCounter = 0
+ while ($r.Peek() -ge 0) {
+ $line = $r.ReadLine()
+ $lineCounter++
+ if ($lineCounter -eq $HeaderLine)
+ {
+ $headers = $line.Split(",")
+
+ for ($i = 0; $i -lt $headers.Length; $i++)
+ {
+ $header = $headers[$i]
+ if ($headerConversion.ContainsKey($header))
+ {
+ $headers[$i] = $headerConversion[$header]
+ }
+ }
+
+ $line = $headers -join ","
+
+ if (-not($line -match "SubCategory"))
+ {
+ throw "Pricesheet format has changed at line $HeaderLine - $line"
+ }
+
+ Write-Output "New headers: $line"
+
+ $w.WriteLine($line)
+ }
+ else
+ {
+ if ($lineCounter -gt $HeaderLine)
+ {
+ $categoryWriteLine = $categoryWriteLineDefault
+ $regionWriteLine = $regionWriteLineDefault
+
+ foreach ($meterCategory in $meterCategoryFilters)
+ {
+ if ($line -match ",$meterCategory,")
+ {
+ $categoryWriteLine = $true
+ break
+ }
+ }
+
+ foreach ($meterRegion in $meterRegionFilters)
+ {
+ if ($line -match ",$meterRegion,")
+ {
+ $regionWriteLine = $true
+ break
+ }
+ }
+
+ if ($categoryWriteLine -eq $true -and $regionWriteLine -eq $true)
+ {
+ $w.WriteLine($line)
+ }
+ }
+ }
+ }
+ $r.Dispose()
+ $w.Close()
+
+ $csvBlobName = [System.IO.Path]::GetFileName($OutputCSVPath)
+ $csvProperties = @{"ContentType" = "text/csv"};
+ Set-AzStorageBlobContent -File $OutputCSVPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+ Remove-Item -Path $InputCSVPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Removed $InputCSVPath from local disk..."
+
+ Remove-Item -Path $OutputCSVPath -Force
+
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Removed $OutputCSVPath from local disk..."
+}
+
+Write-Output "Starting pricesheet export process for $billingPeriod billing period for Billing Account $BillingAccountID..."
+
+$MaxTries = 30 # The typical Retry-After is set to 20 seconds. We'll give 10 minutes overall to download the pricesheet report
+
+if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+{
+ $PriceSheetApiPath = "/providers/Microsoft.Billing/billingAccounts/$BillingAccountID/billingProfiles/$BillingProfileID/providers/Microsoft.CostManagement/pricesheets/default/download?api-version=2023-03-01&format=csv"
+ $result = Invoke-AzRestMethod -Path $PriceSheetApiPath -Method POST
+}
+else
+{
+ $PriceSheetApiPath = "/providers/Microsoft.Billing/billingAccounts/$BillingAccountID/billingPeriods/$billingPeriod/providers/Microsoft.Consumption/pricesheets/download?api-version=2022-06-01&ln=en"
+ $result = Invoke-AzRestMethod -Path $PriceSheetApiPath -Method GET
+}
+
+$requestResultPath = $result.Headers.Location.PathAndQuery
+if ($result.StatusCode -in (200,202))
+{
+ $tries = 0
+ $requestSuccess = $false
+
+ Write-Output "Obtained pricesheet results endpoint: $requestResultPath..."
+
+ Write-Output "Was told to wait $($result.Headers.RetryAfter.Delta.TotalSeconds) seconds."
+
+ $sleepSeconds = 60
+ if ($result.Headers.RetryAfter.Delta.TotalSeconds -gt 0)
+ {
+ $sleepSeconds = $result.Headers.RetryAfter.Delta.TotalSeconds
+ }
+
+ do
+ {
+ $tries++
+ Write-Output "Checking whether export is ready (try $tries)..."
+
+ Start-Sleep -Seconds $sleepSeconds
+ $downloadResult = Invoke-AzRestMethod -Method GET -Path $requestResultPath
+
+ if ($downloadResult.StatusCode -eq 200)
+ {
+ Write-Output "Filtering data with meter categories $meterCategories and meter regions $meterRegions to $finalCsvExportPath..."
+
+ $categoryWriteLineDefault = $true
+ if ($meterCategoryFilters.Count -gt 0)
+ {
+ $categoryWriteLineDefault = $false
+ }
+ $regionWriteLineDefault = $true
+ if ($meterRegionFilters.Count -gt 0)
+ {
+ $regionWriteLineDefault = $false
+ }
+
+ Write-Output "Defaulting to meter categories writes $($categoryWriteLineDefault) and meter regions writes $($regionWriteLineDefault)..."
+
+ if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+ {
+ Write-Output "Export is ready. Proceeding with ZIP download..."
+ $downloadUrl = ($downloadResult.Content | ConvertFrom-Json).publishedEntity.properties.downloadUrl
+ $zipExportPath = "$env:TEMP\pricesheet-$BillingProfileID-$exportDate.zip"
+ $zipExpandPath = "$env:TEMP\pricesheet"
+ Invoke-WebRequest -Uri $downloadUrl -OutFile $zipExportPath
+ Write-Output "Blob downloaded to $zipExportPath successfully."
+ Expand-Archive -LiteralPath $zipExportPath -DestinationPath $zipExpandPath -Force
+ Write-Output "Zip expanded to $zipExpandPath successfully."
+ $csvFiles = Get-ChildItem -Path $zipExpandPath -Filter *.csv -Recurse
+ foreach ($csvFile in $csvFiles)
+ {
+ $csvExportPath = $csvFile.FullName
+ $finalCsvExportPath = "$env:TEMP\$($csvFile.Name)-final.csv"
+ Generate-Pricesheet -InputCSVPath $csvExportPath -OutputCSVPath $finalCsvExportPath -HeaderLine 1
+ }
+ Remove-Item -Path $zipExportPath -Force
+ $now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "[$now] Removed $zipExportPath from local disk..."
+ }
+ else
+ {
+ Write-Output "Export is ready. Proceeding with CSV download..."
+ $downloadUrl = ($downloadResult.Content | ConvertFrom-Json).properties.downloadUrl
+ $csvExportPath = "$env:TEMP\pricesheet-$billingPeriod-$BillingAccountID.csv"
+ $finalCsvExportPath = "$env:TEMP\pricesheet-$billingPeriod-$BillingAccountID$($meterCategories.Replace(',',''))$($meterRegions.Replace(',',''))-$exportDate-final.csv"
+ Invoke-WebRequest -Uri $downloadUrl -OutFile $csvExportPath
+ Write-Output "Blob downloaded to $csvExportPath successfully."
+ Generate-Pricesheet -InputCSVPath $csvExportPath -OutputCSVPath $finalCsvExportPath -HeaderLine 3
+ }
+
+ $requestSuccess = $true
+ }
+ elseif ($downloadResult.StatusCode -eq 202)
+ {
+ Write-Output "Was told to wait a bit more... $($downloadResult.Headers.RetryAfter.Delta.TotalSeconds) seconds."
+
+ $sleepSeconds = 60
+ if ($downloadResult.Headers.RetryAfter.Delta.TotalSeconds -gt 0)
+ {
+ $sleepSeconds = $downloadResult.Headers.RetryAfter.Delta.TotalSeconds
+ }
+ }
+ elseif ($downloadResult.StatusCode -eq 401)
+ {
+ Write-Output "Had an authentication issue. Will login again and sleep just a couple of seconds."
+
+ if ($authenticationOption -eq "UserAssignedManagedIdentity")
+ {
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment -clientID $uamiClientID
+ }
+ else
+ {
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment
+ }
+
+ $sleepSeconds = 2
+ }
+ else
+ {
+ Write-Output "Got an unexpected response code: $($downloadResult.StatusCode)"
+ }
+ }
+ while (-not($requestSuccess) -and $tries -lt $MaxTries)
+
+ if ($tries -ge $MaxTries)
+ {
+ throw "Couldn't complete request before the alloted number of $MaxTries retries"
+ }
+
+ if (-not($requestSuccess))
+ {
+ throw "Error returned by the Download PriceSheet API. Status Code: $($downloadResult.StatusCode). Message: $($downloadResult.Content)"
+ }
+ else
+ {
+ Write-Output "Export download processing complete."
+ }
+}
+else
+{
+ if ($result.StatusCode -ne 204)
+ {
+ throw "Error returned by the Download PriceSheet API. Status Code: $($result.StatusCode). Message: $($result.Content)"
+ }
+ else
+ {
+ Write-Output "Request returned 204 No Content"
+ }
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1
new file mode 100644
index 000000000..64be55332
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-RBACAssignmentsToBlobStorage.ps1
@@ -0,0 +1,268 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RBACAssignmentsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "rbacexports"
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$subscriptions = Get-AzSubscription | Where-Object { $_.State -eq "Enabled" }
+
+$roleAssignments = @()
+
+"Iterating through all reachable subscriptions..."
+
+foreach ($subscription in $subscriptions) {
+
+ Select-AzSubscription -SubscriptionId $subscription.Id -TenantId $tenantId | Out-Null
+
+ $assignments = Get-AzRoleAssignment -IncludeClassicAdministrators -ErrorAction Continue
+ "Found $($assignments.Count) assignments for $($subscription.Name) subscription..."
+
+ foreach ($assignment in $assignments) {
+ if ($null -eq $assignment.ObjectId -and $assignment.Scope.Contains($subscription.Id))
+ {
+ $assignmentEntry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ Model = "AzureClassic"
+ PrincipalId = $assignment.SignInName
+ Scope = $assignment.Scope
+ RoleDefinition = $assignment.RoleDefinitionName
+ }
+ $roleAssignments += $assignmentEntry
+ }
+ else
+ {
+ $duplicateRoleAssignment = $roleAssignments | Where-Object { $_.PrincipalId -eq $assignment.ObjectId -and $_.Scope -eq $assignment.Scope -and $_.RoleDefinition -eq $assignment.RoleDefinitionName}
+ if (-not($duplicateRoleAssignment))
+ {
+ $assignmentEntry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ Model = "AzureRM"
+ PrincipalId = $assignment.ObjectId
+ Scope = $assignment.Scope
+ RoleDefinition = $assignment.RoleDefinitionName
+ }
+ $roleAssignments += $assignmentEntry
+ }
+ }
+ }
+}
+
+$fileDate = $datetime.ToString("yyyyMMdd")
+$jsonExportPath = "$fileDate-$tenantId-rbacassignments.json"
+$csvExportPath = "$fileDate-$tenantId-rbacassignments.csv"
+
+$roleAssignments | ConvertTo-Json -Depth 3 -Compress | Out-File $jsonExportPath
+"Exported to JSON: $($roleAssignments.Count) lines"
+$rbacObjectsJson = Get-Content -Path $jsonExportPath | ConvertFrom-Json
+"JSON Import: $($rbacObjectsJson.Count) lines"
+$rbacObjectsJson | Export-Csv -NoTypeInformation -Path $csvExportPath
+"Export to $csvExportPath"
+
+$csvBlobName = $csvExportPath
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+"[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+"[$now] Removed $csvExportPath from local disk..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+"[$now] Removed $jsonExportPath from local disk..."
+
+$roleAssignments = @()
+
+"Getting Microsoft Entra ID roles..."
+
+#workaround for https://github.com/microsoftgraph/msgraph-sdk-powershell/issues/888
+$localPath = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::UserProfile)
+if (-not(get-item "$localPath\.graph\" -ErrorAction SilentlyContinue))
+{
+ New-Item -Type Directory "$localPath\.graph"
+}
+
+Import-Module Microsoft.Graph.Identity.DirectoryManagement
+
+switch ($cloudEnvironment) {
+ "AzureUSGovernment" {
+ $graphEnvironment = "USGov"
+ break
+ }
+ "AzureChinaCloud" {
+ $graphEnvironment = "China"
+ break
+ }
+ "AzureGermanCloud" {
+ $graphEnvironment = "Germany"
+ break
+ }
+ Default {
+ $graphEnvironment = "Global"
+ }
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Microsoft Graph with $externalCredentialName external credential..."
+ Connect-MgGraph -TenantId $externalTenantId -ClientSecretCredential $externalCredential -Environment $graphEnvironment -NoWelcome
+}
+else
+{
+ "Logging in to Microsoft Graph with $authenticationOption..."
+
+ switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-MgGraph -Identity -ClientId $uamiClientID -Environment $graphEnvironment -NoWelcome
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-MgGraph -Identity -Environment $graphEnvironment -NoWelcome
+ break
+ }
+ }
+}
+
+$domainName = (Get-MgDomain | Where-Object { $_.IsVerified -and $_.IsDefault } | Select-Object -First 1).Id
+
+$roles = Get-MgDirectoryRole -ExpandProperty Members -Property DisplayName,Members
+foreach ($role in $roles)
+{
+ $roleMembers = $role.Members | Where-Object { -not($_.DeletedDateTime) }
+ foreach ($roleMember in $roleMembers)
+ {
+ $assignmentEntry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ Model = "AzureAD"
+ PrincipalId = $roleMember.Id
+ Scope = $domainName
+ RoleDefinition = $role.DisplayName
+ }
+ $roleAssignments += $assignmentEntry
+ }
+}
+
+$fileDate = $datetime.ToString("yyyyMMdd")
+$jsonExportPath = "$fileDate-$tenantId-aadrbacassignments.json"
+$csvExportPath = "$fileDate-$tenantId-aadrbacassignments.csv"
+
+$roleAssignments | ConvertTo-Json -Depth 3 -Compress | Out-File $jsonExportPath
+"Exported to JSON: $($roleAssignments.Count) lines"
+$rbacObjectsJson = Get-Content -Path $jsonExportPath | ConvertFrom-Json
+"JSON Import: $($rbacObjectsJson.Count) lines"
+$rbacObjectsJson | Export-Csv -NoTypeInformation -Path $csvExportPath
+"Export to $csvExportPath"
+
+$csvBlobName = $csvExportPath
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+"[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+"[$now] Removed $csvExportPath from local disk..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+"[$now] Removed $jsonExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1
new file mode 100644
index 000000000..95201d301
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ReservationsPriceToBlobStorage.ps1
@@ -0,0 +1,146 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $Filter = "serviceName eq 'Virtual Machines' and priceType eq 'Reservation'" # e.g., serviceName eq 'Virtual Machines' and priceType eq 'Reservation' and armRegionName eq 'northeurope'
+)
+
+$ErrorActionPreference = "Stop"
+
+function Authenticate-AzureWithOption {
+ param (
+ [string] $authOption = "ManagedIdentity",
+ [string] $cloudEnv = "AzureCloud",
+ [string] $clientID
+ )
+
+ switch ($authOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnv -AccountId $clientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnv
+ break
+ }
+ }
+}
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ReservationsPriceContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "reservationspriceexports"
+}
+
+$filterVar = Get-AutomationVariable -Name "AzureOptimization_RetailPricesFilter" -ErrorAction SilentlyContinue
+$currencyCode = Get-AutomationVariable -Name "AzureOptimization_RetailPricesCurrencyCode"
+
+"Logging in to Azure with $authenticationOption..."
+
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment -clientID $uamiClientID
+}
+else
+{
+ Authenticate-AzureWithOption -authOption $authenticationOption -cloudEnv $cloudEnvironment
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+if (-not([string]::IsNullOrEmpty($filterVar)))
+{
+ $Filter = $filterVar
+}
+
+Write-Output "Starting retails prices export process with $currencyCode currency code and filter: $Filter ..."
+
+$RetailPricesApiPath = "https://prices.azure.com/api/retail/prices?currencyCode='$currencyCode'&`$filter=$Filter"
+
+$prices = @()
+
+do
+{
+ $Response = Invoke-RestMethod -Method Get -Uri $RetailPricesApiPath
+ if ($Response.Items.Count -gt 0)
+ {
+ $prices += $Response.Items
+ }
+ $RetailPricesApiPath = $Response.NextPageLink
+} while ($Response.NextPageLink)
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyyMMdd")
+
+$fileFriendlyFilter = $Filter.Replace(" ","").Replace("'","")
+$csvExportPath = "reservationsprice-$timestamp-$fileFriendlyFilter.csv"
+
+$ci = [CultureInfo]::new([System.Threading.Thread]::CurrentThread.CurrentCulture.Name)
+if ($ci.NumberFormat.NumberDecimalSeparator -ne '.')
+{
+ Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator"
+ $ci.NumberFormat.NumberDecimalSeparator = '.'
+ [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci
+}
+
+$prices | Export-Csv -NoTypeInformation -Path $csvExportPath
+
+Write-Output "Reservations price CSV exported to $csvExportPath successfully."
+
+$csvBlobName = $csvExportPath
+$csvProperties = @{"ContentType" = "text/csv"};
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1
new file mode 100644
index 000000000..540bfe5bf
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-ReservationsUsageToBlobStorage.ps1
@@ -0,0 +1,304 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetScope,
+
+ [Parameter(Mandatory = $false)]
+ [string] $BillingAccountID,
+
+ [Parameter(Mandatory = $false)]
+ [string] $BillingProfileID,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName,
+
+ [Parameter(Mandatory = $false)]
+ [string] $targetStartDate, # YYYY-MM-DD format
+
+ [Parameter(Mandatory = $false)]
+ [string] $targetEndDate # YYYY-MM-DD format
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_ReservationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "reservationsexports"
+}
+
+$BillingAccountIDVar = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" -ErrorAction SilentlyContinue
+$BillingProfileIDVar = Get-AutomationVariable -Name "AzureOptimization_BillingProfileID" -ErrorAction SilentlyContinue
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+
+if ([string]::IsNullOrEmpty($BillingAccountID) -and -not([string]::IsNullOrEmpty($BillingAccountIDVar)))
+{
+ $BillingAccountID = $BillingAccountIDVar
+}
+
+if ([string]::IsNullOrEmpty($BillingProfileID) -and -not([string]::IsNullOrEmpty($BillingProfileIDVar)))
+{
+ $BillingProfileID = $BillingProfileIDVar
+}
+
+$mcaBillingAccountIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+):([A-Za-z0-9]+(-[A-Za-z0-9]+)+)_[0-9]{4}-[0-9]{2}-[0-9]{2}"
+$mcaBillingProfileIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+)"
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+# compute start+end dates
+
+if ([string]::IsNullOrEmpty($targetStartDate) -or [string]::IsNullOrEmpty($targetEndDate))
+{
+ $targetStartDate = (Get-Date).Date.AddDays($consumptionOffsetDays * -1).ToString("yyyy-MM-dd")
+ $targetEndDate = $targetStartDate
+}
+
+if (-not([string]::IsNullOrEmpty($TargetScope)))
+{
+ $scope = $TargetScope
+}
+else
+{
+ if ([string]::IsNullOrEmpty($BillingAccountID))
+ {
+ throw "Billing Account ID undefined. Use either the AzureOptimization_BillingAccountID variable or the BillingAccountID parameter"
+ }
+ if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+ {
+ if ([string]::IsNullOrEmpty($BillingProfileID))
+ {
+ throw "Billing Profile ID undefined for MCA. Use either the AzureOptimization_BillingProfileID variable or the BillingProfileID parameter"
+ }
+ if (-not($BillingProfileID -match $mcaBillingProfileIdRegex))
+ {
+ throw "Billing Profile ID does not follow pattern for MCA: ([A-Za-z0-9]+(-[A-Za-z0-9]+)+)"
+ }
+ $scope = "/providers/Microsoft.Billing/billingaccounts/$BillingAccountID/billingProfiles/$BillingProfileID"
+ }
+ else
+ {
+ $scope = "/providers/Microsoft.Billing/billingaccounts/$BillingAccountID"
+ }
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Starting reservations export process from $targetStartDate to $targetEndDate for scope $scope..."
+
+# get reservations details
+
+$reservationsDetailsResponse = $null
+$reservationsDetails = @()
+$reservationsDetailsPath = "$scope/reservations?api-version=2020-05-01&&refreshSummary=true"
+
+do
+{
+ if (-not([string]::IsNullOrEmpty($reservationsDetailsResponse.nextLink)))
+ {
+ $reservationsDetailsPath = $reservationsDetailsResponse.nextLink.Substring($reservationsDetailsResponse.nextLink.IndexOf("/providers/"))
+ }
+
+ $result = Invoke-AzRestMethod -Path $reservationsDetailsPath -Method GET
+
+ if (-not($result.StatusCode -in (200, 201, 202)))
+ {
+ throw "Error while getting reservations details: $($result.Content)"
+ }
+
+ $reservationsDetailsResponse = $result.Content | ConvertFrom-Json
+ if ($reservationsDetailsResponse.value)
+ {
+ $reservationsDetails += $reservationsDetailsResponse.value
+ }
+}
+while (-not([string]::IsNullOrEmpty($reservationsDetailsResponse.nextLink)))
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Found $($reservationsDetails.Count) reservation details."
+
+# get reservations usage
+
+$reservationsUsage = @()
+if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+{
+ $reservationsUsagePath = "$scope/providers/Microsoft.Consumption/reservationSummaries?api-version=2023-05-01&startDate=$targetStartDate&endDate=$targetEndDate&grain=daily"
+}
+else
+{
+ $reservationsUsagePath = "$scope/providers/Microsoft.Consumption/reservationSummaries?api-version=2023-05-01&`$filter=properties/UsageDate ge $targetStartDate and properties/UsageDate le $targetEndDate&grain=daily"
+}
+
+$result = Invoke-AzRestMethod -Path $reservationsUsagePath -Method GET
+
+if (-not($result.StatusCode -in (200, 201, 202)))
+{
+ throw "Error while getting reservations usage: $($result.Content)"
+}
+
+$reservationsUsageResponse = $result.Content | ConvertFrom-Json
+if ($reservationsUsageResponse.value)
+{
+ $reservationsUsage += $reservationsUsageResponse.value
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Found $($reservationsUsage.Count) reservation usages."
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$reservations = @()
+
+foreach ($usage in $reservationsUsage)
+{
+ $reservationResourceId = "/providers/microsoft.capacity/reservationorders/$($usage.properties.reservationOrderId)/reservations/$($usage.properties.reservationId)"
+ $reservationDetail = $reservationsDetails | Where-Object { $_.id -eq $reservationResourceId }
+ $reservationEntry = New-Object PSObject -Property @{
+ ReservationResourceId = $reservationResourceId
+ ReservationOrderId = $usage.properties.reservationOrderId
+ ReservationId = $usage.properties.reservationId
+ DisplayName = $reservationDetail.properties.displayName
+ SKUName = $usage.properties.skuName
+ Location = $reservationDetail.location
+ ResourceType = $reservationDetail.properties.reservedResourceType
+ AppliedScopeType = $reservationDetail.properties.userFriendlyAppliedScopeType
+ Term = $reservationDetail.properties.term
+ ProvisioningState = $reservationDetail.properties.displayProvisioningState
+ RenewState = $reservationDetail.properties.userFriendlyRenewState
+ PurchaseDate = $reservationDetail.properties.purchaseDate
+ ExpiryDate = $reservationDetail.properties.expiryDate
+ Archived = $reservationDetail.properties.archived
+ ReservedHours = $usage.properties.reservedHours
+ UsedHours = $usage.properties.usedHours
+ UsageDate = $usage.properties.usageDate
+ MinUtilPercentage = $usage.properties.minUtilizationPercentage
+ AvgUtilPercentage = $usage.properties.avgUtilizationPercentage
+ MaxUtilPercentage = $usage.properties.maxUtilizationPercentage
+ PurchasedQuantity = $usage.properties.purchasedQuantity
+ RemainingQuantity = $usage.properties.remainingQuantity
+ TotalReservedQuantity = $usage.properties.totalReservedQuantity
+ UsedQuantity = $usage.properties.usedQuantity
+ UtilizedPercentage = $usage.properties.utilizedPercentage
+ UtilTrend = $reservationDetail.properties.utilization.trend
+ Util1Days = ($reservationDetail.properties.utilization.aggregates | Where-Object { $_.grain -eq 1 }).value
+ Util7Days = ($reservationDetail.properties.utilization.aggregates | Where-Object { $_.grain -eq 7 }).value
+ Util30Days = ($reservationDetail.properties.utilization.aggregates | Where-Object { $_.grain -eq 30 }).value
+ Scope = $scope
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ CollectedDate = $timestamp
+ Timestamp = $timestamp
+ }
+ $reservations += $reservationEntry
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Generated $($reservations.Count) entries..."
+
+if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+{
+ $csvExportPath = "$targetStartDate-$BillingProfileID.csv"
+}
+else
+{
+ $csvExportPath = "$targetStartDate-$BillingAccountID-$($scope.Split('/')[-1]).csv"
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploading CSV to Storage"
+
+$ci = [CultureInfo]::new([System.Threading.Thread]::CurrentThread.CurrentCulture.Name)
+if ($ci.NumberFormat.NumberDecimalSeparator -ne '.')
+{
+ Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator"
+ $ci.NumberFormat.NumberDecimalSeparator = '.'
+ [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci
+}
+
+$reservations | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+$csvProperties = @{"ContentType" = "text/csv"};
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1
new file mode 100644
index 000000000..43d751691
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Export-SavingsPlansUsageToBlobStorage.ps1
@@ -0,0 +1,263 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [string] $TargetScope,
+
+ [Parameter(Mandatory = $false)]
+ [string] $BillingAccountID,
+
+ [Parameter(Mandatory = $false)]
+ [string] $BillingProfileID,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCloudEnvironment,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalTenantId,
+
+ [Parameter(Mandatory = $false)]
+ [string] $externalCredentialName
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkEnv = Get-AutomationVariable -Name "AzureOptimization_StorageSinkEnvironment" -ErrorAction SilentlyContinue
+if (-not($storageAccountSinkEnv))
+{
+ $storageAccountSinkEnv = $cloudEnvironment
+}
+$storageAccountSinkKeyCred = Get-AutomationPSCredential -Name "AzureOptimization_StorageSinkKey" -ErrorAction SilentlyContinue
+$storageAccountSinkKey = $null
+if ($storageAccountSinkKeyCred)
+{
+ $storageAccountSink = $storageAccountSinkKeyCred.UserName
+ $storageAccountSinkKey = $storageAccountSinkKeyCred.GetNetworkCredential().Password
+}
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_SavingsPlansContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer))
+{
+ $storageAccountSinkContainer = "savingsplansexports"
+}
+
+$BillingAccountIDVar = Get-AutomationVariable -Name "AzureOptimization_BillingAccountID" -ErrorAction SilentlyContinue
+$BillingProfileIDVar = Get-AutomationVariable -Name "AzureOptimization_BillingProfileID" -ErrorAction SilentlyContinue
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ $externalCredential = Get-AutomationPSCredential -Name $externalCredentialName
+}
+
+if ([string]::IsNullOrEmpty($BillingAccountID) -and -not([string]::IsNullOrEmpty($BillingAccountIDVar)))
+{
+ $BillingAccountID = $BillingAccountIDVar
+}
+
+if ([string]::IsNullOrEmpty($BillingProfileID) -and -not([string]::IsNullOrEmpty($BillingProfileIDVar)))
+{
+ $BillingProfileID = $BillingProfileIDVar
+}
+
+$mcaBillingAccountIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+):([A-Za-z0-9]+(-[A-Za-z0-9]+)+)_[0-9]{4}-[0-9]{2}-[0-9]{2}"
+$mcaBillingProfileIdRegex = "([A-Za-z0-9]+(-[A-Za-z0-9]+)+)"
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+if (-not($storageAccountSinkKey))
+{
+ Write-Output "Getting Storage Account context with login"
+
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+}
+else
+{
+ Write-Output "Getting Storage Account context with key"
+ $saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -StorageAccountKey $storageAccountSinkKey -Environment $storageAccountSinkEnv
+}
+
+if (-not([string]::IsNullOrEmpty($externalCredentialName)))
+{
+ "Logging in to Azure with $externalCredentialName external credential..."
+ Connect-AzAccount -ServicePrincipal -EnvironmentName $externalCloudEnvironment -Tenant $externalTenantId -Credential $externalCredential
+ $cloudEnvironment = $externalCloudEnvironment
+}
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+if (-not([string]::IsNullOrEmpty($TargetScope)))
+{
+ $scope = $TargetScope
+}
+else
+{
+ if ([string]::IsNullOrEmpty($BillingAccountID))
+ {
+ throw "Billing Account ID undefined. Use either the AzureOptimization_BillingAccountID variable or the BillingAccountID parameter"
+ }
+ if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+ {
+ if ([string]::IsNullOrEmpty($BillingProfileID))
+ {
+ throw "Billing Profile ID undefined for MCA. Use either the AzureOptimization_BillingProfileID variable or the BillingProfileID parameter"
+ }
+ if (-not($BillingProfileID -match $mcaBillingProfileIdRegex))
+ {
+ throw "Billing Profile ID does not follow pattern for MCA: ([A-Za-z0-9]+(-[A-Za-z0-9]+)+)"
+ }
+ #$scope = "/providers/Microsoft.BillingBenefits"
+ $scope = "/providers/Microsoft.Billing/billingaccounts/$BillingAccountID"
+ }
+ else
+ {
+ $scope = "/providers/Microsoft.Billing/billingaccounts/$BillingAccountID"
+ }
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Starting savings plans export process for scope $scope..."
+
+$savingsPlansUsage = @()
+if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+{
+ #$savingsPlansUsagePath = "$scope/savingsPlans?api-version=2022-11-01&refreshsummary=true&take=100"
+ $savingsPlansUsagePath = "$scope/savingsPlans?api-version=2022-10-01-privatepreview&refreshsummary=true&take=100&`$filter=(properties/billingProfileId eq '/providers/Microsoft.Billing/billingAccounts/$BillingAccountID/billingProfiles/$BillingProfileID')"
+}
+else
+{
+ $savingsPlansUsagePath = "$scope/savingsPlans?api-version=2020-12-15-privatepreview&refreshsummary=true&take=100"
+}
+
+$result = Invoke-AzRestMethod -Path $savingsPlansUsagePath -Method GET
+
+if (-not($result.StatusCode -in (200, 201, 202)))
+{
+ throw "Error while getting savings plans usage: $($result.Content)"
+}
+
+$savingsPlansUsageResponse = $result.Content | ConvertFrom-Json
+if ($savingsPlansUsageResponse.value)
+{
+ $savingsPlansUsage += $savingsPlansUsageResponse.value
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Found $($savingsPlansUsage.Count) savings plans usages."
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$savingsPlans = @()
+
+foreach ($usage in $savingsPlansUsage)
+{
+ $purchaseDate = $usage.properties.purchaseDateTime
+ if ([string]::IsNullOrEmpty($purchaseDate) -and -not([string]::IsNullOrEmpty($usage.properties.purchaseDate)))
+ {
+ $purchaseDate = (Get-Date -Date $usage.properties.purchaseDate).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ }
+ $expiryDate = $usage.properties.expiryDateTime
+ if ([string]::IsNullOrEmpty($expiryDate) -and -not([string]::IsNullOrEmpty($usage.properties.expiryDate)))
+ {
+ $expiryDate = (Get-Date -Date $usage.properties.expiryDate).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ }
+
+ $savingsPlanEntry = New-Object PSObject -Property @{
+ SavingsPlanResourceId = $usage.id
+ SavingsPlanOrderId = $usage.id.Substring(0,$usage.id.IndexOf("/savingsPlans/"))
+ SavingsPlanId = $usage.id.Split("/")[-1]
+ DisplayName = $usage.properties.displayName
+ SKUName = $usage.sku.name
+ Term = $usage.properties.term
+ ProvisioningState = $usage.properties.displayProvisioningState
+ AppliedScopeType = $usage.properties.userFriendlyAppliedScopeType
+ RenewState = $usage.properties.renew
+ PurchaseDate = $purchaseDate
+ BenefitStart = $usage.properties.benefitStartTime
+ ExpiryDate = $expiryDate
+ EffectiveDate = $usage.properties.effectiveDateTime
+ BillingScopeId = $usage.properties.billingScopeId
+ BillingAccountId = $usage.properties.billingAccountId
+ BillingProfileId = $usage.properties.billingProfileId
+ BillingPlan = $usage.properties.billingPlan
+ CommitmentGrain = $usage.properties.commitment.grain
+ CommitmentCurrencyCode = $usage.properties.commitment.currencyCode
+ CommitmentAmount = $usage.properties.commitment.amount
+ UtilTrend = $usage.properties.utilization.trend
+ Util1Days = ($usage.properties.utilization.aggregates | Where-Object { $_.grain -eq 1 }).value
+ Util7Days = ($usage.properties.utilization.aggregates | Where-Object { $_.grain -eq 7 }).value
+ Util30Days = ($usage.properties.utilization.aggregates | Where-Object { $_.grain -eq 30 }).value
+ Scope = $scope
+ TenantGuid = $tenantId
+ Cloud = $cloudEnvironment
+ CollectedDate = $timestamp
+ Timestamp = $timestamp
+ }
+ $savingsPlans += $savingsPlanEntry
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Generated $($savingsPlans.Count) entries..."
+
+$targetDate = $datetime.ToString("yyyy-MM-dd")
+
+if ($BillingAccountID -match $mcaBillingAccountIdRegex)
+{
+ $csvExportPath = "$targetDate-$BillingProfileID.csv"
+}
+else
+{
+ $csvExportPath = "$targetDate-$BillingAccountID.csv"
+}
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploading CSV to Storage"
+
+$ci = [CultureInfo]::new([System.Threading.Thread]::CurrentThread.CurrentCulture.Name)
+if ($ci.NumberFormat.NumberDecimalSeparator -ne '.')
+{
+ Write-Output "Current culture ($($ci.Name)) does not use . as decimal separator"
+ $ci.NumberFormat.NumberDecimalSeparator = '.'
+ [System.Threading.Thread]::CurrentThread.CurrentCulture = $ci
+}
+
+$savingsPlans | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+$csvProperties = @{"ContentType" = "text/csv"};
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $csvBlobName to Blob Storage..."
+
+Remove-Item -Path $csvExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $csvExportPath from local disk..."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1
new file mode 100644
index 000000000..a162e9931
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/data-collection/Ingest-OptimizationCSVExportsToLogAnalytics.ps1
@@ -0,0 +1,344 @@
+param(
+ [Parameter(Mandatory = $true)]
+ [string] $StorageSinkContainer
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$sharedKey = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceKey"
+$LogAnalyticsChunkSize = [int] (Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsChunkSize" -ErrorAction SilentlyContinue)
+if (-not($LogAnalyticsChunkSize -gt 0))
+{
+ $LogAnalyticsChunkSize = 6000
+}
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = $StorageSinkContainer
+$StorageBlobsPageSize = [int] (Get-AutomationVariable -Name "AzureOptimization_StorageBlobsPageSize" -ErrorAction SilentlyContinue)
+if (-not($StorageBlobsPageSize -gt 0))
+{
+ $StorageBlobsPageSize = 1000
+}
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+#region Functions
+
+# Function to create the authorization signature
+Function Build-OMSSignature ($workspaceId, $sharedKey, $date, $contentLength, $method, $contentType, $resource) {
+ $xHeaders = "x-ms-date:" + $date
+ $stringToHash = $method + "`n" + $contentLength + "`n" + $contentType + "`n" + $xHeaders + "`n" + $resource
+ $bytesToHash = [Text.Encoding]::UTF8.GetBytes($stringToHash)
+ $keyBytes = [Convert]::FromBase64String($sharedKey)
+ $sha256 = New-Object System.Security.Cryptography.HMACSHA256
+ $sha256.Key = $keyBytes
+ $calculatedHash = $sha256.ComputeHash($bytesToHash)
+ $encodedHash = [Convert]::ToBase64String($calculatedHash)
+ $authorization = 'SharedKey {0}:{1}' -f $workspaceId, $encodedHash
+ return $authorization
+}
+
+# Function to create and post the request
+Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField, $AzureEnvironment) {
+ $method = "POST"
+ $contentType = "application/json"
+ $resource = "/api/logs"
+ $rfc1123date = [DateTime]::UtcNow.ToString("r")
+ $contentLength = $body.Length
+ $signature = Build-OMSSignature `
+ -workspaceId $workspaceId `
+ -sharedKey $sharedKey `
+ -date $rfc1123date `
+ -contentLength $contentLength `
+ -method $method `
+ -contentType $contentType `
+ -resource $resource
+
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01"
+ if ($AzureEnvironment -eq "AzureChinaCloud")
+ {
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.cn" + $resource + "?api-version=2016-04-01"
+ }
+ if ($AzureEnvironment -eq "AzureUSGovernment")
+ {
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.us" + $resource + "?api-version=2016-04-01"
+ }
+ if ($AzureEnvironment -eq "AzureGermanCloud")
+ {
+ throw "Azure Germany isn't suported for the Log Analytics Data Collector API"
+ }
+
+ $OMSheaders = @{
+ "Authorization" = $signature;
+ "Log-Type" = $logType;
+ "x-ms-date" = $rfc1123date;
+ "time-generated-field" = $TimeStampField;
+ }
+
+ Try {
+
+ $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000
+ }
+ catch {
+ if ($_.Exception.Response.StatusCode.Value__ -eq 401) {
+ "REAUTHENTICATING"
+
+ $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000
+ }
+ else
+ {
+ return $_.Exception.Response.StatusCode.Value__
+ }
+ }
+
+ return $response.StatusCode
+}
+#endregion Functions
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+# get reference to storage sink
+Write-Output "Getting blobs list from $storageAccountSink storage account ($storageAccountSinkContainer container)..."
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+$allblobs = @()
+
+$continuationToken = $null
+do
+{
+ $blobs = Get-AzStorageBlob -Container $storageAccountSinkContainer -MaxCount $StorageBlobsPageSize -ContinuationToken $continuationToken -Context $saCtx | Sort-Object -Property LastModified
+ if ($blobs.Count -le 0) { break }
+ $allblobs += $blobs
+ $continuationToken = $blobs[$blobs.Count -1].ContinuationToken;
+}
+While ($null -ne $continuationToken)
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE StorageContainerName = '$storageAccountSinkContainer'"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$Conn.Close()
+$Conn.Dispose()
+
+if ($controlRows.Count -eq 0 -or -not($controlRows[0].LastProcessedDateTime))
+{
+ throw "Could not find a valid ingestion control row for $storageAccountSinkContainer"
+}
+
+$controlRow = $controlRows[0]
+$lastProcessedLine = $controlRow.LastProcessedLine
+$lastProcessedDateTime = $controlRow.LastProcessedDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+$LogAnalyticsSuffix = $controlRow.LogAnalyticsSuffix
+$logname = $lognamePrefix + $LogAnalyticsSuffix
+
+Write-Output "Processing blobs modified after $lastProcessedDateTime (line $lastProcessedLine) and ingesting them into the $($logname)_CL table..."
+
+$newProcessedTime = $null
+
+$unprocessedBlobs = @()
+
+foreach ($blob in $allblobs) {
+ $blobLastModified = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ if ($lastProcessedDateTime -lt $blobLastModified -or `
+ ($lastProcessedDateTime -eq $blobLastModified -and $lastProcessedLine -gt 0)) {
+ Write-Output "$($blob.Name) found (modified on $blobLastModified)"
+ $unprocessedBlobs += $blob
+ }
+}
+
+$unprocessedBlobs = $unprocessedBlobs | Sort-Object -Property LastModified
+
+Write-Output "Found $($unprocessedBlobs.Count) new blobs to process..."
+
+foreach ($blob in $unprocessedBlobs) {
+ $newProcessedTime = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "About to process $($blob.Name) ($($blob.Length) bytes)..."
+ $blobFilePath = "$env:TEMP\$($blob.Name)"
+ Get-AzStorageBlobContent -CloudBlob $blob.ICloudBlob -Context $saCtx -Force -Destination $blobFilePath | Out-Null
+
+ $r = [IO.File]::OpenText($blobFilePath)
+
+ $linesProcessed = 0
+ $lineCounter = 0
+ $chunkLines = @()
+
+ while ($r.Peek() -ge 0)
+ {
+ $line = $r.ReadLine()
+ if ($lineCounter -eq 0)
+ {
+ $header = $line
+ $chunkLines += $line
+ }
+ else
+ {
+ $linesProcessed++
+ }
+ if ($lastProcessedLine -lt $linesProcessed -and $lineCounter -gt 0)
+ {
+ $chunkLines += $line
+ }
+ if (($lineCounter -eq $LogAnalyticsChunkSize -or $r.Peek() -lt 0) -and $linesProcessed -gt 0)
+ {
+ $csvObject = $chunkLines | ConvertFrom-Csv
+ $jsonObject = ConvertTo-Json -InputObject $csvObject
+
+ if ($null -ne $jsonObject)
+ {
+ $res = Post-OMSData -workspaceId $workspaceId -sharedKey $sharedKey -body ([System.Text.Encoding]::UTF8.GetBytes($jsonObject)) -logType $logname -TimeStampField "Timestamp" -AzureEnvironment $cloudEnvironment
+
+ if ($res -ge 200 -and $res -lt 300)
+ {
+ Write-Output "Succesfully uploaded $lineCounter $LogAnalyticsSuffix rows to Log Analytics"
+ }
+ else
+ {
+ Write-Warning "Failed to upload $lineCounter $LogAnalyticsSuffix rows. Error code: $res"
+ $r.Dispose()
+ Remove-Item -Path $blobFilePath -Force
+ throw
+ }
+ }
+ else
+ {
+ Write-Warning "Skipped uploading $lineCounter $LogAnalyticsSuffix rows. Null JSON object."
+ }
+
+ if ($r.Peek() -lt 0) {
+ $lastProcessedLine = -1
+ }
+ else {
+ $lastProcessedLine = $linesProcessed - 1
+ }
+
+ $updatedLastProcessedLine = $lastProcessedLine
+ $updatedLastProcessedDateTime = $lastProcessedDateTime
+ if ($r.Peek() -lt 0) {
+ $updatedLastProcessedDateTime = $newProcessedTime
+ }
+ $lastProcessedDateTime = $updatedLastProcessedDateTime
+ Write-Output "Updating last processed time / line to $($updatedLastProcessedDateTime) / $updatedLastProcessedLine"
+ $sqlStatement = "UPDATE [$LogAnalyticsIngestControlTable] SET LastProcessedLine = $updatedLastProcessedLine, LastProcessedDateTime = '$updatedLastProcessedDateTime' WHERE StorageContainerName = '$storageAccountSinkContainer'"
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandText = $sqlStatement
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.ExecuteReader()
+ $Conn.Close()
+ $Conn.Dispose()
+
+ $chunkLines = @()
+ $chunkLines += $header
+ $lineCounter = 1
+ }
+ else
+ {
+ $lineCounter++
+ }
+ }
+ $r.Dispose()
+
+ if ($linesProcessed -eq 0)
+ {
+ Write-Output "No rows found"
+ $updatedLastProcessedLine = -1
+ $updatedLastProcessedDateTime = $newProcessedTime
+ Write-Output "Updating last processed time / line to $($updatedLastProcessedDateTime) / $updatedLastProcessedLine"
+ $sqlStatement = "UPDATE [$LogAnalyticsIngestControlTable] SET LastProcessedLine = $updatedLastProcessedLine, LastProcessedDateTime = '$updatedLastProcessedDateTime' WHERE StorageContainerName = '$storageAccountSinkContainer'"
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandText = $sqlStatement
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.ExecuteReader()
+ $Conn.Close()
+ $Conn.Dispose()
+ }
+ else
+ {
+ Write-Output "Processed $linesProcessed row(s) in total."
+ }
+
+ Remove-Item -Path $blobFilePath -Force
+}
+
+Write-Output "DONE"
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1
new file mode 100644
index 000000000..89b399917
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/maintenance/CleanUp-OlderRecommendationsFromSqlServer.ps1
@@ -0,0 +1,84 @@
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$RecommendationsMaxAge = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationsMaxAgeInDays" -ErrorAction SilentlyContinue)
+if (-not($RecommendationsMaxAge -gt 0))
+{
+ $RecommendationsMaxAge = 365
+}
+
+$recommendationsTable = "Recommendations"
+$SqlTimeout = 120
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+$tries = 0
+$connectionSuccess = $false
+
+Write-Output "Cleaning up recommendations older than $RecommendationsMaxAge days..."
+
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = 0
+ $Cmd.CommandText = "DELETE FROM [dbo].[$recommendationsTable] WHERE GeneratedDate < GETDATE()-$RecommendationsMaxAge"
+ $DeletedRows = $Cmd.ExecuteNonQuery()
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+ finally {
+ $Conn.Close()
+ $Conn.Dispose()
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+Write-Output "Cleaned up $DeletedRows recommendations."
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1
new file mode 100644
index 000000000..4580d5902
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-RecommendationsToLogAnalytics.ps1
@@ -0,0 +1,325 @@
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$sharedKey = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceKey"
+$LogAnalyticsChunkSize = [int] (Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsChunkSize" -ErrorAction SilentlyContinue)
+if (-not($LogAnalyticsChunkSize -gt 0))
+{
+ $LogAnalyticsChunkSize = 6000
+}
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+$StorageBlobsPageSize = [int] (Get-AutomationVariable -Name "AzureOptimization_StorageBlobsPageSize" -ErrorAction SilentlyContinue)
+if (-not($StorageBlobsPageSize -gt 0))
+{
+ $StorageBlobsPageSize = 1000
+}
+
+#region Functions
+
+# Function to create the authorization signature
+Function Build-OMSSignature ($workspaceId, $sharedKey, $date, $contentLength, $method, $contentType, $resource) {
+ $xHeaders = "x-ms-date:" + $date
+ $stringToHash = $method + "`n" + $contentLength + "`n" + $contentType + "`n" + $xHeaders + "`n" + $resource
+ $bytesToHash = [Text.Encoding]::UTF8.GetBytes($stringToHash)
+ $keyBytes = [Convert]::FromBase64String($sharedKey)
+ $sha256 = New-Object System.Security.Cryptography.HMACSHA256
+ $sha256.Key = $keyBytes
+ $calculatedHash = $sha256.ComputeHash($bytesToHash)
+ $encodedHash = [Convert]::ToBase64String($calculatedHash)
+ $authorization = 'SharedKey {0}:{1}' -f $workspaceId, $encodedHash
+ return $authorization
+}
+
+# Function to create and post the request
+Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField, $AzureEnvironment) {
+ $method = "POST"
+ $contentType = "application/json"
+ $resource = "/api/logs"
+ $rfc1123date = [DateTime]::UtcNow.ToString("r")
+ $contentLength = $body.Length
+ $signature = Build-OMSSignature `
+ -workspaceId $workspaceId `
+ -sharedKey $sharedKey `
+ -date $rfc1123date `
+ -contentLength $contentLength `
+ -method $method `
+ -contentType $contentType `
+ -resource $resource
+
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01"
+ if ($AzureEnvironment -eq "AzureChinaCloud")
+ {
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.cn" + $resource + "?api-version=2016-04-01"
+ }
+ if ($AzureEnvironment -eq "AzureUSGovernment")
+ {
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.us" + $resource + "?api-version=2016-04-01"
+ }
+ if ($AzureEnvironment -eq "AzureGermanCloud")
+ {
+ throw "Azure Germany isn't suported for the Log Analytics Data Collector API"
+ }
+
+ $OMSheaders = @{
+ "Authorization" = $signature;
+ "Log-Type" = $logType;
+ "x-ms-date" = $rfc1123date;
+ "time-generated-field" = $TimeStampField;
+ }
+
+ Try {
+
+ $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000
+ }
+ catch {
+ if ($_.Exception.Response.StatusCode.Value__ -eq 401) {
+ "REAUTHENTICATING"
+
+ $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000
+ }
+ else
+ {
+ return $_.Exception.Response.StatusCode.Value__
+ }
+ }
+
+ return $response.StatusCode
+}
+#endregion Functions
+
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+# get reference to storage sink
+Write-Output "Getting reference to $storageAccountSink storage account (recommendations exports sink)"
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+$allblobs = @()
+
+Write-Output "Getting blobs list..."
+$continuationToken = $null
+do
+{
+ $blobs = Get-AzStorageBlob -Container $storageAccountSinkContainer -MaxCount $StorageBlobsPageSize -ContinuationToken $continuationToken -Context $saCtx | Sort-Object -Property LastModified
+ if ($blobs.Count -le 0) { break }
+ $allblobs += $blobs
+ $continuationToken = $blobs[$blobs.Count -1].ContinuationToken;
+}
+While ($null -ne $continuationToken)
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE StorageContainerName = '$storageAccountSinkContainer'"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$Conn.Close()
+$Conn.Dispose()
+
+if ($controlRows.Count -eq 0 -or -not($controlRows[0].LastProcessedDateTime))
+{
+ throw "Could not find a valid ingestion control row for $storageAccountSinkContainer"
+}
+
+$controlRow = $controlRows[0]
+$lastProcessedLine = $controlRow.LastProcessedLine
+$lastProcessedDateTime = $controlRow.LastProcessedDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+$LogAnalyticsSuffix = $controlRow.LogAnalyticsSuffix
+$logname = $lognamePrefix + $LogAnalyticsSuffix
+
+Write-Output "Processing blobs modified after $lastProcessedDateTime (line $lastProcessedLine) and ingesting them into the $($logname)_CL table..."
+
+$newProcessedTime = $null
+
+$unprocessedBlobs = @()
+
+foreach ($blob in $allblobs) {
+ $blobLastModified = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ if ($lastProcessedDateTime -lt $blobLastModified -or `
+ ($lastProcessedDateTime -eq $blobLastModified -and $lastProcessedLine -gt 0)) {
+ Write-Output "$($blob.Name) found (modified on $blobLastModified)"
+ $unprocessedBlobs += $blob
+ }
+}
+
+$unprocessedBlobs = $unprocessedBlobs | Sort-Object -Property LastModified
+
+Write-Output "Found $($unprocessedBlobs.Count) new blobs to process..."
+
+foreach ($blob in $unprocessedBlobs) {
+ $newProcessedTime = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "About to process $($blob.Name)..."
+ Get-AzStorageBlobContent -CloudBlob $blob.ICloudBlob -Context $saCtx -Force
+ $jsonObject = Get-Content -Path $blob.Name | ConvertFrom-Json
+ Write-Output "Blob contains $($jsonObject.Count) results..."
+
+ if ($null -eq $jsonObject)
+ {
+ $recCount = 0
+ }
+ elseif ($null -eq $jsonObject.Count)
+ {
+ $recCount = 1
+ }
+ else
+ {
+ $recCount = $jsonObject.Count
+ }
+
+ $linesProcessed = 0
+ $jsonObjectSplitted = @()
+
+ if ($recCount -gt 1)
+ {
+ for ($i = 0; $i -lt $recCount; $i += $LogAnalyticsChunkSize) {
+ $jsonObjectSplitted += , @($jsonObject[$i..($i + ($LogAnalyticsChunkSize - 1))]);
+ }
+ }
+ else
+ {
+ $jsonObjectArray = @()
+ $jsonObjectArray += $jsonObject
+ $jsonObjectSplitted += , $jsonObjectArray
+ }
+
+ for ($j = 0; $j -lt $jsonObjectSplitted.Count; $j++)
+ {
+ if ($jsonObjectSplitted[$j])
+ {
+ $currentObjectLines = $jsonObjectSplitted[$j].Count
+ if ($lastProcessedLine -lt $linesProcessed)
+ {
+ for ($i = 0; $i -lt $jsonObjectSplitted[$j].Count; $i++)
+ {
+ $jsonObjectSplitted[$j][$i].RecommendationDescription = $jsonObjectSplitted[$j][$i].RecommendationDescription.Replace("'", "")
+ $jsonObjectSplitted[$j][$i].RecommendationAction = $jsonObjectSplitted[$j][$i].RecommendationAction.Replace("'", "")
+ $jsonObjectSplitted[$j][$i].AdditionalInfo = $jsonObjectSplitted[$j][$i].AdditionalInfo | ConvertTo-Json -Compress
+ $jsonObjectSplitted[$j][$i].Tags = $jsonObjectSplitted[$j][$i].Tags | ConvertTo-Json -Compress
+ }
+
+ $jsonObject = ConvertTo-Json -InputObject $jsonObjectSplitted[$j]
+ $res = Post-OMSData -workspaceId $workspaceId -sharedKey $sharedKey -body ([System.Text.Encoding]::UTF8.GetBytes($jsonObject)) -logType $logname -TimeStampField "Timestamp" -AzureEnvironment $cloudEnvironment
+ If ($res -ge 200 -and $res -lt 300) {
+ Write-Output "Succesfully uploaded $currentObjectLines $LogAnalyticsSuffix rows to Log Analytics"
+ $linesProcessed += $currentObjectLines
+ if ($j -eq ($jsonObjectSplitted.Count - 1)) {
+ $lastProcessedLine = -1
+ }
+ else {
+ $lastProcessedLine = $linesProcessed - 1
+ }
+
+ $updatedLastProcessedLine = $lastProcessedLine
+ $updatedLastProcessedDateTime = $lastProcessedDateTime
+ if ($j -eq ($jsonObjectSplitted.Count - 1)) {
+ $updatedLastProcessedDateTime = $newProcessedTime
+ }
+ $lastProcessedDateTime = $updatedLastProcessedDateTime
+ Write-Output "Updating last processed time / line to $($updatedLastProcessedDateTime) / $updatedLastProcessedLine"
+ $sqlStatement = "UPDATE [$LogAnalyticsIngestControlTable] SET LastProcessedLine = $updatedLastProcessedLine, LastProcessedDateTime = '$updatedLastProcessedDateTime' WHERE StorageContainerName = '$storageAccountSinkContainer'"
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandText = $sqlStatement
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.ExecuteReader()
+ $Conn.Close()
+ $Conn.Dispose()
+ }
+ Else {
+ $linesProcessed += $currentObjectLines
+ Write-Warning "Failed to upload $currentObjectLines $LogAnalyticsSuffix rows. Error code: $res"
+ throw
+ }
+ }
+ else
+ {
+ $linesProcessed += $currentObjectLines
+ }
+ }
+ }
+
+ Remove-Item -Path $blob.Name -Force
+}
+
+Write-Output "DONE"
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1
new file mode 100644
index 000000000..8772352d1
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-RecommendationsToSQLServer.ps1
@@ -0,0 +1,291 @@
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$ChunkSize = [int] (Get-AutomationVariable -Name "AzureOptimization_SQLServerInsertSize" -ErrorAction SilentlyContinue)
+if (-not($ChunkSize -gt 0))
+{
+ $ChunkSize = 900
+}
+$SqlTimeout = 120
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+$StorageBlobsPageSize = [int] (Get-AutomationVariable -Name "AzureOptimization_StorageBlobsPageSize" -ErrorAction SilentlyContinue)
+if (-not($StorageBlobsPageSize -gt 0))
+{
+ $StorageBlobsPageSize = 1000
+}
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+# get reference to storage sink
+Write-Output "Getting reference to $storageAccountSink storage account (recommendations exports sink)"
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+$allblobs = @()
+
+Write-Output "Getting blobs list..."
+$continuationToken = $null
+do
+{
+ $blobs = Get-AzStorageBlob -Container $storageAccountSinkContainer -MaxCount $StorageBlobsPageSize -ContinuationToken $continuationToken -Context $saCtx | Sort-Object -Property LastModified
+ if ($blobs.Count -le 0) { break }
+ $allblobs += $blobs
+ $continuationToken = $blobs[$blobs.Count -1].ContinuationToken;
+}
+While ($null -ne $continuationToken)
+
+$SqlServerIngestControlTable = "SqlServerIngestControl"
+$recommendationsTable = "Recommendations"
+
+$tries = 0
+$connectionSuccess = $false
+
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$SqlServerIngestControlTable] WHERE StorageContainerName = '$storageAccountSinkContainer' and SqlTableName = '$recommendationsTable'"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+if ($controlRows.Count -eq 0)
+{
+ throw "Could not find a control row for $storageAccountSinkContainer container and $recommendationsTable table."
+}
+
+$controlRow = $controlRows[0]
+$lastProcessedLine = $controlRow.LastProcessedLine
+$lastProcessedDateTime = $controlRow.LastProcessedDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+
+$Conn.Close()
+$Conn.Dispose()
+
+Write-Output "Processing blobs modified after $lastProcessedDateTime (line $lastProcessedLine) and ingesting them into the Recommendations SQL table..."
+
+$newProcessedTime = $null
+
+$unprocessedBlobs = @()
+
+foreach ($blob in $allblobs) {
+ $blobLastModified = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ if ($lastProcessedDateTime -lt $blobLastModified -or `
+ ($lastProcessedDateTime -eq $blobLastModified -and $lastProcessedLine -gt 0)) {
+ Write-Output "$($blob.Name) found (modified on $blobLastModified)"
+ $unprocessedBlobs += $blob
+ }
+}
+
+$unprocessedBlobs = $unprocessedBlobs | Sort-Object -Property LastModified
+
+Write-Output "Found $($unprocessedBlobs.Count) new blobs to process..."
+
+foreach ($blob in $unprocessedBlobs) {
+ $newProcessedTime = $blob.LastModified.UtcDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+ Write-Output "About to process $($blob.Name)..."
+ Get-AzStorageBlobContent -CloudBlob $blob.ICloudBlob -Context $saCtx -Force
+ $jsonObject = Get-Content -Path $blob.Name | ConvertFrom-Json
+ Write-Output "Blob contains $($jsonObject.Count) results..."
+
+ if ($null -eq $jsonObject)
+ {
+ $recCount = 0
+ }
+ elseif ($null -eq $jsonObject.Count)
+ {
+ $recCount = 1
+ }
+ else
+ {
+ $recCount = $jsonObject.Count
+ }
+
+ $linesProcessed = 0
+ $jsonObjectSplitted = @()
+
+ if ($recCount -gt 1)
+ {
+ for ($i = 0; $i -lt $recCount; $i += $ChunkSize) {
+ $jsonObjectSplitted += , @($jsonObject[$i..($i + ($ChunkSize - 1))]);
+ }
+ }
+ else
+ {
+ $jsonObjectArray = @()
+ $jsonObjectArray += $jsonObject
+ $jsonObjectSplitted += , $jsonObjectArray
+ }
+
+ for ($j = 0; $j -lt $jsonObjectSplitted.Count; $j++)
+ {
+ if ($jsonObjectSplitted[$j])
+ {
+ $currentObjectLines = $jsonObjectSplitted[$j].Count
+ if ($lastProcessedLine -lt $linesProcessed)
+ {
+ $sqlStatement = "INSERT INTO [$recommendationsTable]"
+ $sqlStatement += " (RecommendationId, GeneratedDate, Cloud, Category, ImpactedArea, Impact, RecommendationType, RecommendationSubType,"
+ $sqlStatement += " RecommendationSubTypeId, RecommendationDescription, RecommendationAction, InstanceId, InstanceName, AdditionalInfo,"
+ $sqlStatement += " ResourceGroup, SubscriptionGuid, SubscriptionName, TenantGuid, FitScore, Tags, DetailsUrl) VALUES"
+ for ($i = 0; $i -lt $jsonObjectSplitted[$j].Count; $i++)
+ {
+ $jsonObjectSplitted[$j][$i].RecommendationDescription = $jsonObjectSplitted[$j][$i].RecommendationDescription.Replace("'", "")
+ $jsonObjectSplitted[$j][$i].RecommendationAction = $jsonObjectSplitted[$j][$i].RecommendationAction.Replace("'", "")
+ if ($null -ne $jsonObjectSplitted[$j][$i].InstanceName)
+ {
+ $jsonObjectSplitted[$j][$i].InstanceName = $jsonObjectSplitted[$j][$i].InstanceName.Replace("'", "")
+ }
+ $additionalInfoString = $jsonObjectSplitted[$j][$i].AdditionalInfo | ConvertTo-Json -Compress
+ $tagsString = $jsonObjectSplitted[$j][$i].Tags | ConvertTo-Json -Compress
+ $subscriptionGuid = "NULL"
+ if ($jsonObjectSplitted[$j][$i].SubscriptionGuid)
+ {
+ $subscriptionGuid = "'$($jsonObjectSplitted[$j][$i].SubscriptionGuid)'"
+ }
+ $subscriptionName = "NULL"
+ if ($jsonObjectSplitted[$j][$i].SubscriptionName)
+ {
+ $subscriptionName = $jsonObjectSplitted[$j][$i].SubscriptionName.Replace("'", "")
+ $subscriptionName = "'$subscriptionName'"
+ }
+ $resourceGroup = "NULL"
+ if ($jsonObjectSplitted[$j][$i].ResourceGroup)
+ {
+ $resourceGroup = "'$($jsonObjectSplitted[$j][$i].ResourceGroup)'"
+ }
+ $sqlStatement += " (NEWID(), CONVERT(DATETIME, '$($jsonObjectSplitted[$j][$i].Timestamp)'), '$($jsonObjectSplitted[$j][$i].Cloud)'"
+ $sqlStatement += ", '$($jsonObjectSplitted[$j][$i].Category)', '$($jsonObjectSplitted[$j][$i].ImpactedArea)'"
+ $sqlStatement += ", '$($jsonObjectSplitted[$j][$i].Impact)', '$($jsonObjectSplitted[$j][$i].RecommendationType)'"
+ $sqlStatement += ", '$($jsonObjectSplitted[$j][$i].RecommendationSubType)', '$($jsonObjectSplitted[$j][$i].RecommendationSubTypeId)'"
+ $sqlStatement += ", '$($jsonObjectSplitted[$j][$i].RecommendationDescription)', '$($jsonObjectSplitted[$j][$i].RecommendationAction)'"
+ $sqlStatement += ", '$($jsonObjectSplitted[$j][$i].InstanceId)', '$($jsonObjectSplitted[$j][$i].InstanceName)', '$additionalInfoString'"
+ $sqlStatement += ", $resourceGroup, $subscriptionGuid, $subscriptionName, '$($jsonObjectSplitted[$j][$i].TenantGuid)'"
+ $sqlStatement += ", $($jsonObjectSplitted[$j][$i].FitScore), '$tagsString', '$($jsonObjectSplitted[$j][$i].DetailsURL)')"
+ if ($i -ne ($jsonObjectSplitted[$j].Count-1))
+ {
+ $sqlStatement += ","
+ }
+ }
+
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn2 = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn2.AccessToken = $dbToken.Token
+ $Conn2.Open()
+
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn2
+ $Cmd.CommandText = $sqlStatement
+ $Cmd.CommandTimeout = $SqlTimeout
+ try
+ {
+ $Cmd.ExecuteReader()
+ }
+ catch
+ {
+ Write-Output "Failed statement: $sqlStatement"
+ throw
+ }
+
+ $Conn2.Close()
+
+ $linesProcessed += $currentObjectLines
+ Write-Output "Processed $linesProcessed lines..."
+ if ($j -eq ($jsonObjectSplitted.Count - 1)) {
+ $lastProcessedLine = -1
+ }
+ else {
+ $lastProcessedLine = $linesProcessed - 1
+ }
+
+ $updatedLastProcessedLine = $lastProcessedLine
+ $updatedLastProcessedDateTime = $lastProcessedDateTime
+ if ($j -eq ($jsonObjectSplitted.Count - 1)) {
+ $updatedLastProcessedDateTime = $newProcessedTime
+ }
+ $lastProcessedDateTime = $updatedLastProcessedDateTime
+ Write-Output "Updating last processed time / line to $($updatedLastProcessedDateTime) / $updatedLastProcessedLine"
+ $sqlStatement = "UPDATE [$SqlServerIngestControlTable] SET LastProcessedLine = $updatedLastProcessedLine, LastProcessedDateTime = '$updatedLastProcessedDateTime' WHERE StorageContainerName = '$storageAccountSinkContainer'"
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandText = $sqlStatement
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.ExecuteReader()
+ $Conn.Close()
+ }
+ else
+ {
+ $linesProcessed += $currentObjectLines
+ }
+ }
+ }
+
+ Remove-Item -Path $blob.Name -Force
+}
+
+Write-Output "DONE"
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1
new file mode 100644
index 000000000..84725c4fc
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Ingest-SuppressionsToLogAnalytics.ps1
@@ -0,0 +1,249 @@
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$sharedKey = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceKey"
+$LogAnalyticsChunkSize = [int] (Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsChunkSize" -ErrorAction SilentlyContinue)
+if (-not($LogAnalyticsChunkSize -gt 0))
+{
+ $LogAnalyticsChunkSize = 6000
+}
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$SqlTimeout = 300
+$FiltersTable = "Filters"
+
+#region Functions
+
+# Function to create the authorization signature
+Function Build-OMSSignature ($workspaceId, $sharedKey, $date, $contentLength, $method, $contentType, $resource) {
+ $xHeaders = "x-ms-date:" + $date
+ $stringToHash = $method + "`n" + $contentLength + "`n" + $contentType + "`n" + $xHeaders + "`n" + $resource
+ $bytesToHash = [Text.Encoding]::UTF8.GetBytes($stringToHash)
+ $keyBytes = [Convert]::FromBase64String($sharedKey)
+ $sha256 = New-Object System.Security.Cryptography.HMACSHA256
+ $sha256.Key = $keyBytes
+ $calculatedHash = $sha256.ComputeHash($bytesToHash)
+ $encodedHash = [Convert]::ToBase64String($calculatedHash)
+ $authorization = 'SharedKey {0}:{1}' -f $workspaceId, $encodedHash
+ return $authorization
+}
+
+# Function to create and post the request
+Function Post-OMSData($workspaceId, $sharedKey, $body, $logType, $TimeStampField, $AzureEnvironment) {
+ $method = "POST"
+ $contentType = "application/json"
+ $resource = "/api/logs"
+ $rfc1123date = [DateTime]::UtcNow.ToString("r")
+ $contentLength = $body.Length
+ $signature = Build-OMSSignature `
+ -workspaceId $workspaceId `
+ -sharedKey $sharedKey `
+ -date $rfc1123date `
+ -contentLength $contentLength `
+ -method $method `
+ -contentType $contentType `
+ -resource $resource
+
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01"
+ if ($AzureEnvironment -eq "AzureChinaCloud")
+ {
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.cn" + $resource + "?api-version=2016-04-01"
+ }
+ if ($AzureEnvironment -eq "AzureUSGovernment")
+ {
+ $uri = "https://" + $workspaceId + ".ods.opinsights.azure.us" + $resource + "?api-version=2016-04-01"
+ }
+ if ($AzureEnvironment -eq "AzureGermanCloud")
+ {
+ throw "Azure Germany isn't suported for the Log Analytics Data Collector API"
+ }
+
+ $OMSheaders = @{
+ "Authorization" = $signature;
+ "Log-Type" = $logType;
+ "x-ms-date" = $rfc1123date;
+ "time-generated-field" = $TimeStampField;
+ }
+
+ Try {
+
+ $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000
+ }
+ catch {
+ if ($_.Exception.Response.StatusCode.Value__ -eq 401) {
+ "REAUTHENTICATING"
+
+ $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType $contentType -Headers $OMSheaders -Body $body -UseBasicParsing -TimeoutSec 1000
+ }
+ else
+ {
+ return $_.Exception.Response.StatusCode.Value__
+ }
+ }
+
+ return $response.StatusCode
+}
+#endregion Functions
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Getting excluded recommendation sub-type IDs..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$FiltersTable] WHERE IsEnabled = 1 AND (FilterEndDate IS NULL OR FilterEndDate > GETDATE())"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $filters = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($filters) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$Conn.Close()
+$Conn.Dispose()
+
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$filterObjects = @()
+
+$filterObject = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ FilterId = (New-Guid).Guid
+ RecommendationSubTypeId = [System.Guid]::empty.Guid
+ FilterType = "Dummy"
+ InstanceId = [System.Guid]::empty.Guid
+ InstanceName = "Dummy"
+ FilterStartDate = "2019-01-01T00:00:00.000Z"
+ FilterEndDate = "2199-12-31T23:59:59.000Z"
+ Author = "AOE"
+ Notes = "This is a dummy suppression required to build the full suppressions schema in Log Analytics"
+}
+$filterObjects += $filterObject
+
+foreach ($filter in $filters)
+{
+ $filterEndDate = $null
+ if (-not([string]::IsNullOrEmpty($filter.FilterEndDate)))
+ {
+ Write-Output $filter.FilterEndDate
+ $filterEndDate = $filter.FilterEndDate.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ else
+ {
+ $filterEndDate = "2199-12-31T23:59:59.000Z"
+ }
+
+ $filterStartDate = $null
+ if (-not([string]::IsNullOrEmpty($filter.FilterStartDate)))
+ {
+ $filterStartDate = $filter.FilterStartDate.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+ }
+ else
+ {
+ $filterStartDate = "2019-01-01T00:00:00.000Z"
+ }
+
+ $instanceId = $null
+ $instanceName = $null
+ $ObjectGuid = [System.Guid]::empty
+ if ([System.Guid]::TryParse($filter.InstanceId, [System.Management.Automation.PSReference]$ObjectGuid))
+ {
+ $instanceId = $filter.InstanceId
+ }
+ else
+ {
+ $instanceName = $filter.InstanceId
+ }
+
+ $filterObject = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ FilterId = $filter.FilterId
+ RecommendationSubTypeId = $filter.RecommendationSubTypeId
+ FilterType = $filter.FilterType
+ InstanceId = $instanceId
+ InstanceName = $instanceName
+ FilterStartDate = $filterStartDate
+ FilterEndDate = $filterEndDate
+ Author = $filter.Author
+ Notes = $filter.Notes
+ }
+ $filterObjects += $filterObject
+}
+
+$filtersJson = $filterObjects | ConvertTo-Json
+
+$LogAnalyticsSuffix = "SuppressionsV1"
+$logname = $lognamePrefix + $LogAnalyticsSuffix
+
+$res = Post-OMSData -workspaceId $workspaceId -sharedKey $sharedKey -body ([System.Text.Encoding]::UTF8.GetBytes($filtersJson)) -logType $logname -TimeStampField "Timestamp" -AzureEnvironment $cloudEnvironment
+If ($res -ge 200 -and $res -lt 300) {
+ Write-Output "Succesfully uploaded $($filterObjects.Count) $LogAnalyticsSuffix rows to Log Analytics"
+}
+Else {
+ Write-Warning "Failed to upload $($filterObjects.Count) $LogAnalyticsSuffix rows. Error code: $res"
+ throw
+}
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1
new file mode 100644
index 000000000..8bd5f2f45
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AADExpiringCredentialsToBlobStorage.ps1
@@ -0,0 +1,371 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$expiringCredsDays = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationAADMinCredValidityDays")
+$notExpiringCredsDays = ([int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationAADMaxCredValidityYears")) * 365
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('AADObjects')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$aadObjectsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AADObjects' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $aadObjectsTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 1
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+# Execute the expiring creds recommendation query against Log Analytics
+
+$baseQuery = @"
+ let expiryInterval = $($expiringCredsDays)d;
+ let AppsAndKeys = materialize ($aadObjectsTableName
+ | where TimeGenerated > ago(1d)
+ | where ObjectType_s in ('Application','ServicePrincipal')
+ | where ObjectSubType_s != 'ManagedIdentity'
+ | where Keys_s startswith '['
+ | extend Keys = parse_json(Keys_s)
+ | project-away Keys_s
+ | mv-expand Keys
+ | evaluate bag_unpack(Keys)
+ | union (
+ $aadObjectsTableName
+ | where TimeGenerated > ago(1d)
+ | where ObjectType_s in ('Application','ServicePrincipal')
+ | where ObjectSubType_s != 'ManagedIdentity'
+ | where isnotempty(Keys_s) and Keys_s !startswith '['
+ | extend Keys = parse_json(Keys_s)
+ | project-away Keys_s
+ | evaluate bag_unpack(Keys)
+ )
+ );
+ let ExpirationInRisk = AppsAndKeys
+ | where EndDate < now()+expiryInterval
+ | project ApplicationId_g, KeyId, RiskDate = EndDate;
+ let NotInRisk = AppsAndKeys
+ | where EndDate > now()+expiryInterval
+ | project ApplicationId_g, KeyId, ComfortDate = EndDate;
+ let ApplicationsInRisk = ExpirationInRisk
+ | join kind=leftouter ( NotInRisk ) on ApplicationId_g
+ | where isempty(ComfortDate)
+ | summarize ExpiresOn = max(RiskDate) by ApplicationId_g;
+ AppsAndKeys
+ | join kind=inner (ApplicationsInRisk) on ApplicationId_g
+ | summarize ExpiresOn = max(EndDate) by ApplicationId_g, ObjectType_s, DisplayName_s, Cloud_s, KeyType, TenantGuid_g
+ | order by ExpiresOn desc
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.ApplicationId_g
+ $detailsURL = "https://portal.azure.$azureTld/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Credentials/appId/$queryInstanceId"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["ObjectType"] = $result.ObjectType_s
+ $additionalInfoDictionary["KeyType"] = $result.KeyType
+ $additionalInfoDictionary["ExpiresOn"] = $result.ExpiresOn
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.AzureActiveDirectory/objects"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "AADExpiringCredentials"
+ RecommendationSubTypeId = "3292c489-2782-498b-aad0-a4cef50f6ca2"
+ RecommendationDescription = "Microsoft Entra application with credentials expired or about to expire"
+ RecommendationAction = "Update the Microsoft Entra application credential before the expiration date"
+ InstanceId = $result.ApplicationId_g
+ InstanceName = $result.DisplayName_s
+ AdditionalInfo = $additionalInfoDictionary
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "aadexpiringcerts-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+# Execute the not expiring in less than X years creds recommendation query against Log Analytics
+
+$baseQuery = @"
+ let expiryInterval = $($notExpiringCredsDays)d;
+ let AppsAndKeys = materialize ($aadObjectsTableName
+ | where TimeGenerated > ago(1d)
+ | where ObjectSubType_s != 'ManagedIdentity'
+ | where Keys_s startswith '['
+ | extend Keys = parse_json(Keys_s)
+ | project-away Keys_s
+ | mv-expand Keys
+ | evaluate bag_unpack(Keys)
+ | union (
+ $aadObjectsTableName
+ | where TimeGenerated > ago(1d)
+ | where ObjectSubType_s != 'ManagedIdentity'
+ | where isnotempty(Keys_s) and Keys_s !startswith '['
+ | extend Keys = parse_json(Keys_s)
+ | project-away Keys_s
+ | evaluate bag_unpack(Keys)
+ )
+ );
+ AppsAndKeys
+ | where EndDate > now()+expiryInterval
+ | project ApplicationId_g, ObjectType_s, DisplayName_s, Cloud_s, KeyType, TenantGuid_g, EndDate
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.ApplicationId_g
+ $detailsURL = "https://portal.azure.$azureTld/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Credentials/appId/$queryInstanceId"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["ObjectType"] = $result.ObjectType_s
+ $additionalInfoDictionary["KeyType"] = $result.KeyType
+ $additionalInfoDictionary["ExpiresOn"] = $result.EndDate
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Security"
+ ImpactedArea = "Microsoft.AzureActiveDirectory/objects"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "AADNotExpiringCredentials"
+ RecommendationSubTypeId = "ecd969c8-3f16-481a-9577-5ed32e5e1a1d"
+ RecommendationDescription = "Microsoft Entra application with credentials expiration not set or too far in time"
+ RecommendationAction = "Update the Microsoft Entra application credential with a shorter expiration date"
+ InstanceId = $result.ApplicationId_g
+ InstanceName = $result.DisplayName_s
+ AdditionalInfo = $additionalInfoDictionary
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "aadnotexpiringcerts-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..555950094
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-ARMOptimizationsToBlobStorage.ps1
@@ -0,0 +1,517 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$assignmentsPercentageThresholdVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationRBACAssignmentsPercentageThreshold" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($assignmentsPercentageThresholdVar) -or $assignmentsPercentageThresholdVar -eq 0)
+{
+ $assignmentsPercentageThreshold = 80
+}
+else
+{
+ $assignmentsPercentageThreshold = [int] $assignmentsPercentageThresholdVar
+}
+
+$assignmentsSubscriptionsLimitVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationRBACSubscriptionsAssignmentsLimit" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($assignmentsSubscriptionsLimitVar) -or $assignmentsSubscriptionsLimitVar -eq 0)
+{
+ $assignmentsSubscriptionsLimit = 4000
+}
+else
+{
+ $assignmentsSubscriptionsLimit = [int] $assignmentsSubscriptionsLimitVar
+}
+
+$assignmentsMgmtGroupsLimitVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationRBACMgmtGroupsAssignmentsLimit" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($assignmentsMgmtGroupsLimitVar) -or $assignmentsMgmtGroupsLimitVar -eq 0)
+{
+ $assignmentsMgmtGroupsLimit = 500
+}
+else
+{
+ $assignmentsMgmtGroupsLimit = [int] $assignmentsMgmtGroupsLimitVar
+}
+
+$rgPercentageThresholdVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationResourceGroupsPerSubPercentageThreshold" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($rgPercentageThresholdVar) -or $rgPercentageThresholdVar -eq 0)
+{
+ $rgPercentageThreshold = 80
+}
+else
+{
+ $rgPercentageThreshold = [int] $rgPercentageThresholdVar
+}
+
+$rgLimitVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationResourceGroupsPerSubLimit" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($rgLimitVar) -or $rgLimitVar -eq 0)
+{
+ $rgLimit = 980
+}
+else
+{
+ $rgLimit = [int] $rgLimitVar
+}
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('RBACAssignments','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$rbacTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'RBACAssignments' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $rbacTableName and $subscriptionsTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+$assignmentsThreshold = $assignmentsSubscriptionsLimit * ($assignmentsPercentageThreshold / 100)
+
+Write-Output "Looking for subscriptions with more than $assignmentsPercentageThreshold% of the $assignmentsSubscriptionsLimit RBAC assignments limit..."
+
+$baseQuery = @"
+ $rbacTableName
+ | where TimeGenerated > ago(1d) and Model_s == 'AzureRM' and Scope_s startswith '/subscriptions/'
+ | extend SubscriptionGuid_g = tostring(split(Scope_s, '/')[2])
+ | summarize AssignmentsCount=count() by SubscriptionGuid_g, TenantGuid_g, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s, Tags_s, InstanceId_s
+ ) on SubscriptionGuid_g
+ | where AssignmentsCount >= $assignmentsThreshold
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/users"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["assignmentsCount"] = $result.AssignmentsCount
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Resources/subscriptions"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "HighRBACAssignmentsSubscriptions"
+ RecommendationSubTypeId = "c6a88d8c-3242-44b0-9793-c91897ef68bc"
+ RecommendationDescription = "Subscriptions close to the maximum limit of RBAC assignments"
+ RecommendationAction = "Remove unneeded RBAC assignments or use group-based (or nested group-based) assignments"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.SubscriptionName
+ AdditionalInfo = $additionalInfoDictionary
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "subscriptionsrbaclimits-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+$assignmentsThreshold = $assignmentsMgmtGroupsLimit * ($assignmentsPercentageThreshold / 100)
+
+Write-Output "Looking for management groups with more than $assignmentsPercentageThreshold% of the $assignmentsMgmtGroupsLimit RBAC assignments limit..."
+
+$baseQuery = @"
+ $rbacTableName
+ | where TimeGenerated > ago(1d) and Model_s == 'AzureRM' and Scope_s has 'managementGroups'
+ | extend ManagementGroupId = tostring(split(Scope_s, '/')[4])
+ | summarize AssignmentsCount=count() by ManagementGroupId, TenantGuid_g, Scope_s, Cloud_s
+ | where AssignmentsCount >= $assignmentsThreshold
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/blade/Microsoft_Azure_ManagementGroups/ManagementGroupBrowseBlade/MGBrowse_overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["assignmentsCount"] = $result.AssignmentsCount
+
+ $fitScore = 5
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Management/managementGroups"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "HighRBACAssignmentsManagementGroups"
+ RecommendationSubTypeId = "b36dea3e-ef21-45a9-a704-6f629fab236d"
+ RecommendationDescription = "Management Groups close to the maximum limit of RBAC assignments"
+ RecommendationAction = "Remove unneeded RBAC assignments or use group-based (or nested group-based) assignments"
+ InstanceId = $result.Scope_s
+ InstanceName = $result.ManagementGroupId
+ AdditionalInfo = $additionalInfoDictionary
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "mgmtgroupsrbaclimits-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+$rgThreshold = $rgLimit * ($rgPercentageThreshold / 100)
+
+Write-Output "Looking for subscriptions with more than $rgPercentageThreshold% of the $rgLimit Resource Groups limit..."
+
+$baseQuery = @"
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions/resourceGroups'
+ | summarize RGCount=count() by SubscriptionGuid_g, TenantGuid_g, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s, Tags_s, InstanceId_s
+ ) on SubscriptionGuid_g
+ | where RGCount >= $rgThreshold
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/resourceGroups"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["resourceGroupsCount"] = $result.RGCount
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Resources/subscriptions"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "HighResourceGroupCountSubscriptions"
+ RecommendationSubTypeId = "4468da8d-1e72-4998-b6d2-3bc38ddd9330"
+ RecommendationDescription = "Subscriptions close to the maximum limit of resource groups"
+ RecommendationAction = "Remove unneeded resource groups or split your resource groups across multiple subscriptions"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.SubscriptionName
+ AdditionalInfo = $additionalInfoDictionary
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "subscriptionsrglimits-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1
new file mode 100644
index 000000000..f37a76767
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AdvisorAsIsToBlobStorage.ps1
@@ -0,0 +1,315 @@
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+# must be less than or equal to the advisor exports frequency
+$daysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendAdvisorPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($daysBackwards -gt 0)) {
+ $daysBackwards = 7
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$CategoryFilter = Get-AutomationVariable -Name "AzureOptimization_AdvisorFilter" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($CategoryFilter))
+{
+ $CategoryFilter = "HighAvailability,Security,Performance,OperationalExcellence" # comma-separated list of categories
+}
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+$FiltersTable = "Filters"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGVirtualMachine','AzureAdvisor','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$advisorTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureAdvisor' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $subscriptionsTableName and $advisorTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+Write-Output "Getting excluded recommendation sub-type IDs..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$FiltersTable] WHERE FilterType = 'Exclude' AND IsEnabled = 1 AND (FilterEndDate IS NULL OR FilterEndDate > GETDATE())"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $filters = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($filters) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$Conn.Close()
+$Conn.Dispose()
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+# Execute the recommendation query against Log Analytics
+
+$FinalCategoryFilter = ""
+
+if (-not([string]::IsNullOrEmpty($CategoryFilter)))
+{
+ $categories = $CategoryFilter.Split(',')
+ for ($i = 0; $i -lt $categories.Count; $i++)
+ {
+ $categories[$i] = "'" + $categories[$i] + "'"
+ }
+ $FinalCategoryFilter = " and Category in (" + ($categories -join ",") + ")"
+}
+
+$baseQuery = @"
+let advisorInterval = $($daysBackwards)d;
+$advisorTableName
+| where todatetime(TimeGenerated) > ago(advisorInterval)$FinalCategoryFilter
+| extend AdvisorRecIdIndex = indexof(InstanceId_s, '/providers/microsoft.advisor/recommendations')
+| extend InstanceName_s = iif(isnotempty(InstanceName_s),InstanceName_s,iif(AdvisorRecIdIndex > 0, split(substring(InstanceId_s, 0, AdvisorRecIdIndex),'/')[-1], split(InstanceId_s,'/')[-1]))
+| summarize by InstanceId_s, InstanceName_s, Category, Description_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroup, Cloud_s, AdditionalInfo_s, RecommendationText_s, ImpactedArea_s, Impact_s, RecommendationTypeId_g, Tags_s
+| join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+) on SubscriptionGuid_g
+"@
+
+Write-Output "Getting $CategoryFilter recommendations for $($daysBackwards)d Advisor..."
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $daysBackwards) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ throw "Execution aborted"
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+Write-Output "Generating fit score..."
+
+foreach ($result in $results) {
+
+ if ($filters | Where-Object { $_.RecommendationSubTypeId -eq $result.RecommendationTypeId_g})
+ {
+ continue
+ }
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $additionalInfoDictionary = @{}
+ if (-not([string]::IsNullOrEmpty($result.AdditionalInfo_s)))
+ {
+ ($result.AdditionalInfo_s | ConvertFrom-Json).PsObject.Properties | ForEach-Object { $additionalInfoDictionary[$_.Name] = $_.Value }
+ }
+
+ $fitScore = 5
+
+ $queryInstanceId = $result.InstanceId_s
+
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $recommendationSubType = "Advisor" + $result.Category
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = $result.Category
+ ImpactedArea = $result.ImpactedArea_s
+ Impact = $result.Impact_s
+ RecommendationType = "BestPractices"
+ RecommendationSubType = $recommendationSubType
+ RecommendationSubTypeId = $result.RecommendationTypeId_g
+ RecommendationDescription = $result.Description_s.Replace("'","")
+ RecommendationAction = $result.RecommendationText_s.Replace("'","")
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+Write-Output "Exporting final $($recommendations.Count) results as a JSON file..."
+
+$fileDate = $datetime.ToString("yyyyMMdd")
+$jsonExportPath = "advisor-asis-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+Write-Output "Uploading $jsonExportPath to blob storage..."
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json" };
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1
new file mode 100644
index 000000000..d5e11aef1
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AdvisorCostAugmentedToBlobStorage.ps1
@@ -0,0 +1,903 @@
+$ErrorActionPreference = "Stop"
+
+function Find-SkuHourlyPrice {
+ param (
+ [object[]] $SKUPriceSheet,
+ [string] $SKUName
+ )
+
+ $skuPriceObject = $null
+
+ if ($SKUPriceSheet)
+ {
+ $skuNameParts = $SKUName.Split('_')
+
+ if ($skuNameParts.Count -eq 3) # e.g., Standard_D1_v2
+ {
+ $skuNameFilter = "*" + $skuNameParts[1] + " *"
+ $skuVersionFilter = "*" + $skuNameParts[2]
+ $skuPrices = $SKUPriceSheet | Where-Object { $_.MeterName_s -like $skuNameFilter `
+ -and $_.MeterName_s -notlike '*Low Priority' -and $_.MeterName_s -notlike '*Expired' `
+ -and $_.MeterName_s -like $skuVersionFilter -and $_.MeterSubCategory_s -notlike '*Windows' -and $_.UnitPrice_s -ne 0 }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ if ($skuPrices.Count -gt 2) # D1-like scenarios
+ {
+ $skuFilter = "*" + $skuNameParts[1] + " " + $skuNameParts[2] + "*"
+ $skuPrices = $skuPrices | Where-Object { $_.MeterName_s -like $skuFilter }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ }
+ }
+
+ if ($skuNameParts.Count -eq 2) # e.g., Standard_D1
+ {
+ $skuNameFilter = "*" + $skuNameParts[1] + "*"
+
+ $skuPrices = $SKUPriceSheet | Where-Object { $_.MeterName_s -like $skuNameFilter `
+ -and $_.MeterName_s -notlike '*Low Priority' -and $_.MeterName_s -notlike '*Expired' `
+ -and $_.MeterName_s -notlike '* v*' -and $_.MeterSubCategory_s -notlike '*Windows' -and $_.UnitPrice_s -ne 0 }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ if ($skuPrices.Count -gt 2) # D1-like scenarios
+ {
+ $skuFilterLeft = "*" + $skuNameParts[1] + "/*"
+ $skuFilterRight = "*/" + $skuNameParts[1] + "*"
+ $skuPrices = $skuPrices | Where-Object { $_.MeterName_s -like $skuFilterLeft -or $_.MeterName_s -like $skuFilterRight }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ }
+ }
+ }
+
+ $targetHourlyPrice = [double]::MaxValue
+ if ($null -ne $skuPriceObject)
+ {
+ $targetUnitHours = [int] (Select-String -InputObject $skuPriceObject.UnitOfMeasure_s -Pattern "^\d+").Matches[0].Value
+ if ($targetUnitHours -gt 0)
+ {
+ $targetHourlyPrice = [double] ($skuPriceObject.UnitPrice_s / $targetUnitHours)
+ }
+ }
+
+ return $targetHourlyPrice
+}
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion"
+
+# must be less than or equal to the advisor exports frequency
+$daysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendAdvisorPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($daysBackwards -gt 0)) {
+ $daysBackwards = 7
+}
+
+$perfDaysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendPerfPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($perfDaysBackwards -gt 0)) {
+ $perfDaysBackwards = 7
+}
+
+$perfTimeGrain = Get-AutomationVariable -Name "AzureOptimization_RecommendPerfTimeGrain" -ErrorAction SilentlyContinue
+if (-not($perfTimeGrain)) {
+ $perfTimeGrain = "1h"
+}
+
+# percentiles variables
+$cpuPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileCpu" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentile -gt 0)) {
+ $cpuPercentile = 99
+}
+$memoryPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileMemory" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentile -gt 0)) {
+ $memoryPercentile = 99
+}
+$networkPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileNetwork" -ErrorAction SilentlyContinue)
+if (-not($networkPercentile -gt 0)) {
+ $networkPercentile = 99
+}
+$diskPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileDisk" -ErrorAction SilentlyContinue)
+if (-not($diskPercentile -gt 0)) {
+ $diskPercentile = 99
+}
+
+# perf thresholds variables
+$cpuPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentageThreshold -gt 0)) {
+ $cpuPercentageThreshold = 30
+}
+$memoryPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdMemoryPercentage" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentageThreshold -gt 0)) {
+ $memoryPercentageThreshold = 50
+}
+$networkMpbsThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdNetworkMbps" -ErrorAction SilentlyContinue)
+if (-not($networkMpbsThreshold -gt 0)) {
+ $networkMpbsThreshold = 750
+}
+
+# perf thresholds variables (shutdown)
+$cpuPercentageShutdownThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuShutdownPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentageShutdownThreshold -gt 0)) {
+ $cpuPercentageShutdownThreshold = 5
+}
+$memoryPercentageShutdownThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdMemoryShutdownPercentage" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentageShutdownThreshold -gt 0)) {
+ $memoryPercentageShutdownThreshold = 100
+}
+$networkMpbsShutdownThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdNetworkShutdownMbps" -ErrorAction SilentlyContinue )
+if (-not($networkMpbsShutdownThreshold -gt 0)) {
+ $networkMpbsShutdownThreshold = 10
+}
+
+$rightSizeRecommendationId = Get-AutomationVariable -Name "AzureOptimization_RecommendationAdvisorCostRightSizeId" -ErrorAction SilentlyContinue
+if (-not($rightSizeRecommendationId)) {
+ $rightSizeRecommendationId = 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974'
+}
+
+$additionalPerfWorkspaces = Get-AutomationVariable -Name "AzureOptimization_RightSizeAdditionalPerfWorkspaces" -ErrorAction SilentlyContinue
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+$FiltersTable = "Filters"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGVirtualMachine','AzureAdvisor','AzureConsumption','ARGResourceContainers','Pricesheet')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$vmsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGVirtualMachine' }).LogAnalyticsSuffix + "_CL"
+$advisorTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureAdvisor' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+$pricesheetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'Pricesheet' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $vmsTableName, $subscriptionsTableName, $advisorTableName, $pricesheetTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+Write-Output "Getting excluded recommendation sub-type IDs..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$FiltersTable] WHERE FilterType = 'Exclude' AND IsEnabled = 1 AND (FilterEndDate IS NULL OR FilterEndDate > GETDATE())"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $filters = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($filters) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+
+Write-Output "Getting Virtual Machine SKUs for the $referenceRegion region..."
+# Get all the VM SKUs information for the reference Azure region
+$skus = Get-AzComputeResourceSku -Location $referenceRegion | Where-Object { $_.ResourceType -eq "virtualMachines" }
+
+Write-Output "Getting the current Pricesheet..."
+
+if ($cloudEnvironment -eq "AzureCloud")
+{
+ $pricesheetRegion = "EU West"
+}
+
+try
+{
+ $pricesheetEntries = @()
+
+ $baseQuery = @"
+ $pricesheetTableName
+ | where TimeGenerated > ago(14d)
+ | where MeterCategory_s == 'Virtual Machines' and MeterRegion_s == '$pricesheetRegion' and PriceType_s == 'Consumption'
+ | distinct MeterName_s, MeterSubCategory_s, MeterCategory_s, MeterRegion_s, UnitPrice_s, UnitOfMeasure_s
+"@
+
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days 14) -Wait 600 -IncludeStatistics
+ $pricesheetEntries = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+
+ Write-Output "Query finished with $($pricesheetEntries.Count) results."
+ Write-Output "Query statistics: $($queryResults.Statistics.query)"
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ Write-Output "Consumption pricesheet not available, will estimate savings based in cores count..."
+}
+
+$linuxMemoryPerfAdditionalWorkspaces = ""
+$windowsMemoryPerfAdditionalWorkspaces = ""
+$processorPerfAdditionalWorkspaces = ""
+$windowsNetworkPerfAdditionalWorkspaces = ""
+$diskPerfAdditionalWorkspaces = ""
+if ($additionalPerfWorkspaces)
+{
+ $additionalWorkspaces = $additionalPerfWorkspaces.Split(",")
+ foreach ($additionalWorkspace in $additionalWorkspaces) {
+ $additionalWorkspace = $additionalWorkspace.Trim()
+ $linuxMemoryPerfAdditionalWorkspaces += @"
+ | union ( workspace('$additionalWorkspace').Perf
+ | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+ | where CounterName == '% Used Memory'
+ | extend WorkspaceId = TenantId
+ | summarize hint.strategy=shuffle PMemoryPercentage = percentile(CounterValue, memoryPercentileValue) by _ResourceId, WorkspaceId)
+"@
+ $windowsMemoryPerfAdditionalWorkspaces += @"
+ | union ( workspace('$additionalWorkspace').Perf
+ | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+ | where CounterName == 'Available MBytes'
+ | extend WorkspaceId = TenantId
+ | project TimeGenerated, MemoryAvailableMBs = CounterValue, _ResourceId, WorkspaceId)
+"@
+ $processorPerfAdditionalWorkspaces += @"
+ | union ( workspace('$additionalWorkspace').Perf
+ | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+ | where ObjectName == 'Processor' and CounterName == '% Processor Time' and InstanceName == '_Total'
+ | extend WorkspaceId = TenantId
+ | summarize hint.strategy=shuffle PCPUPercentage = percentile(CounterValue, cpuPercentileValue) by _ResourceId, WorkspaceId)
+"@
+ $windowsNetworkPerfAdditionalWorkspaces += @"
+ | union ( workspace('$additionalWorkspace').Perf
+ | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+ | where CounterName == 'Bytes Total/sec'
+ | extend WorkspaceId = TenantId
+ | summarize hint.strategy=shuffle PCounter = percentile(CounterValue, networkPercentileValue) by InstanceName, _ResourceId, WorkspaceId
+ | summarize PNetwork = sum(PCounter) by _ResourceId, WorkspaceId)
+"@
+ $diskPerfAdditionalWorkspaces += @"
+ | union ( workspace('$additionalWorkspace').Perf
+ | where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+ | where CounterName in ('Disk Reads/sec', 'Disk Writes/sec', 'Disk Read Bytes/sec', 'Disk Write Bytes/sec') and InstanceName !in ('_Total', 'D:', '/mnt/resource', '/mnt')
+ | extend WorkspaceId = TenantId
+ | summarize hint.strategy=shuffle PCounter = percentile(CounterValue, diskPercentileValue) by bin(TimeGenerated, perfTimeGrain), CounterName, InstanceName, _ResourceId, WorkspaceId
+ | summarize SumPCounter = sum(PCounter) by CounterName, TimeGenerated, _ResourceId, WorkspaceId
+ | summarize MaxPReadIOPS = maxif(SumPCounter, CounterName == 'Disk Reads/sec'),
+ MaxPWriteIOPS = maxif(SumPCounter, CounterName == 'Disk Writes/sec'),
+ MaxPReadMiBps = (maxif(SumPCounter, CounterName == 'Disk Read Bytes/sec') / 1024 / 1024),
+ MaxPWriteMiBps = (maxif(SumPCounter, CounterName == 'Disk Write Bytes/sec') / 1024 / 1024) by _ResourceId, WorkspaceId)
+"@
+ }
+}
+
+# Execute the recommendation query against Log Analytics
+
+$baseQuery = @"
+let advisorInterval = $($daysBackwards)d;
+let perfInterval = $($perfDaysBackwards)d;
+let perfTimeGrain = $perfTimeGrain;
+let cpuPercentileValue = $cpuPercentile;
+let memoryPercentileValue = $memoryPercentile;
+let networkPercentileValue = $networkPercentile;
+let diskPercentileValue = $diskPercentile;
+let rightSizeRecommendationId = '$rightSizeRecommendationId';
+let billingInterval = 30d;
+let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(30d) | summarize max(todatetime(Date_s))));
+let stime = etime-billingInterval;
+let RightSizeInstanceIds = materialize($advisorTableName
+| where todatetime(TimeGenerated) > ago(advisorInterval) and Category == 'Cost' and RecommendationTypeId_g == rightSizeRecommendationId
+| distinct InstanceId_s);
+let LinuxMemoryPerf = Perf
+| where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+| where CounterName == '% Used Memory'
+| extend WorkspaceId = TenantId
+| summarize hint.strategy=shuffle PMemoryPercentage = percentile(CounterValue, memoryPercentileValue) by _ResourceId, WorkspaceId$linuxMemoryPerfAdditionalWorkspaces;
+let WindowsMemoryPerf = Perf
+| where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+| where CounterName == 'Available MBytes'
+| extend WorkspaceId = TenantId
+| project TimeGenerated, MemoryAvailableMBs = CounterValue, _ResourceId, WorkspaceId$windowsMemoryPerfAdditionalWorkspaces;
+let MemoryPerf = $vmsTableName
+| where TimeGenerated > ago(1d)
+| distinct InstanceId_s, MemoryMB_s
+| join kind=inner hint.strategy=broadcast (
+ WindowsMemoryPerf
+) on `$left.InstanceId_s == `$right._ResourceId
+| extend MemoryPercentage = todouble(toint(MemoryMB_s) - toint(MemoryAvailableMBs)) / todouble(MemoryMB_s) * 100
+| summarize hint.strategy=shuffle PMemoryPercentage = percentile(MemoryPercentage, memoryPercentileValue) by _ResourceId, WorkspaceId
+| union LinuxMemoryPerf;
+let ProcessorPerf = Perf
+| where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+| where ObjectName == 'Processor' and CounterName == '% Processor Time' and InstanceName == '_Total'
+| extend WorkspaceId = TenantId
+| summarize hint.strategy=shuffle PCPUPercentage = percentile(CounterValue, cpuPercentileValue) by _ResourceId, WorkspaceId$processorPerfAdditionalWorkspaces;
+let WindowsNetworkPerf = Perf
+| where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+| where CounterName == 'Bytes Total/sec'
+| extend WorkspaceId = TenantId
+| summarize hint.strategy=shuffle PCounter = percentile(CounterValue, networkPercentileValue) by InstanceName, _ResourceId, WorkspaceId
+| summarize PNetwork = sum(PCounter) by _ResourceId, WorkspaceId$windowsNetworkPerfAdditionalWorkspaces;
+let DiskPerf = Perf
+| where TimeGenerated > ago(perfInterval) and _ResourceId in (RightSizeInstanceIds)
+| where CounterName in ('Disk Reads/sec', 'Disk Writes/sec', 'Disk Read Bytes/sec', 'Disk Write Bytes/sec') and InstanceName !in ('_Total', 'D:', '/mnt/resource', '/mnt')
+| extend WorkspaceId = TenantId
+| summarize hint.strategy=shuffle PCounter = percentile(CounterValue, diskPercentileValue) by bin(TimeGenerated, perfTimeGrain), CounterName, InstanceName, _ResourceId, WorkspaceId
+| summarize SumPCounter = sum(PCounter) by CounterName, TimeGenerated, _ResourceId, WorkspaceId
+| summarize MaxPReadIOPS = maxif(SumPCounter, CounterName == 'Disk Reads/sec'),
+ MaxPWriteIOPS = maxif(SumPCounter, CounterName == 'Disk Writes/sec'),
+ MaxPReadMiBps = (maxif(SumPCounter, CounterName == 'Disk Read Bytes/sec') / 1024 / 1024),
+ MaxPWriteMiBps = (maxif(SumPCounter, CounterName == 'Disk Write Bytes/sec') / 1024 / 1024) by _ResourceId, WorkspaceId$diskPerfAdditionalWorkspaces;
+$advisorTableName
+| where todatetime(TimeGenerated) > ago(advisorInterval) and Category == 'Cost'
+| extend AdvisorRecIdIndex = indexof(InstanceId_s, '/providers/microsoft.advisor/recommendations')
+| extend InstanceName_s = iif(isnotempty(InstanceName_s),InstanceName_s,iif(AdvisorRecIdIndex > 0, split(substring(InstanceId_s, 0, AdvisorRecIdIndex),'/')[-1], split(InstanceId_s,'/')[-1]))
+| distinct InstanceId_s, InstanceName_s, Description_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroup, Cloud_s, AdditionalInfo_s, RecommendationText_s, ImpactedArea_s, Impact_s, RecommendationTypeId_g, Tags_s
+| join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | extend VMConsumedQuantity = iif(ResourceId contains 'virtualmachines' and MeterCategory_s == 'Virtual Machines', todouble(Quantity_s), 0.0)
+ | extend VMPrice = iif(ResourceId contains 'virtualmachines' and MeterCategory_s == 'Virtual Machines', todouble(EffectivePrice_s), 0.0)
+ | extend FinalCost = iif(ResourceId contains 'virtualmachines', VMPrice * VMConsumedQuantity, todouble(CostInBillingCurrency_s))
+ | extend InstanceId_s = tolower(ResourceId)
+ | summarize Last30DaysCost = sum(FinalCost), Last30DaysQuantity = sum(VMConsumedQuantity) by InstanceId_s
+) on InstanceId_s
+| join kind=leftouter (
+ $vmsTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, NicCount_s, DataDiskCount_s
+) on InstanceId_s
+| where RecommendationTypeId_g != rightSizeRecommendationId or (RecommendationTypeId_g == rightSizeRecommendationId and toint(NicCount_s) >= 0 and toint(DataDiskCount_s) >= 0)
+| join kind=leftouter hint.strategy=broadcast ( MemoryPerf ) on `$left.InstanceId_s == `$right._ResourceId
+| join kind=leftouter hint.strategy=broadcast ( ProcessorPerf ) on `$left.InstanceId_s == `$right._ResourceId
+| join kind=leftouter hint.strategy=broadcast ( WindowsNetworkPerf ) on `$left.InstanceId_s == `$right._ResourceId
+| join kind=leftouter hint.strategy=broadcast ( DiskPerf ) on `$left.InstanceId_s == `$right._ResourceId
+| extend MaxPIOPS = MaxPReadIOPS + MaxPWriteIOPS, MaxPMiBps = MaxPReadMiBps + MaxPWriteMiBps
+| extend PNetworkMbps = PNetwork * 8 / 1000 / 1000
+| distinct Last30DaysCost, Last30DaysQuantity, InstanceId_s, InstanceName_s, Description_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroup, Cloud_s, AdditionalInfo_s, RecommendationText_s, ImpactedArea_s, Impact_s, RecommendationTypeId_g, NicCount_s, DataDiskCount_s, PMemoryPercentage, PCPUPercentage, PNetworkMbps, MaxPIOPS, MaxPMiBps, Tags_s, WorkspaceId
+| join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+) on SubscriptionGuid_g
+"@
+
+Write-Output "Will run the following query (use this query against the LA workspace for troubleshooting): $baseQuery"
+
+Write-Output "Getting cost recommendations for $($daysBackwards)d Advisor and $($perfDaysBackwards)d Perf history and a $perfTimeGrain time grain..."
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ throw "Execution aborted"
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+$skuPricesFound = @{}
+
+Write-Output "Generating fit score..."
+
+foreach ($result in $results) {
+
+ if ($filters | Where-Object { $_.RecommendationSubTypeId -eq $result.RecommendationTypeId_g})
+ {
+ continue
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $additionalInfoDictionary = @{}
+ if (-not([string]::IsNullOrEmpty($result.AdditionalInfo_s)))
+ {
+ ($result.AdditionalInfo_s | ConvertFrom-Json).PsObject.Properties | ForEach-Object { $additionalInfoDictionary[$_.Name] = $_.Value }
+ }
+
+ # Fixing reservation model inconsistencies
+ if (-not([string]::IsNullOrEmpty($additionalInfoDictionary["location"])))
+ {
+ $additionalInfoDictionary["region"] = $additionalInfoDictionary["location"]
+ }
+ if (-not([string]::IsNullOrEmpty($additionalInfoDictionary["targetResourceCount"])))
+ {
+ $additionalInfoDictionary["qty"] = $additionalInfoDictionary["targetResourceCount"]
+ }
+ if (-not([string]::IsNullOrEmpty($additionalInfoDictionary["vmSize"])))
+ {
+ $additionalInfoDictionary["displaySKU"] = $additionalInfoDictionary["vmSize"]
+ }
+
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+
+ $fitScore = 5
+ $hasCpuRamPerfMetrics = $false
+
+ if ($additionalInfoDictionary.targetSku -and $result.RecommendationTypeId_g -eq $rightSizeRecommendationId) {
+ $additionalInfoDictionary["SupportsDataDisksCount"] = "true"
+ $additionalInfoDictionary["DataDiskCount"] = "$($result.DataDiskCount_s)"
+ $additionalInfoDictionary["SupportsNICCount"] = "true"
+ $additionalInfoDictionary["NicCount"] = "$($result.NicCount_s)"
+ $additionalInfoDictionary["SupportsIOPS"] = "true"
+ $additionalInfoDictionary["MetricIOPS"] = "$($result.MaxPIOPS)"
+ $additionalInfoDictionary["SupportsMiBps"] = "true"
+ $additionalInfoDictionary["MetricMiBps"] = "$($result.MaxPMiBps)"
+ $additionalInfoDictionary["BelowCPUThreshold"] = "true"
+ $additionalInfoDictionary["MetricCPUPercentage"] = "$($result.PCPUPercentage)"
+ $additionalInfoDictionary["BelowMemoryThreshold"] = "true"
+ $additionalInfoDictionary["MetricMemoryPercentage"] = "$($result.PMemoryPercentage)"
+ $additionalInfoDictionary["BelowNetworkThreshold"] = "true"
+ $additionalInfoDictionary["MetricNetworkMbps"] = "$($result.PNetworkMbps)"
+
+ $targetSku = $null
+ if ($additionalInfoDictionary.targetSku -ne "Shutdown") {
+ $currentSku = $skus | Where-Object { $_.Name -eq $additionalInfoDictionary.currentSku }
+ $currentSkuvCPUs = [int]($currentSku.Capabilities | Where-Object { $_.Name -eq 'vCPUsAvailable' }).Value
+ $targetSku = $skus | Where-Object { $_.Name -eq $additionalInfoDictionary.targetSku }
+ $targetSkuvCPUs = [int]($targetSku.Capabilities | Where-Object { $_.Name -eq 'vCPUsAvailable' }).Value
+ $targetMaxDataDiskCount = [int]($targetSku.Capabilities | Where-Object { $_.Name -eq 'MaxDataDiskCount' }).Value
+ if ($targetMaxDataDiskCount -gt 0) {
+ if (-not([string]::isNullOrEmpty($result.DataDiskCount_s))) {
+ if ([int]$result.DataDiskCount_s -gt $targetMaxDataDiskCount) {
+ $fitScore = 1
+ $additionalInfoDictionary["SupportsDataDisksCount"] = "false:needs$($result.DataDiskCount_s)-max$targetMaxDataDiskCount"
+ }
+ }
+ else {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsDataDisksCount"] = "unknown:max$targetMaxDataDiskCount"
+ }
+ }
+ else {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsDataDisksCount"] = "unknown:needs$($result.DataDiskCount_s)"
+ }
+ $targetMaxNICCount = [int]($targetSku.Capabilities | Where-Object { $_.Name -eq 'MaxNetworkInterfaces' }).Value
+ if ($targetMaxNICCount -gt 0) {
+ if (-not([string]::isNullOrEmpty($result.NicCount_s))) {
+ if ([int]$result.NicCount_s -gt $targetMaxNICCount) {
+ $fitScore = 1
+ $additionalInfoDictionary["SupportsNICCount"] = "false:needs$($result.NicCount_s)-max$targetMaxNICCount"
+ }
+ }
+ else {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsNICCount"] = "unknown:max$targetMaxNICCount"
+ }
+ }
+ else {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsNICCount"] = "unknown:needs$($result.NicCount_s)"
+ }
+ $targetUncachedDiskIOPS = [int]($targetSku.Capabilities | Where-Object { $_.Name -eq 'UncachedDiskIOPS' }).Value
+ if ($targetUncachedDiskIOPS -gt 0) {
+ if (-not([string]::isNullOrEmpty($result.MaxPIOPS))) {
+ if ([double]$result.MaxPIOPS -ge [double]$targetUncachedDiskIOPS) {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsIOPS"] = "false:needs$($result.MaxPIOPS)-max$targetUncachedDiskIOPS"
+ }
+ }
+ else {
+ $fitScore -= 0.5
+ $additionalInfoDictionary["SupportsIOPS"] = "unknown:max$targetUncachedDiskIOPS"
+ }
+ }
+ else {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsIOPS"] = "unknown:needs$($result.MaxPIOPS)"
+ }
+ $targetUncachedDiskMiBps = [double]([int]($targetSku.Capabilities | Where-Object { $_.Name -eq 'UncachedDiskBytesPerSecond' }).Value) / 1024 / 1024
+ if ($targetUncachedDiskMiBps -gt 0) {
+ if (-not([string]::isNullOrEmpty($result.MaxPMiBps))) {
+ if ([double]$result.MaxPMiBps -ge $targetUncachedDiskMiBps) {
+ $fitScore -= 1
+ $additionalInfoDictionary["SupportsMiBps"] = "false:needs$($result.MaxPMiBps)-max$targetUncachedDiskMiBps"
+ }
+ }
+ else {
+ $fitScore -= 0.5
+ $additionalInfoDictionary["SupportsMiBps"] = "unknown:max$targetUncachedDiskMiBps"
+ }
+ }
+ else {
+ $additionalInfoDictionary["SupportsMiBps"] = "unknown:needs$($result.MaxPMiBps)"
+ }
+
+ $savingCoefficient = [double] $currentSkuvCPUs / $targetSkuvCPUs
+
+ if ($savingCoefficient -gt 1)
+ {
+ $targetSkuSavingsMonthly = [double]$result.Last30DaysCost - ([double]$result.Last30DaysCost / $savingCoefficient)
+ }
+ else
+ {
+ $targetSkuSavingsMonthly = [double]$result.Last30DaysCost / 2
+ }
+
+ if ($targetSku -and $null -eq $skuPricesFound[$targetSku.Name])
+ {
+ $skuPricesFound[$targetSku.Name] = Find-SkuHourlyPrice -SKUName $targetSku.Name -SKUPriceSheet $pricesheetEntries
+ }
+
+ $tentativeTargetSkuSavingsMonthly = -1
+
+ if ($targetSku -and $skuPricesFound[$targetSku.Name] -gt 0 -and $skuPricesFound[$targetSku.Name] -lt [double]::MaxValue)
+ {
+ $targetSkuPrice = $skuPricesFound[$targetSku.Name]
+
+ if ($null -eq $skuPricesFound[$currentSku.Name])
+ {
+ $skuPricesFound[$currentSku.Name] = Find-SkuHourlyPrice -SKUName $currentSku.Name -SKUPriceSheet $pricesheetEntries
+ }
+
+ if ($skuPricesFound[$currentSku.Name] -gt 0)
+ {
+ $currentSkuPrice = $skuPricesFound[$currentSku.Name]
+ $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity)
+ }
+ else
+ {
+ $tentativeTargetSkuSavingsMonthly = [double]$result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity)
+ }
+ }
+
+ if ($tentativeTargetSkuSavingsMonthly -ge 0)
+ {
+ $targetSkuSavingsMonthly = $tentativeTargetSkuSavingsMonthly
+ }
+
+ if ($targetSkuSavingsMonthly -eq [double]::PositiveInfinity)
+ {
+ $targetSkuSavingsMonthly = [double] $result.Last30DaysCost / 2
+ }
+
+ $savingsMonthly = $targetSkuSavingsMonthly
+
+ }
+ else
+ {
+ $savingsMonthly = [double]$result.Last30DaysCost
+ }
+
+ $cpuThreshold = $cpuPercentageThreshold
+ $memoryThreshold = $memoryPercentageThreshold
+ $networkThreshold = $networkMpbsThreshold
+ if ($additionalInfoDictionary.targetSku -eq "Shutdown") {
+ $cpuThreshold = $cpuPercentageShutdownThreshold
+ $memoryThreshold = $memoryPercentageShutdownThreshold
+ $networkThreshold = $networkMpbsShutdownThreshold
+ }
+
+ if (-not([string]::isNullOrEmpty($result.PCPUPercentage))) {
+ if ([double]$result.PCPUPercentage -ge [double]$cpuThreshold) {
+ $fitScore -= 0.5
+ $additionalInfoDictionary["BelowCPUThreshold"] = "false:needs$($result.PCPUPercentage)-max$cpuThreshold"
+ }
+ $hasCpuRamPerfMetrics = $true
+ }
+ else {
+ $fitScore -= 0.5
+ $additionalInfoDictionary["BelowCPUThreshold"] = "unknown:max$cpuThreshold"
+ }
+ if (-not([string]::isNullOrEmpty($result.PMemoryPercentage))) {
+ if ([double]$result.PMemoryPercentage -ge [double]$memoryThreshold) {
+ $fitScore -= 0.5
+ $additionalInfoDictionary["BelowMemoryThreshold"] = "false:needs$($result.PMemoryPercentage)-max$memoryThreshold"
+ }
+ $hasCpuRamPerfMetrics = $true
+ }
+ else {
+ $fitScore -= 0.5
+ $additionalInfoDictionary["BelowMemoryThreshold"] = "unknown:max$memoryThreshold"
+ }
+ if (-not([string]::isNullOrEmpty($result.PNetworkMbps))) {
+ if ([double]$result.PNetworkMbps -ge [double]$networkThreshold) {
+ $fitScore -= 0.1
+ $additionalInfoDictionary["BelowNetworkThreshold"] = "false:needs$($result.PNetworkMbps)-max$networkThreshold"
+ }
+ }
+ else {
+ $fitScore -= 0.1
+ $additionalInfoDictionary["BelowNetworkThreshold"] = "unknown:max$networkThreshold"
+ }
+
+ $fitScore = [Math]::max(0.0, $fitScore)
+ }
+ else
+ {
+ if (-not([string]::IsNullOrEmpty($additionalInfoDictionary["annualSavingsAmount"])))
+ {
+ $savingsMonthly = [double] $additionalInfoDictionary["annualSavingsAmount"] / 12
+ }
+ else
+ {
+ if ($result.RecommendationTypeId_g -eq $rightSizeRecommendationId)
+ {
+ $savingsMonthly = [double] $result.Last30DaysCost
+ }
+ else
+ {
+ $savingsMonthly = 0.0 # unknown
+ }
+ }
+ }
+
+ $additionalInfoDictionary["savingsAmount"] = [double] $savingsMonthly
+
+ $queryInstanceId = $result.InstanceId_s
+ if (-not($hasCpuRamPerfMetrics))
+ {
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+ }
+ else
+ {
+ $queryWorkspace = ""
+ if (-not([string]::IsNullOrEmpty($result.WorkspaceId)) -and $result.WorkspaceId -ne $workspaceId)
+ {
+ $queryWorkspace = "workspace('$($result.WorkspaceId)')."
+ }
+
+ $queryText = @"
+ let perfInterval = $($perfDaysBackwards)d;
+ let armId = tolower(`'$queryInstanceId`');
+ let gInt = $perfTimeGrain;
+ let LinuxMemoryPerf = $($queryWorkspace)Perf
+ | where TimeGenerated > ago(perfInterval)
+ | where CounterName == '% Used Memory' and _ResourceId =~ armId
+ | project TimeGenerated, MemoryPercentage = CounterValue;
+ let WindowsMemoryPerf = $($queryWorkspace)Perf
+ | where TimeGenerated > ago(perfInterval)
+ | where CounterName == 'Available MBytes' and _ResourceId =~ armId
+ | extend MemoryAvailableMBs = CounterValue, InstanceId = tolower(_ResourceId)
+ | project TimeGenerated, MemoryAvailableMBs, InstanceId;
+ let MemoryPerf = WindowsMemoryPerf
+ | join kind=inner (
+ $vmsTableName
+ | where TimeGenerated > ago(1d)
+ | extend InstanceId = tolower(InstanceId_s)
+ | distinct InstanceId, MemoryMB_s
+ ) on InstanceId
+ | extend MemoryPercentage = todouble(toint(MemoryMB_s) - toint(MemoryAvailableMBs)) / todouble(MemoryMB_s) * 100
+ | project TimeGenerated, MemoryPercentage
+ | union LinuxMemoryPerf
+ | summarize P$($memoryPercentile)MemoryPercentage = percentile(MemoryPercentage, $memoryPercentile) by bin(TimeGenerated, gInt);
+ let ProcessorPerf = $($queryWorkspace)Perf
+ | where TimeGenerated > ago(perfInterval)
+ | where CounterName == '% Processor Time' and InstanceName == '_Total' and _ResourceId =~ armId
+ | summarize P$($cpuPercentile)CPUPercentage = percentile(CounterValue, $cpuPercentile) by bin(TimeGenerated, gInt);
+ MemoryPerf
+ | join kind=inner (ProcessorPerf) on TimeGenerated
+ | render timechart
+"@
+
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = $result.ImpactedArea_s
+ Impact = $result.Impact_s
+ RecommendationType = "Saving"
+ RecommendationSubType = "AdvisorCost"
+ RecommendationSubTypeId = $result.RecommendationTypeId_g
+ RecommendationDescription = $result.Description_s
+ RecommendationAction = $result.RecommendationText_s
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+Write-Output "Exporting final $($recommendations.Count) results as a JSON file..."
+
+$fileDate = $datetime.ToString("yyyyMMdd")
+$jsonExportPath = "advisor-cost-augmented-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+Write-Output "Uploading $jsonExportPath to blob storage..."
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json" };
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..2fb7f26b7
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-AppServiceOptimizationsToBlobStorage.ps1
@@ -0,0 +1,695 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$perfDaysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendPerfPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($perfDaysBackwards -gt 0)) {
+ $perfDaysBackwards = 7
+}
+
+$perfTimeGrain = Get-AutomationVariable -Name "AzureOptimization_RecommendPerfTimeGrain" -ErrorAction SilentlyContinue
+if (-not($perfTimeGrain)) {
+ $perfTimeGrain = "1h"
+}
+
+# percentiles variables
+$cpuPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileCpu" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentile -gt 0)) {
+ $cpuPercentile = 99
+}
+$memoryPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileMemory" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentile -gt 0)) {
+ $memoryPercentile = 99
+}
+
+# perf thresholds variables
+$cpuPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentageThreshold -gt 0)) {
+ $cpuPercentageThreshold = 30
+}
+$memoryPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdMemoryPercentage" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentageThreshold -gt 0)) {
+ $memoryPercentageThreshold = 50
+}
+$cpuDegradedMaxPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuDegradedMaxPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuDegradedMaxPercentageThreshold -gt 0)) {
+ $cpuDegradedMaxPercentageThreshold = 95
+}
+$cpuDegradedAvgPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuDegradedAvgPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuDegradedAvgPercentageThreshold -gt 0)) {
+ $cpuDegradedAvgPercentageThreshold = 75
+}
+$memoryDegradedPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdMemoryDegradedPercentage" -ErrorAction SilentlyContinue)
+if (-not($memoryDegradedPercentageThreshold -gt 0)) {
+ $memoryDegradedPercentageThreshold = 90
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('AppServicePlans','MonitorMetrics','AzureConsumption','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$appServicePlansTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AppServicePlans' }).LogAnalyticsSuffix + "_CL"
+$metricsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'MonitorMetrics' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $appServicePlansTableName, $subscriptionsTableName, $metricsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+# Execute the recommendation query against Log Analytics
+Write-Output "Looking for underused App Service Plans, with less than $cpuPercentageThreshold% CPU and $memoryPercentageThreshold% RAM usage..."
+
+$baseQuery = @"
+ let billingInterval = 30d;
+ let perfInterval = $($perfDaysBackwards)d;
+ let cpuPercentileValue = $cpuPercentile;
+ let memoryPercentileValue = $memoryPercentile;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(30d) | summarize max(todatetime(Date_s))));
+ let stime = etime-billingInterval;
+
+ let BilledPlans = $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime) and ResourceId has 'microsoft.web/serverfarms'
+ | extend ConsumedQuantity = todouble(Quantity_s)
+ | extend FinalCost = todouble(EffectivePrice_s) * ConsumedQuantity
+ | extend InstanceId_s = tolower(ResourceId)
+ | summarize Last30DaysCost = sum(FinalCost), Last30DaysQuantity = sum(ConsumedQuantity) by InstanceId_s;
+
+ let ProcessorPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where ResourceId has 'microsoft.web/serverfarms'
+ | where MetricNames_s == "CpuPercentage" and AggregationType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PCPUPercentage = percentile(todouble(MetricValue_s), cpuPercentileValue) by InstanceId_s;
+
+ let MemoryPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where ResourceId has 'microsoft.web/serverfarms'
+ | where MetricNames_s == "MemoryPercentage" and AggregationType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PMemoryPercentage = percentile(todouble(MetricValue_s), memoryPercentileValue) by InstanceId_s;
+
+ $appServicePlansTableName
+ | where TimeGenerated > ago(1d) and ComputeMode_s == 'Dedicated' and SkuTier_s != 'Free'
+ | distinct InstanceId_s, AppServicePlanName_s, ResourceGroupName_s, SubscriptionGuid_g, Cloud_s, TenantGuid_g, SkuSize_s, NumberOfWorkers_s, Tags_s
+ | join kind=inner ( BilledPlans ) on InstanceId_s
+ | join kind=leftouter ( MemoryPerf ) on InstanceId_s
+ | join kind=leftouter ( ProcessorPerf ) on InstanceId_s
+ | project InstanceId_s, AppServicePlan = AppServicePlanName_s, ResourceGroup = ResourceGroupName_s, SubscriptionId = SubscriptionGuid_g, Cloud_s, TenantGuid_g, SkuSize_s, NumberOfWorkers_s, PMemoryPercentage, PCPUPercentage, Tags_s, Last30DaysCost, Last30DaysQuantity
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionId
+ | where isnotempty(PMemoryPercentage) and isnotempty(PCPUPercentage) and PMemoryPercentage < $memoryPercentageThreshold and PCPUPercentage < $cpuPercentageThreshold
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+let perfInterval = $($perfDaysBackwards)d;
+let armId = `'$queryInstanceId`';
+let gInt = $perfTimeGrain;
+let MemoryPerf = $metricsTableName
+| where TimeGenerated > ago(perfInterval)
+| extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+| where ResourceId == armId
+| where MetricNames_s == 'MemoryPercentage' and AggregationType_s == 'Maximum'
+| extend MemoryPercentage = todouble(MetricValue_s)
+| summarize percentile(MemoryPercentage, $memoryPercentile) by bin(CollectedDate, gInt);
+let ProcessorPerf = $metricsTableName
+| where TimeGenerated > ago(perfInterval)
+| extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+| where ResourceId == armId
+| where MetricNames_s == 'CpuPercentage' and AggregationType_s == 'Maximum'
+| extend ProcessorPercentage = todouble(MetricValue_s)
+| summarize percentile(ProcessorPercentage, $cpuPercentile) by bin(CollectedDate, gInt);
+MemoryPerf
+| join kind=inner (ProcessorPerf) on CollectedDate
+| render timechart
+"@
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = "$($result.SkuSize_s)"
+ $additionalInfoDictionary["InstanceCount"] = [int] $result.NumberOfWorkers_s
+ $additionalInfoDictionary["MetricCPUPercentage"] = "$($result.PCPUPercentage)"
+ $additionalInfoDictionary["MetricMemoryPercentage"] = "$($result.PMemoryPercentage)"
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = ([double] $result.Last30DaysCost / 2)
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Web/serverFarms"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnderusedAppServicePlans"
+ RecommendationSubTypeId = "042adaca-ebdf-49b4-bc1b-2800b6e40fea"
+ RecommendationDescription = "Underused App Service Plans (performance capacity waste)"
+ RecommendationAction = "Right-size underused App Service Plans or scale it in"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.AppServicePlan
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionId
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "appserviceplans-underused-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for performance constrained App Service Plans, with more than $cpuDegradedMaxPercentageThreshold% Max. CPU, $cpuDegradedAvgPercentageThreshold% Avg. CPU and $memoryDegradedPercentageThreshold% RAM usage..."
+
+$baseQuery = @"
+ let perfInterval = $($perfDaysBackwards)d;
+
+ let MemoryPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where ResourceId has 'microsoft.web/serverfarms'
+ | where MetricNames_s == "MemoryPercentage" and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PMemoryPercentage = avg(todouble(MetricValue_s)) by InstanceId_s;
+
+ let ProcessorMaxPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where ResourceId has 'microsoft.web/serverfarms'
+ | where MetricNames_s == "CpuPercentage" and AggregationType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PCPUMaxPercentage = avg(todouble(MetricValue_s)) by InstanceId_s;
+
+ let ProcessorAvgPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where ResourceId has 'microsoft.web/serverfarms'
+ | where MetricNames_s == "CpuPercentage" and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PCPUAvgPercentage = avg(todouble(MetricValue_s)) by InstanceId_s;
+
+ $appServicePlansTableName
+ | where TimeGenerated > ago(1d) and ComputeMode_s == 'Dedicated' and SkuTier_s != 'Free'
+ | distinct InstanceId_s, AppServicePlanName_s, ResourceGroupName_s, SubscriptionGuid_g, Cloud_s, TenantGuid_g, SkuSize_s, NumberOfWorkers_s, Tags_s
+ | join kind=leftouter ( MemoryPerf ) on InstanceId_s
+ | join kind=leftouter ( ProcessorMaxPerf ) on InstanceId_s
+ | join kind=leftouter ( ProcessorAvgPerf ) on InstanceId_s
+ | project InstanceId_s, AppServicePlan = AppServicePlanName_s, ResourceGroup = ResourceGroupName_s, SubscriptionId = SubscriptionGuid_g, Cloud_s, TenantGuid_g, SkuSize_s, NumberOfWorkers_s, PMemoryPercentage, PCPUMaxPercentage, PCPUAvgPercentage, Tags_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionId
+ | where isnotempty(PMemoryPercentage) and isnotempty(PCPUAvgPercentage) and isnotempty(PCPUMaxPercentage) and (PMemoryPercentage > $memoryDegradedPercentageThreshold or (PCPUMaxPercentage > $cpuDegradedMaxPercentageThreshold and PCPUAvgPercentage > $cpuDegradedAvgPercentageThreshold))
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+let perfInterval = $($perfDaysBackwards)d;
+let armId = `'$queryInstanceId`';
+let gInt = $perfTimeGrain;
+let MemoryPerf = $metricsTableName
+| where TimeGenerated > ago(perfInterval)
+| extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+| where ResourceId == armId
+| where MetricNames_s == 'MemoryPercentage' and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+| extend MemoryPercentage = todouble(MetricValue_s)
+| summarize percentile(MemoryPercentage, $memoryPercentile) by bin(CollectedDate, gInt);
+let ProcessorMaxPerf = $metricsTableName
+| where TimeGenerated > ago(perfInterval)
+| extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+| where ResourceId == armId
+| where MetricNames_s == 'CpuPercentage' and AggregationType_s == 'Maximum'
+| extend ProcessorMaxPercentage = todouble(MetricValue_s)
+| summarize percentile(ProcessorMaxPercentage, $cpuPercentile) by bin(CollectedDate, gInt);
+let ProcessorAvgPerf = $metricsTableName
+| where TimeGenerated > ago(perfInterval)
+| extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+| where ResourceId == armId
+| where MetricNames_s == 'CpuPercentage' and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+| extend ProcessorAvgPercentage = todouble(MetricValue_s)
+| summarize percentile(ProcessorAvgPercentage, $cpuPercentile) by bin(CollectedDate, gInt);
+MemoryPerf
+| join kind=inner (ProcessorMaxPerf) on CollectedDate
+| join kind=inner (ProcessorAvgPerf) on CollectedDate
+| render timechart
+"@
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = "$($result.SkuSize_s)"
+ $additionalInfoDictionary["InstanceCount"] = [int] $result.NumberOfWorkers_s
+ $additionalInfoDictionary["MetricCPUAvgPercentage"] = "$($result.PCPUAvgPercentage)"
+ $additionalInfoDictionary["MetricCPUMaxPercentage"] = "$($result.PCPUMaxPercentage)"
+ $additionalInfoDictionary["MetricMemoryPercentage"] = "$($result.PMemoryPercentage)"
+
+ $fitScore = 3 # needs a more complete analysis to improve score
+
+ if ([double] $result.PCPUMaxPercentage -gt [double] $cpuDegradedMaxPercentageThreshold -and [double] $result.PCPUAvgPercentage -gt [double] $cpuDegradedAvgPercentageThreshold)
+ {
+ $fitScore = 4
+ }
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Performance"
+ ImpactedArea = "Microsoft.Web/serverFarms"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "PerfConstrainedAppServicePlans"
+ RecommendationSubTypeId = "351574cb-c105-4538-a778-11dfbe4857bf"
+ RecommendationDescription = "App Service Plan performance has been constrained by lack of resources"
+ RecommendationAction = "Resize App Service Plan to higher SKU or scale it out"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.AppServicePlan
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionId
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "appserviceplans-perfconstrained-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for empty App Service Plans..."
+
+$baseQuery = @"
+let interval = 30d;
+let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(interval) | summarize max(todatetime(Date_s))));
+let stime = etime-interval;
+$appServicePlansTableName
+| where TimeGenerated > ago(1d) and ComputeMode_s == 'Dedicated' and SkuTier_s != 'Free' and toint(NumberOfSites_s) == 0
+| distinct AppServicePlanName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuSize_s, NumberOfWorkers_s, Tags_s, Cloud_s
+| join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+) on InstanceId_s
+| summarize Last30DaysCost=sum(todouble(CostInBillingCurrency_s)) by AppServicePlanName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuSize_s, NumberOfWorkers_s, Tags_s, Cloud_s
+| join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ $appServicePlansTableName
+ | where InstanceId_s == '$queryInstanceId'
+ | where toint(NumberOfSites_s) == 0
+ | distinct InstanceId_s, AppServicePlanName_s, TimeGenerated
+ | summarize FirstUnusedDate = min(TimeGenerated) by InstanceId_s, AppServicePlanName_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize CostsSinceUnused = sumif(todouble(CostInBillingCurrency_s), todatetime(Date_s) > FirstUnusedDate) by AppServicePlanName_s, FirstUnusedDate
+"@
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = $result.SkuSize_s
+ $additionalInfoDictionary["InstanceCount"] = $result.NumberOfWorkers_s
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Web/serverFarms"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "EmptyAppServicePlans"
+ RecommendationSubTypeId = "ef525225-8b91-47a3-81f3-e674e94564b6"
+ RecommendationDescription = "App Service Plans without any application incur in unnecessary costs"
+ RecommendationAction = "Delete the App Service Plan"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.AppServicePlanName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "appserviceplans-empty-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..a92155592
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-DiskOptimizationsToBlobStorage.ps1
@@ -0,0 +1,539 @@
+$ErrorActionPreference = "Stop"
+
+function Find-DiskMonthlyPrice {
+ param (
+ [object[]] $SKUPriceSheet,
+ [string] $DiskSizeTier
+ )
+
+ $diskSkus = $SKUPriceSheet | Where-Object { $_.MeterName_s.Replace(" Disks","").Replace(" Disk","") -eq $DiskSizeTier }
+ $targetMonthlyPrice = [double]::MaxValue
+ if ($diskSkus)
+ {
+ $targetMonthlyPrice = [double] ($diskSkus | Sort-Object -Property UnitPrice_s | Select-Object -First 1).UnitPrice_s
+ }
+ return $targetMonthlyPrice
+}
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+# perf thresholds variables
+$iopsPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdDiskIOPSPercentage" -ErrorAction SilentlyContinue)
+if (-not($iopsPercentageThreshold -gt 0)) {
+ $iopsPercentageThreshold = 5
+}
+$mbsPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdDiskMBsPercentage" -ErrorAction SilentlyContinue)
+if (-not($mbsPercentageThreshold -gt 0)) {
+ $mbsPercentageThreshold = 5
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$perfDaysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendPerfPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($perfDaysBackwards -gt 0)) {
+ $perfDaysBackwards = 7
+}
+
+$perfTimeGrain = Get-AutomationVariable -Name "AzureOptimization_RecommendPerfTimeGrain" -ErrorAction SilentlyContinue
+if (-not($perfTimeGrain)) {
+ $perfTimeGrain = "1h"
+}
+
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion"
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGManagedDisk','MonitorMetrics','ARGResourceContainers','AzureConsumption','Pricesheet')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$disksTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGManagedDisk' }).LogAnalyticsSuffix + "_CL"
+$metricsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'MonitorMetrics' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$pricesheetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'Pricesheet' }).LogAnalyticsSuffix + "_CL"
+
+
+Write-Output "Will run query against tables $disksTableName, $metricsTableName, $subscriptionsTableName, $pricesheetTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+Write-Output "Getting Disks SKUs for the $referenceRegion region..."
+
+$skus = Get-AzComputeResourceSku -Location $referenceRegion | Where-Object { $_.ResourceType -eq "disks" }
+
+Write-Output "Getting the current Pricesheet..."
+
+if ($cloudEnvironment -eq "AzureCloud")
+{
+ $pricesheetRegion = "EU West"
+}
+
+try
+{
+ $pricesheetEntries = @()
+
+ $baseQuery = @"
+ $pricesheetTableName
+ | where TimeGenerated > ago(14d)
+ | where MeterCategory_s == 'Storage' and MeterSubCategory_s contains "Managed Disk" and (MeterName_s endswith "Disk" or MeterName_s endswith "Disks") and MeterName_s !has 'Special' and MeterRegion_s == '$pricesheetRegion' and PriceType_s == 'Consumption'
+ | distinct MeterName_s, MeterSubCategory_s, MeterCategory_s, MeterRegion_s, UnitPrice_s, UnitOfMeasure_s
+"@
+
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days 14) -Wait 600 -IncludeStatistics
+ $pricesheetEntries = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+
+ Write-Output "Query finished with $($pricesheetEntries.Count) results."
+ Write-Output "Query statistics: $($queryResults.Statistics.query)"
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ Write-Output "Consumption pricesheet not available, will estimate savings based in price difference ratio..."
+}
+
+$skuPricesFound = @{}
+
+Write-Output "Looking for underutilized Disks, with less than $iopsPercentageThreshold% IOPS and $mbsPercentageThreshold% MB/s usage..."
+
+$baseQuery = @"
+ let billingInterval = 30d;
+ let perfInterval = $($perfDaysBackwards)d;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(billingInterval) | summarize max(todatetime(Date_s))));
+ let stime = etime-billingInterval;
+
+ let BilledDisks = $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime) and ResourceId contains '/disks/' and MeterCategory_s == 'Storage' and MeterSubCategory_s has 'Premium' and MeterName_s has 'Disk'
+ | extend DiskConsumedQuantity = todouble(Quantity_s)
+ | extend DiskPrice = todouble(EffectivePrice_s)
+ | extend FinalCost = DiskPrice * DiskConsumedQuantity
+ | extend ResourceId = tolower(ResourceId)
+ | summarize Last30DaysCost = sum(FinalCost), Last30DaysQuantity = sum(DiskConsumedQuantity) by ResourceId;
+
+ $metricsTableName
+ | where MetricNames_s == 'Composite Disk Read Operations/sec,Composite Disk Write Operations/sec' and TimeGenerated > ago(perfInterval) and isnotempty(MetricValue_s)
+ | summarize MaxIOPSMetric = max(todouble(MetricValue_s)) by ResourceId
+ | join kind=inner (
+ $disksTableName
+ | where TimeGenerated > ago(1d) and DiskState_s =~ 'Attached' and SKU_s startswith 'Premium'
+ | extend DiskTier_s = strcat(DiskTier_s, ' ', tostring(split(SKU_s, '_')[1]))
+ | project ResourceId=InstanceId_s, DiskName_s, ResourceGroup = ResourceGroupName_s, SubscriptionId = SubscriptionGuid_g, Cloud_s, TenantGuid_g, Tags_s, MaxIOPSDisk=toint(DiskIOPS_s), DiskSizeGB_s, SKU_s, DiskTier_s, DiskType_s
+ ) on ResourceId
+ | project-away ResourceId1
+ | extend IOPSPercentage = MaxIOPSMetric/MaxIOPSDisk*100
+ | where IOPSPercentage < $iopsPercentageThreshold
+ | join kind=inner (
+ $metricsTableName
+ | where MetricNames_s == 'Composite Disk Read Bytes/sec,Composite Disk Write Bytes/sec' and TimeGenerated > ago(perfInterval) and isnotempty(MetricValue_s)
+ | summarize MaxMBsMetric = max(todouble(MetricValue_s)/1024/1024) by ResourceId
+ | join kind=inner (
+ $disksTableName
+ | where TimeGenerated > ago(1d) and DiskState_s =~ 'Attached' and SKU_s startswith 'Premium'
+ | extend DiskTier_s = strcat(DiskTier_s, ' ', tostring(split(SKU_s, '_')[1]))
+ | project ResourceId=InstanceId_s, DiskName_s, ResourceGroup = ResourceGroupName_s, SubscriptionId = SubscriptionGuid_g, Cloud_s, TenantGuid_g, Tags_s, MaxMBsDisk=toint(DiskThroughput_s), DiskSizeGB_s, SKU_s, DiskTier_s, DiskType_s
+ ) on ResourceId
+ | project-away ResourceId1
+ | extend MBsPercentage = MaxMBsMetric/MaxMBsDisk*100
+ | where MBsPercentage < $mbsPercentageThreshold
+ ) on ResourceId
+ | join kind=inner ( BilledDisks ) on ResourceId
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionId
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ throw "Execution aborted"
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $targetSku = $null
+ $currentDiskTier = $null
+
+ if ([string]::IsNullOrEmpty($result.DiskTier_s) -or $result.DiskTier_s.Trim().Length -le 3) # older disks do not have Tier info in their properties
+ {
+ $currentSkuCandidates = @()
+ foreach ($sku in $skus)
+ {
+ $currentSkuCandidate = $null
+ $skuMinSizeGB = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MinSizeGiB' }).Value
+ $skuMaxSizeGB = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxSizeGiB' }).Value
+ $skuMaxIOps = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxIOps' }).Value
+ $skuMaxBandwidthMBps = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxBandwidthMBps' }).Value
+
+ if ($sku.Name -eq $result.SKU_s -and $skuMinSizeGB -lt [int]$result.DiskSizeGB_s -and $skuMaxSizeGB -ge [int]$result.DiskSizeGB_s `
+ -and [int]$skuMaxIOps -eq [int]$result.MaxIOPSDisk -and [int]$skuMaxBandwidthMBps -eq [int]$result.MaxMBsDisk)
+ {
+ $skuSize = $sku.Size + " " + $result.SKU_s.Split("_")[1]
+ if ($null -eq $skuPricesFound[$skuSize])
+ {
+ $skuPricesFound[$sku.Size] = Find-DiskMonthlyPrice -DiskSizeTier $skuSize -SKUPriceSheet $pricesheetEntries
+ }
+
+ $currentSkuCandidate = New-Object PSObject -Property @{
+ Name = $skuSize
+ MaxSizeGB = $skuMaxSizeGB
+ }
+
+ $currentSkuCandidates += $currentSkuCandidate
+ }
+ }
+ $currentDiskTier = ($currentSkuCandidates | Sort-Object -Property MaxSizeGB | Select-Object -First 1).Name
+ }
+ else
+ {
+ $currentDiskTier = $result.DiskTier_s
+ }
+
+ if ($null -eq $skuPricesFound[$currentDiskTier])
+ {
+ $skuPricesFound[$currentDiskTier] = Find-DiskMonthlyPrice -DiskSizeTier $currentDiskTier -SKUPriceSheet $pricesheetEntries
+ }
+
+ $targetSkuPerfTier = $result.SKU_s.Replace("Premium", "StandardSSD")
+ $targetSkuCandidates = @()
+
+ foreach ($sku in $skus)
+ {
+ $targetSkuCandidate = $null
+
+ $skuMinSizeGB = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MinSizeGiB' }).Value
+ $skuMaxSizeGB = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxSizeGiB' }).Value
+ $skuMaxIOps = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxIOps' }).Value
+ $skuMaxBandwidthMBps = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxBandwidthMBps' }).Value
+
+ if ($sku.Name -eq $targetSkuPerfTier -and $skuMinSizeGB -lt [int]$result.DiskSizeGB_s -and $skuMaxSizeGB -ge [int]$result.DiskSizeGB_s `
+ -and [double]$skuMaxIOps -ge [double]$result.MaxIOPSMetric -and [double]$skuMaxBandwidthMBps -ge [double]$result.MaxMBsMetric)
+ {
+ $skuSize = $sku.Size + " " + $targetSkuPerfTier.Split("_")[1]
+ if ($null -eq $skuPricesFound[$sku.Size])
+ {
+ $skuPricesFound[$skuSize] = Find-DiskMonthlyPrice -DiskSizeTier $skuSize -SKUPriceSheet $pricesheetEntries
+ }
+
+ if ($skuPricesFound[$skuSize] -lt [double]::MaxValue -and $skuPricesFound[$skuSize] -lt $skuPricesFound[$currentDiskTier])
+ {
+ $targetSkuCandidate = New-Object PSObject -Property @{
+ Name = $skuSize
+ MonthlyPrice = $skuPricesFound[$skuSize]
+ MaxSizeGB = $skuMaxSizeGB
+ MaxIOPS = $skuMaxIOps
+ MaxMBps = $skuMaxBandwidthMBps
+ }
+
+ $targetSkuCandidates += $targetSkuCandidate
+ }
+ }
+ }
+
+ $targetSku = $targetSkuCandidates | Sort-Object -Property MonthlyPrice | Select-Object -First 1
+
+ if ($null -ne $targetSku)
+ {
+ $queryInstanceId = $result.ResourceId
+ $queryText = @"
+ let billingInterval = 30d;
+ let armId = `'$queryInstanceId`';
+ let gInt = $perfTimeGrain;
+ let ThroughputMBsPerf = $metricsTableName
+ | where TimeGenerated > ago(billingInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Composite Disk Read Bytes/sec,Composite Disk Write Bytes/sec' and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+ | extend ThroughputMBs = todouble(MetricValue_s)/1024/1024
+ | project CollectedDate, ThroughputMBs, InstanceId_s=ResourceId
+ | join kind=inner (
+ $disksTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, DiskThroughput_s
+ ) on InstanceId_s
+ | extend MBsPercentage = ThroughputMBs / todouble(DiskThroughput_s) * 100
+ | summarize max(MBsPercentage) by bin(CollectedDate, gInt);
+ let IOPSPerf = $metricsTableName
+ | where TimeGenerated > ago(billingInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Composite Disk Read Operations/sec,Composite Disk Write Operations/sec' and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+ | extend IOPS = todouble(MetricValue_s)
+ | project CollectedDate, IOPS, InstanceId_s=ResourceId
+ | join kind=inner (
+ $disksTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, DiskIOPS_s
+ ) on InstanceId_s
+ | extend IOPSPercentage = IOPS / todouble(DiskIOPS_s) * 100
+ | summarize max(IOPSPercentage) by bin(CollectedDate, gInt);
+ ThroughputMBsPerf
+ | join kind=inner (IOPSPerf) on CollectedDate
+ | render timechart
+"@
+
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["DiskType"] = "Managed"
+ $additionalInfoDictionary["currentSku"] = $result.SKU_s
+ $additionalInfoDictionary["targetSku"] = $targetSkuPerfTier
+ $additionalInfoDictionary["DiskSizeGB"] = [int] $result.DiskSizeGB_s
+ $additionalInfoDictionary["currentTier"] = $currentDiskTier
+ $additionalInfoDictionary["targetTier"] = $targetSku.Name
+ $additionalInfoDictionary["MaxIOPSMetric"] = [double] $($result.MaxIOPSMetric)
+ $additionalInfoDictionary["MaxMBpsMetric"] = [double] $($result.MaxMBsMetric)
+ $additionalInfoDictionary["MetricIOPSPercentage"] = [double] $($result.IOPSPercentage)
+ $additionalInfoDictionary["MetricMBpsPercentage"] = [double] $($result.MBsPercentage)
+ $additionalInfoDictionary["targetMaxSizeGB"] = [int] $targetSku.MaxSizeGB
+ $additionalInfoDictionary["targetMaxIOPS"] = [int] $targetSku.MaxIOPS
+ $additionalInfoDictionary["targetMaxMBps"] =[int] $targetSku.MaxMBps
+
+ $fitScore = 4 # needs Maximum of Maximum for metrics to have higher fit score
+ if ([int] $result.DiskSizeGB_s -gt 512)
+ {
+ $fitScore = 3.5 #disk will not support credit-based bursting, therefore the recommendation risk increases a bit
+ }
+
+ $fitScore = [Math]::max(0.0, $fitScore)
+
+ $savingCoefficient = 2 # Standard SSD is generally close to half the price of Premium SSD
+
+ $targetSkuSavingsMonthly = $result.Last30DaysCost - ($result.Last30DaysCost / $savingCoefficient)
+
+ $tentativeTargetSkuSavingsMonthly = -1
+
+ if ($targetSku -and $skuPricesFound[$targetSku.Name] -lt [double]::MaxValue)
+ {
+ $targetSkuPrice = $skuPricesFound[$targetSku.Name]
+
+ if ($skuPricesFound[$currentDiskTier] -lt [double]::MaxValue)
+ {
+ $currentSkuPrice = $skuPricesFound[$currentDiskTier]
+ $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity)
+ }
+ else
+ {
+ $tentativeTargetSkuSavingsMonthly = $result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity)
+ }
+ }
+
+ if ($tentativeTargetSkuSavingsMonthly -ge 0)
+ {
+ $targetSkuSavingsMonthly = $tentativeTargetSkuSavingsMonthly
+ }
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ if ($targetSkuSavingsMonthly -eq [double]::PositiveInfinity)
+ {
+ $targetSkuSavingsMonthly = [double] $result.Last30DaysCost / 2
+ }
+
+ $additionalInfoDictionary["savingsAmount"] = [double] $targetSkuSavingsMonthly
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Compute/disks"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnderusedPremiumSSDDisks"
+ RecommendationSubTypeId = "4854b5dc-4124-4ade-879e-6a7bb65350ab"
+ RecommendationDescription = "Premium SSD disk has been underutilized"
+ RecommendationAction = "Change disk tier at least to the equivalent for Standard SSD"
+ InstanceId = $result.ResourceId
+ InstanceName = $result.DiskName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionId
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+ }
+}
+
+# Export the recommendations as JSON to blob storage
+
+Write-Output "Exporting final $($recommendations.Count) results as a JSON file..."
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "disks-underutilized-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..de6634e22
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-SqlDbOptimizationsToBlobStorage.ps1
@@ -0,0 +1,447 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$perfDaysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendPerfPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($perfDaysBackwards -gt 0)) {
+ $perfDaysBackwards = 7
+}
+
+$dtuPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileSqlDtu" -ErrorAction SilentlyContinue)
+if (-not($dtuPercentile -gt 0)) {
+ $dtuPercentile = 99
+}
+$dtuPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdDtuPercentage" -ErrorAction SilentlyContinue)
+if (-not($dtuPercentageThreshold -gt 0)) {
+ $dtuPercentageThreshold = 40
+}
+$dtuDegradedPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdDtuDegradedPercentage" -ErrorAction SilentlyContinue)
+if (-not($dtuDegradedPercentageThreshold -gt 0)) {
+ $dtuDegradedPercentageThreshold = 75
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGSqlDb','MonitorMetrics','AzureConsumption','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$sqlDbsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGSqlDb' }).LogAnalyticsSuffix + "_CL"
+$metricsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'MonitorMetrics' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $sqlDbsTableName, $subscriptionsTableName, $metricsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+# Execute the recommendation query against Log Analytics
+Write-Output "Looking for underused SQL Databases, with less than $dtuPercentageThreshold % Max. DTU usage..."
+
+$baseQuery = @"
+ let DTUPercentageThreshold = $dtuPercentageThreshold;
+ let MetricsInterval = $($perfDaysBackwards)d;
+ let BillingInterval = 30d;
+ let dtuPercentPercentile = $dtuPercentile;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(BillingInterval) | summarize max(todatetime(Date_s))));
+ let stime = etime-BillingInterval;
+ let CandidateDatabaseIds = $sqlDbsTableName
+ | where TimeGenerated > ago(1d) and SkuName_s in ('Standard','Premium')
+ | distinct InstanceId_s;
+ $metricsTableName
+ | where TimeGenerated > ago(MetricsInterval)
+ | where ResourceId in (CandidateDatabaseIds) and MetricNames_s == 'dtu_consumption_percent' and AggregationType_s == 'Maximum'
+ | summarize P99DTUPercentage = percentile(todouble(MetricValue_s), dtuPercentPercentile) by ResourceId
+ | where P99DTUPercentage < DTUPercentageThreshold
+ | join (
+ $sqlDbsTableName
+ | where TimeGenerated > ago(1d)
+ | project ResourceId = InstanceId_s, DBName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, SkuName_s, ServiceObjectiveName_s, Tags_s, Cloud_s
+ ) on ResourceId
+ | join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | project ResourceId=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on ResourceId
+ | summarize Last30DaysCost=sum(todouble(CostInBillingCurrency_s)) by DBName_s, ResourceId, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, SkuName_s, ServiceObjectiveName_s, Tags_s, Cloud_s, P99DTUPercentage
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.ResourceId
+ $queryText = @"
+ $metricsTableName
+ | where ResourceId == '$queryInstanceId'
+ | where MetricNames_s == 'dtu_consumption_percent' and AggregationType_s == 'Maximum'
+ | project TimeGenerated, DTUPercentage = toint(MetricValue_s)
+ | render timechart
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = "$($result.SkuName_s) $($result.ServiceObjectiveName_s)"
+ $additionalInfoDictionary["DTUPercentage"] = [int] $result.P99DTUPercentage
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = ([double] $result.Last30DaysCost / 2)
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Sql/servers/databases"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnderusedSqlDatabases"
+ RecommendationSubTypeId = "ff68f4e5-1197-4be9-8e5f-8760d7863cb4"
+ RecommendationDescription = "Underused SQL Databases (performance capacity waste)"
+ RecommendationAction = "Right-size underused SQL Databases"
+ InstanceId = $result.ResourceId
+ InstanceName = $result.DBName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "sqldbs-underused-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for performance constrained SQL Databases, with more than $dtuDegradedPercentageThreshold % Avg. DTU usage..."
+
+$baseQuery = @"
+ let DTUPercentageThreshold = $dtuDegradedPercentageThreshold;
+ let MetricsInterval = $($perfDaysBackwards)d;
+ let CandidateDatabaseIds = $sqlDbsTableName
+ | where TimeGenerated > ago(1d) and SkuName_s in ('Basic','Standard','Premium')
+ | distinct InstanceId_s;
+ $metricsTableName
+ | where TimeGenerated > ago(MetricsInterval)
+ | where ResourceId in (CandidateDatabaseIds) and MetricNames_s == 'dtu_consumption_percent' and AggregationType_s == 'Average' and AggregationOfType_s == 'Maximum'
+ | summarize AvgDTUPercentage = avg(todouble(MetricValue_s)) by ResourceId
+ | where AvgDTUPercentage > DTUPercentageThreshold
+ | join (
+ $sqlDbsTableName
+ | where TimeGenerated > ago(1d)
+ | project ResourceId = InstanceId_s, DBName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, SkuName_s, ServiceObjectiveName_s, Tags_s, Cloud_s
+ ) on ResourceId
+ | project DBName_s, ResourceId, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, SkuName_s, ServiceObjectiveName_s, Tags_s, Cloud_s, AvgDTUPercentage
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.ResourceId
+ $queryText = @"
+ $metricsTableName
+ | where ResourceId == '$queryInstanceId'
+ | where MetricNames_s == 'dtu_consumption_percent' and AggregationType_s == 'Average'
+ | project TimeGenerated, DTUPercentage = toint(MetricValue_s)
+ | render timechart
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = "$($result.SkuName_s) $($result.ServiceObjectiveName_s)"
+ $additionalInfoDictionary["DTUPercentage"] = [int] $result.AvgDTUPercentage
+
+ $fitScore = 4
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Performance"
+ ImpactedArea = "Microsoft.Sql/servers/databases"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "PerfConstrainedSqlDatabases"
+ RecommendationSubTypeId = "724ff2f5-8c83-4105-b00d-029c4560d774"
+ RecommendationDescription = "SQL Database performance has been constrained by lack of resources"
+ RecommendationAction = "Resize SQL Database to higher SKU or scale it out"
+ InstanceId = $result.ResourceId
+ InstanceName = $result.DBName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "sqldbs-perfconstrained-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..cbaebfdf9
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-StorageAccountOptimizationsToBlobStorage.ps1
@@ -0,0 +1,328 @@
+function ConvertTo-Hashtable {
+ [CmdletBinding()]
+ [OutputType('hashtable')]
+ param (
+ [Parameter(ValueFromPipeline)]
+ $InputObject
+ )
+
+ process {
+ if ($null -eq $InputObject) {
+ return $null
+ }
+
+ if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) {
+ $collection = @(
+ foreach ($object in $InputObject) {
+ ConvertTo-Hashtable -InputObject $object
+ }
+ )
+ Write-Output -NoEnumerate $collection
+ } elseif ($InputObject -is [psobject]) {
+ $hash = @{}
+ foreach ($property in $InputObject.PSObject.Properties) {
+ $hash[$property.Name] = ConvertTo-Hashtable -InputObject $property.Value
+ }
+ $hash
+ } else {
+ $InputObject
+ }
+ }
+}
+
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+# storage account thresholds variables
+$growthPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationStorageAcountGrowthThresholdPercentage" -ErrorAction SilentlyContinue)
+if (-not($growthPercentageThreshold -gt 0)) {
+ $growthPercentageThreshold = 5
+}
+$monthlyCostThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationStorageAcountGrowthMonthlyCostThreshold" -ErrorAction SilentlyContinue)
+if (-not($monthlyCostThreshold -gt 0)) {
+ $monthlyCostThreshold = 50
+}
+$growthLookbackDays = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationStorageAcountGrowthLookbackDays" -ErrorAction SilentlyContinue)
+if (-not($growthLookbackDays -gt 0)) {
+ $growthLookbackDays = 30
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+$tenantId = (Get-AzContext).Tenant.Id
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGResourceContainers','AzureConsumption')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $subscriptionsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = $growthLookbackDays + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+Write-Output "Looking for ever growing Storage Accounts, with more than $monthlyCostThreshold/month costs, growing more than $growthPercentageThreshold% over the last $growthLookbackDays days..."
+
+$dailyCostThreshold = [Math]::Round($monthlyCostThreshold / 30)
+
+$baseQuery = @"
+let interval = $($growthLookbackDays)d;
+let etime = endofday(todatetime(toscalar($consumptionTableName | where todatetime(Date_s) > ago(interval) and todatetime(Date_s) < now() | summarize max(todatetime(Date_s)))));
+let etime_subs = endofday(todatetime(toscalar($subscriptionsTableName | where TimeGenerated > ago(interval) | summarize max(TimeGenerated))));
+let stime = endofday(etime-interval);
+let lastday_stime = endofday(etime-1d);
+let lastday_stime_subs = endofday(etime_subs-1d);
+let costThreshold = $dailyCostThreshold;
+let growthPercentageThreshold = $growthPercentageThreshold;
+let StorageAccountsWithLastTags = $consumptionTableName
+| where todatetime(Date_s) between (lastday_stime..etime)
+| where MeterCategory_s == 'Storage' and ConsumedService_s == 'Microsoft.Storage' and MeterName_s endswith 'Data Stored' and ChargeType_s == 'Usage'
+| extend ResourceId = tolower(ResourceId)
+| distinct ResourceId, Tags_s;
+$consumptionTableName
+| where todatetime(Date_s) between (stime..etime)
+| where MeterCategory_s == 'Storage' and ConsumedService_s == 'Microsoft.Storage' and MeterName_s endswith 'Data Stored' and ChargeType_s == 'Usage'
+| extend ResourceId = tolower(ResourceId)
+| make-series CostSum=sum(todouble(CostInBillingCurrency_s)) default=0.0 on todatetime(Date_s) from stime to etime step 1d by ResourceId, ResourceGroup, SubscriptionId
+| extend InitialDailyCost = todouble(CostSum[0]), CurrentDailyCost = todouble(CostSum[array_length(CostSum)-1])
+| extend GrowthPercentage = round((CurrentDailyCost-InitialDailyCost)/InitialDailyCost*100)
+| where InitialDailyCost > 0 and CurrentDailyCost > costThreshold and GrowthPercentage > growthPercentageThreshold
+| project ResourceId, InitialDailyCost, CurrentDailyCost, GrowthPercentage, ResourceGroup, SubscriptionId
+| join kind=leftouter (StorageAccountsWithLastTags) on ResourceId
+| join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > lastday_stime_subs
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionId=SubscriptionGuid_g, SubscriptionName = ContainerName_s
+) on SubscriptionId
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ throw "Execution aborted"
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.ResourceId
+ $queryText = @"
+ $consumptionTableName
+ | where MeterCategory_s == 'Storage' and ConsumedService_s == 'Microsoft.Storage' and MeterName_s endswith 'Data Stored' and ChargeType_s == 'Usage'
+ | extend ResourceId = tolower(ResourceId)
+ | where ResourceId =~ '$queryInstanceId'
+ | summarize DailyCosts = sum(todouble(CostInBillingCurrency_s)) by bin(todatetime(Date_s), 1d)
+ | render timechart
+"@
+
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-1 * $recommendationSearchTimeSpan).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $costsAmount = ([double] $result.InitialDailyCost + [double] $result.CurrentDailyCost) / 2 * 30
+
+ $additionalInfoDictionary["InitialDailyCost"] = $result.InitialDailyCost
+ $additionalInfoDictionary["CurrentDailyCost"] = $result.CurrentDailyCost
+ $additionalInfoDictionary["GrowthPercentage"] = $result.GrowthPercentage
+ $additionalInfoDictionary["CostsAmount"] = $costsAmount
+ $additionalInfoDictionary["savingsAmount"] = $costsAmount * 0.25 # estimated 25% savings
+
+ $fitScore = 4 # savings are estimated with a significant error margin
+
+ $fitScore = [Math]::max(0.0, $fitScore)
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ if (-not($result.Tags_s -like "{*"))
+ {
+ $result.Tags_s = '{' + $result.Tags_s + '}'
+ }
+ $tags = ConvertFrom-Json $result.Tags_s | ConvertTo-Hashtable
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $cloudEnvironment
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Storage/storageAccounts"
+ Impact = "Medium"
+ RecommendationType = "Saving"
+ RecommendationSubType = "StorageAccountsGrowing"
+ RecommendationSubTypeId = "08e049ca-18b0-4d22-b174-131a91d0381c"
+ RecommendationDescription = "Storage Account without retention policy in place"
+ RecommendationAction = "Review whether the Storage Account has a retention policy for example via Lifecycle Management"
+ InstanceId = $result.ResourceId
+ InstanceName = $result.ResourceId.Split('/')[-1]
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionId
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $tenantId
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+Write-Output "Exporting final $($recommendations.Count) results as a JSON file..."
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "storageaccounts-costsgrowing-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1
new file mode 100644
index 000000000..df4cfdd7f
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnattachedDisksToBlobStorage.ps1
@@ -0,0 +1,272 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGManagedDisk','AzureConsumption','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$disksTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGManagedDisk' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $disksTableName, $subscriptionsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+# Execute the recommendation query against Log Analytics
+
+$baseQuery = @"
+ let interval = 30d;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(interval) | summarize max(todatetime(Date_s))));
+ let stime = etime-interval;
+ $disksTableName
+ | where TimeGenerated > ago(1d) and isempty(OwnerVMId_s) and Tags_s !has 'ASR-ReplicaDisk' and Tags_s !has 'asrseeddisk'
+ | distinct DiskName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SKU_s, DiskSizeGB_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize Last30DaysCost=sum(todouble(CostInBillingCurrency_s)) by DiskName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SKU_s, DiskSizeGB_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ throw "Execution aborted"
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ $disksTableName
+ | where InstanceId_s == '$queryInstanceId' and isempty(OwnerVMId_s)
+ | distinct InstanceId_s, DiskName_s, DiskSizeGB_s, SKU_s, TimeGenerated
+ | summarize LastAttachedDate = min(TimeGenerated) by InstanceId_s, DiskName_s, DiskSizeGB_s, SKU_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize CostsSinceDetached = sumif(todouble(CostInBillingCurrency_s), todatetime(Date_s) > LastAttachedDate) by DiskName_s, LastAttachedDate, DiskSizeGB_s, SKU_s
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["DiskType"] = "Managed"
+ $additionalInfoDictionary["currentSku"] = $result.SKU_s
+ $additionalInfoDictionary["DiskSizeGB"] = [int] $result.DiskSizeGB_s
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Compute/disks"
+ Impact = "Medium"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnattachedDisks"
+ RecommendationSubTypeId = "c84d5e86-e2d6-4d62-be7c-cecfbd73b0db"
+ RecommendationDescription = "Unattached disks (without owner VM) incur in unnecessary costs"
+ RecommendationAction = "Delete or downgrade disk to Standard SKU"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.DiskName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "unattacheddisks-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1
new file mode 100644
index 000000000..cf6af1268
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnusedAppGWsToBlobStorage.ps1
@@ -0,0 +1,273 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGAppGateway','AzureConsumption','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$appGWsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGAppGateway' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $appGWsTableName, $subscriptionsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+# Execute the Cost recommendation query against Log Analytics
+
+$baseQuery = @"
+ let interval = 30d;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(interval) | summarize max(todatetime(Date_s))));
+ let stime = etime-interval;
+ $appGWsTableName
+ | where TimeGenerated > ago(1d)
+ | where toint(BackendPoolsCount_s) == 0 or ((BackendIPCount_s == 0 or isempty(BackendIPCount_s)) and (BackendAddressesCount_s == 0 or isempty(BackendAddressesCount_s)))
+ | distinct InstanceName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, SkuCapacity_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize Last30DaysCost=sum(todouble(CostInBillingCurrency_s)) by InstanceName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, SkuCapacity_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ throw "Execution aborted"
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ $appGWsTableName
+ | where InstanceId_s == '$queryInstanceId'
+ | where toint(BackendPoolsCount_s) == 0 or ((toint(BackendIPCount_s) == 0 or isempty(BackendIPCount_s)) and (toint(BackendAddressesCount_s) == 0 or isempty(BackendAddressesCount_s)))
+ | distinct InstanceId_s, InstanceName_s, TimeGenerated
+ | summarize FirstUnusedDate = min(TimeGenerated) by InstanceId_s, InstanceName_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize CostsSinceUnused = sumif(todouble(CostInBillingCurrency_s), todatetime(Date_s) > FirstUnusedDate) by InstanceName_s, FirstUnusedDate
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = $result.SkuName_s
+ $additionalInfoDictionary["InstanceCount"] = $result.SkuCapacity_s
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Network/applicationGateways"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnusedAppGateways"
+ RecommendationSubTypeId = "dc3d2baa-26c8-435e-aa9d-edb2bfd6fff6"
+ RecommendationDescription = "Application Gateways without a backend pool incur in unnecessary costs"
+ RecommendationAction = "Delete the Application Gateway"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "unusedappgateways-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1
new file mode 100644
index 000000000..2404b12f1
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-UnusedLoadBalancersToBlobStorage.ps1
@@ -0,0 +1,404 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGLoadBalancer','AzureConsumption','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$lbsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGLoadBalancer' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $lbsTableName, $subscriptionsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+# Execute the Cost recommendation query against Log Analytics
+
+$baseQuery = @"
+ let interval = 30d;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(interval) | summarize max(todatetime(Date_s))));
+ let stime = etime-interval;
+ $lbsTableName
+ | where TimeGenerated > ago(1d)
+ | where SkuName_s == 'Standard'
+ | where (toint(BackendPoolsCount_s) == 0 or ((toint(BackendIPCount_s) == 0 or isempty(BackendIPCount_s)) and (toint(BackendAddressesCount_s) == 0 or isempty(BackendAddressesCount_s)))) and toint(InboundNatPoolsCount_s) == 0
+ | where toint(LbRulesCount_s) != 0 or toint(InboundNatRulesCount_s) != 0 or toint(OutboundRulesCount_s) != 0
+ | distinct InstanceName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize Last30DaysCost=sum(todouble(CostInBillingCurrency_s)) by InstanceName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Costs query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ $lbsTableName
+ | where InstanceId_s == '$queryInstanceId'
+ | where SkuName_s == 'Standard'
+ | where (toint(BackendPoolsCount_s) == 0 or ((BackendIPCount_s == 0 or isempty(BackendIPCount_s)) and (BackendAddressesCount_s == 0 or isempty(BackendAddressesCount_s)))) and toint(InboundNatPoolsCount_s) == 0
+ | where toint(LbRulesCount_s) != 0 or toint(InboundNatRulesCount_s) != 0 or toint(OutboundRulesCount_s) != 0
+ | distinct InstanceId_s, InstanceName_s, SkuName_s, TimeGenerated
+ | summarize FirstUnusedDate = min(TimeGenerated) by InstanceId_s, InstanceName_s, SkuName_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize CostsSinceUnused = sumif(todouble(CostInBillingCurrency_s), todatetime(Date_s) > FirstUnusedDate) by InstanceName_s, FirstUnusedDate, SkuName_s
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = $result.SkuName_s
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Network/loadBalancers"
+ Impact = "Medium"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnusedStandardLoadBalancers"
+ RecommendationSubTypeId = "f1ed3bb2-3cb5-41e6-ba38-7001d5ff87f5"
+ RecommendationDescription = "Standard Load Balancers with rules defined and without a backend pool incur in unnecessary costs"
+ RecommendationAction = "Delete the Load Balancer"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "unusedstdloadbalancers-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+
+# Execute the Operational Excellence recommendation query against Log Analytics
+
+$baseQuery = @"
+ $lbsTableName
+ | where TimeGenerated > ago(1d)
+ | where (toint(BackendPoolsCount_s) == 0 or BackendIPCount_s == 0 or isempty(BackendIPCount_s)) and toint(InboundNatPoolsCount_s) == 0
+ | distinct InstanceName_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days 2) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Operational Excellence query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$workspaceTenantId/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = $result.SkuName_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Network/loadBalancers"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "UnusedLoadBalancers"
+ RecommendationSubTypeId = "48619512-f4e6-4241-9c85-16f7c987950c"
+ RecommendationDescription = "Load Balancers without a backend pool are useless"
+ RecommendationAction = "Delete the Load Balancer"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "unusedloadbalancers-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..cd2da514d
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMOptimizationsToBlobStorage.ps1
@@ -0,0 +1,461 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$deallocatedIntervalDays = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendationLongDeallocatedVmsIntervalDays")
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGManagedDisk','ARGVirtualMachine','AzureConsumption','ARGResourceContainers')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$vmsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGVirtualMachine' }).LogAnalyticsSuffix + "_CL"
+$disksTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGManagedDisk' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $vmsTableName, $disksTableName, $subscriptionsTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = $deallocatedIntervalDays + $consumptionOffsetDaysStart
+$offlineInterval = $deallocatedIntervalDays + $consumptionOffsetDays
+$billingInterval = 30 + $consumptionOffsetDays
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+Write-Output "Looking for VMs that have been deallocated for more than 30 days..."
+
+# Execute the recommendation query against Log Analytics
+
+$baseQuery = @"
+ let offlineInterval = $($offlineInterval)d;
+ let billingInterval = $($billingInterval)d;
+ let billingWindowIntervalEnd = $($consumptionOffsetDays)d;
+ let billingWindowIntervalStart = $($consumptionOffsetDaysStart)d;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(billingInterval) | summarize max(todatetime(Date_s))));
+ let stime = etime-offlineInterval;
+ let BilledVMs = $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | where ResourceId like 'microsoft.compute/virtualmachines/' or ResourceId like 'microsoft.classiccompute/virtualmachines/'
+ | extend InstanceId_s = tolower(ResourceId)
+ | distinct InstanceId_s;
+ let RunningVMs = $vmsTableName
+ | where TimeGenerated > ago(billingWindowIntervalStart) and TimeGenerated < ago(billingWindowIntervalEnd)
+ | where PowerState_s has_any ('running','starting','readyrole')
+ | distinct InstanceId_s;
+ let BilledDisks = $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | where ResourceId like 'microsoft.compute/disks/'
+ | extend BillingInstanceId = tolower(ResourceId)
+ | summarize DisksCosts = sum(todouble(CostInBillingCurrency_s)) by BillingInstanceId;
+ $vmsTableName
+ | where TimeGenerated > ago(billingWindowIntervalStart) and TimeGenerated < ago(billingWindowIntervalEnd)
+ | where InstanceId_s !in (RunningVMs)
+ | join kind=leftouter (BilledVMs) on InstanceId_s
+ | where isempty(InstanceId_s1)
+ | project InstanceId_s, VMName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s, Tags_s
+ | join kind=leftouter (
+ $disksTableName
+ | where TimeGenerated > ago(1d)
+ | project DiskInstanceId = InstanceId_s, SKU_s, OwnerVMId_s
+ ) on `$left.InstanceId_s == `$right.OwnerVMId_s
+ | join kind=leftouter (
+ BilledDisks
+ ) on `$left.DiskInstanceId == `$right.BillingInstanceId
+ | summarize TotalDisksCosts = sum(DisksCosts) by InstanceId_s, VMName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s, Tags_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ let offlineInterval = $($offlineInterval)d;
+ $consumptionTableName
+ | extend ResourceId = tolower(ResourceId)
+ | where ResourceId =~ '$queryInstanceId'
+ | where todatetime(Date_s) < now()
+ | join kind=inner (
+ $disksTableName
+ | extend DiskInstanceId = InstanceId_s
+ )
+ on `$left.ResourceId == `$right.OwnerVMId_s
+ | summarize DeallocatedSince = max(todatetime(Date_s)) by DiskName_s, DiskSizeGB_s, SKU_s, DiskInstanceId
+ | join kind=inner
+ (
+ $consumptionTableName
+ | where todatetime(Date_s) > ago(offlineInterval)
+ | extend DiskInstanceId = tolower(ResourceId)
+ | summarize DiskCosts = sum(todouble(CostInBillingCurrency_s)) by DiskInstanceId
+ )
+ on DiskInstanceId
+ | project DeallocatedSince, DiskName_s, DiskSizeGB_s, SKU_s, MonthlyCosts = DiskCosts
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["LongDeallocatedThreshold"] = $deallocatedIntervalDays
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.TotalDisksCosts
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.TotalDisksCosts
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "Medium"
+ RecommendationType = "Saving"
+ RecommendationSubType = "LongDeallocatedVms"
+ RecommendationSubTypeId = "c320b790-2e58-452a-aa63-7b62c383ad8a"
+ RecommendationDescription = "Virtual Machine has been deallocated for long with disks still incurring costs"
+ RecommendationAction = "Delete Virtual Machine or downgrade its disks to Standard HDD SKU"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "longdeallocatedvms-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMs that are stopped (not deallocated)..."
+
+# Execute the recommendation query against Log Analytics
+
+$baseQuery = @"
+ $vmsTableName
+ | where TimeGenerated > ago(1d)
+ | where PowerState_s has 'stopped'
+ | project InstanceId_s, VMName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s, Tags_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | where TimeGenerated > ago(1d) and MeterCategory_s == 'Virtual Machines'
+ | project InstanceId_s=tolower(ResourceId), UnitPrice_s, EffectivePrice_s
+ | summarize arg_max(todouble(EffectivePrice_s), *) by InstanceId_s
+ | project InstanceId_s, MonthlyCost=24*todouble(iif(todouble(UnitPrice_s) > 0, todouble(UnitPrice_s), todouble(EffectivePrice_s)))*30
+ ) on InstanceId_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ let LastNonStopped = toscalar($vmsTableName
+ | where InstanceId_s =~ '$queryInstanceId'
+ | where TimeGenerated < now()
+ | where PowerState_s !has 'stopped'
+ | summarize max(todatetime(StatusDate_s)));
+ $consumptionTableName
+ | where ResourceId =~ '$queryInstanceId'
+ | where todatetime(Date_s) >= LastNonStopped
+ | where MeterCategory_s == 'Virtual Machines'
+ | summarize ComputeCostsSinceStopped = sum(todouble(Quantity_s)*todouble(UnitPrice_s)) by MeterSubCategory_s, StoppedSince=LastNonStopped
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.MonthlyCost
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.MonthlyCost
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "StoppedVms"
+ RecommendationSubTypeId = "110fea55-a9c3-480d-8248-116f61e139a8"
+ RecommendationDescription = "Virtual Machine is stopped (not deallocated) and still incurring costs"
+ RecommendationAction = "Deallocate Virtual Machine"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "stoppedvms-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..122620177
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMSSOptimizationsToBlobStorage.ps1
@@ -0,0 +1,797 @@
+$ErrorActionPreference = "Stop"
+
+function Find-SkuHourlyPrice {
+ param (
+ [object[]] $SKUPriceSheet,
+ [string] $SKUName
+ )
+
+ $skuPriceObject = $null
+
+ if ($SKUPriceSheet)
+ {
+ $skuNameParts = $SKUName.Split('_')
+
+ if ($skuNameParts.Count -eq 3) # e.g., Standard_D1_v2
+ {
+ $skuNameFilter = "*" + $skuNameParts[1] + " *"
+ $skuVersionFilter = "*" + $skuNameParts[2]
+ $skuPrices = $SKUPriceSheet | Where-Object { $_.MeterName_s -like $skuNameFilter `
+ -and $_.MeterName_s -notlike '*Low Priority' -and $_.MeterName_s -notlike '*Expired' `
+ -and $_.MeterName_s -like $skuVersionFilter -and $_.MeterSubCategory_s -notlike '*Windows' -and $_.UnitPrice_s -ne 0 }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ if ($skuPrices.Count -gt 2) # D1-like scenarios
+ {
+ $skuFilter = "*" + $skuNameParts[1] + " " + $skuNameParts[2] + "*"
+ $skuPrices = $skuPrices | Where-Object { $_.MeterName_s -like $skuFilter }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ }
+ }
+
+ if ($skuNameParts.Count -eq 2) # e.g., Standard_D1
+ {
+ $skuNameFilter = "*" + $skuNameParts[1] + "*"
+
+ $skuPrices = $SKUPriceSheet | Where-Object { $_.MeterName_s -like $skuNameFilter `
+ -and $_.MeterName_s -notlike '*Low Priority' -and $_.MeterName_s -notlike '*Expired' `
+ -and $_.MeterName_s -notlike '* v*' -and $_.MeterSubCategory_s -notlike '*Windows' -and $_.UnitPrice_s -ne 0 }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ if ($skuPrices.Count -gt 2) # D1-like scenarios
+ {
+ $skuFilterLeft = "*" + $skuNameParts[1] + "/*"
+ $skuFilterRight = "*/" + $skuNameParts[1] + "*"
+ $skuPrices = $skuPrices | Where-Object { $_.MeterName_s -like $skuFilterLeft -or $_.MeterName_s -like $skuFilterRight }
+
+ if (($skuPrices -or $skuPrices.Count -ge 1) -and $skuPrices.Count -le 2)
+ {
+ $skuPriceObject = $skuPrices[0]
+ }
+ }
+ }
+ }
+
+ $targetHourlyPrice = [double]::MaxValue
+ if ($null -ne $skuPriceObject)
+ {
+ $targetUnitHours = [int] (Select-String -InputObject $skuPriceObject.UnitOfMeasure_s -Pattern "^\d+").Matches[0].Value
+ if ($targetUnitHours -gt 0)
+ {
+ $targetHourlyPrice = [double] ($skuPriceObject.UnitPrice_s / $targetUnitHours)
+ }
+ }
+
+ return $targetHourlyPrice
+}
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+# percentiles variables
+$cpuPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileCpu" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentile -gt 0)) {
+ $cpuPercentile = 99
+}
+$memoryPercentile = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfPercentileMemory" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentile -gt 0)) {
+ $memoryPercentile = 99
+}
+
+# perf thresholds variables
+$cpuPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuPercentageThreshold -gt 0)) {
+ $cpuPercentageThreshold = 30
+}
+$memoryPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdMemoryPercentage" -ErrorAction SilentlyContinue)
+if (-not($memoryPercentageThreshold -gt 0)) {
+ $memoryPercentageThreshold = 50
+}
+$cpuDegradedMaxPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuDegradedMaxPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuDegradedMaxPercentageThreshold -gt 0)) {
+ $cpuDegradedMaxPercentageThreshold = 95
+}
+$cpuDegradedAvgPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdCpuDegradedAvgPercentage" -ErrorAction SilentlyContinue)
+if (-not($cpuDegradedAvgPercentageThreshold -gt 0)) {
+ $cpuDegradedAvgPercentageThreshold = 75
+}
+$memoryDegradedPercentageThreshold = [int] (Get-AutomationVariable -Name "AzureOptimization_PerfThresholdMemoryDegradedPercentage" -ErrorAction SilentlyContinue)
+if (-not($memoryDegradedPercentageThreshold -gt 0)) {
+ $memoryDegradedPercentageThreshold = 90
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$perfDaysBackwards = [int] (Get-AutomationVariable -Name "AzureOptimization_RecommendPerfPeriodInDays" -ErrorAction SilentlyContinue)
+if (-not($perfDaysBackwards -gt 0)) {
+ $perfDaysBackwards = 7
+}
+
+$perfTimeGrain = Get-AutomationVariable -Name "AzureOptimization_RecommendPerfTimeGrain" -ErrorAction SilentlyContinue
+if (-not($perfTimeGrain)) {
+ $perfTimeGrain = "1h"
+}
+
+$referenceRegion = Get-AutomationVariable -Name "AzureOptimization_ReferenceRegion"
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGVMSS','MonitorMetrics','ARGResourceContainers','AzureConsumption','Pricesheet')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$vmssTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGVMSS' }).LogAnalyticsSuffix + "_CL"
+$metricsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'MonitorMetrics' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+$pricesheetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'Pricesheet' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $vmssTableName, $metricsTableName, $subscriptionsTableName, $pricesheetTableName and $consumptionTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+Write-Output "Getting Virtual Machine SKUs for the $referenceRegion region..."
+
+$skus = Get-AzComputeResourceSku -Location $referenceRegion | Where-Object { $_.ResourceType -eq "virtualMachines" }
+
+Write-Output "Getting the current Pricesheet..."
+
+if ($cloudEnvironment -eq "AzureCloud")
+{
+ $pricesheetRegion = "EU West"
+}
+
+try
+{
+ $pricesheetEntries = @()
+
+ $baseQuery = @"
+ $pricesheetTableName
+ | where TimeGenerated > ago(14d)
+ | where MeterCategory_s == 'Virtual Machines' and MeterRegion_s == '$pricesheetRegion' and PriceType_s == 'Consumption'
+ | distinct MeterName_s, MeterSubCategory_s, MeterCategory_s, MeterRegion_s, UnitPrice_s, UnitOfMeasure_s
+"@
+
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days 14) -Wait 600 -IncludeStatistics
+ $pricesheetEntries = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+
+ Write-Output "Query finished with $($pricesheetEntries.Count) results."
+ Write-Output "Query statistics: $($queryResults.Statistics.query)"
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ Write-Output "Consumption pricesheet not available, will estimate savings based in cores count..."
+}
+
+$skuPricesFound = @{}
+
+$recommendationsErrors = 0
+
+Write-Output "Looking for underutilized Scale Sets, with less than $cpuPercentageThreshold% CPU and $memoryPercentageThreshold% RAM usage..."
+
+$baseQuery = @"
+ let billingInterval = 30d;
+ let perfInterval = $($perfDaysBackwards)d;
+ let cpuPercentileValue = $cpuPercentile;
+ let memoryPercentileValue = $memoryPercentile;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(30d) | summarize max(todatetime(Date_s))));
+ let stime = etime-billingInterval;
+
+ let BilledVMs = $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime) and ResourceId contains 'virtualmachinescalesets'
+ | extend VMConsumedQuantity = iif(ResourceId contains 'virtualmachinescalesets' and MeterCategory_s == 'Virtual Machines', todouble(Quantity_s), 0.0)
+ | extend VMPrice = iif(ResourceId contains 'virtualmachinescalesets' and MeterCategory_s == 'Virtual Machines', todouble(EffectivePrice_s), 0.0)
+ | extend FinalCost = VMPrice * VMConsumedQuantity
+ | extend InstanceId_s = tolower(ResourceId)
+ | summarize Last30DaysCost = sum(FinalCost), Last30DaysQuantity = sum(VMConsumedQuantity) by InstanceId_s;
+
+ let MemoryPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where MetricNames_s == "Available Memory Bytes" and AggregationType_s == "Minimum"
+ | extend MemoryAvailableMBs = todouble(MetricValue_s)/1024/1024
+ | project TimeGenerated, MemoryAvailableMBs, InstanceId_s=ResourceId
+ | join kind=inner (
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, MemoryMB_s
+ ) on InstanceId_s
+ | extend MemoryPercentage = todouble(toint(MemoryMB_s) - toint(MemoryAvailableMBs)) / todouble(MemoryMB_s) * 100
+ | summarize PMemoryPercentage = percentile(MemoryPercentage, memoryPercentileValue) by InstanceId_s;
+
+ let ProcessorPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where MetricNames_s == "Percentage CPU" and AggregationType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PCPUPercentage = percentile(todouble(MetricValue_s), cpuPercentileValue) by InstanceId_s;
+
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, VMSSName_s, ResourceGroupName_s, SubscriptionGuid_g, Cloud_s, TenantGuid_g, VMSSSize_s, NicCount_s, DataDiskCount_s, Capacity_s, Tags_s
+ | join kind=inner ( BilledVMs ) on InstanceId_s
+ | join kind=leftouter ( MemoryPerf ) on InstanceId_s
+ | join kind=leftouter ( ProcessorPerf ) on InstanceId_s
+ | project InstanceId_s, VMSSName = VMSSName_s, ResourceGroup = ResourceGroupName_s, SubscriptionId = SubscriptionGuid_g, Cloud_s, TenantGuid_g, VMSSSize_s, NicCount_s, DataDiskCount_s, Capacity_s, PMemoryPercentage, PCPUPercentage, Tags_s, Last30DaysCost, Last30DaysQuantity
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionId
+ | where isnotempty(PMemoryPercentage) and isnotempty(PCPUPercentage) and PMemoryPercentage < $memoryPercentageThreshold and PCPUPercentage < $cpuPercentageThreshold
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+
+ $targetSku = $null
+ $currentSku = $skus | Where-Object { $_.Name -eq $result.VMSSSize_s }
+
+ $currentSkuvCPUs = [int]($currentSku.Capabilities | Where-Object { $_.Name -eq 'vCPUsAvailable' }).Value
+
+ $memoryNeeded = [double]($currentSku.Capabilities | Where-Object { $_.Name -eq 'MemoryGB' }).Value * ([double] $result.PMemoryPercentage / 100)
+ $cpuNeeded = [double]$currentSkuvCPUs * ([double] $result.PCPUPercentage / 100)
+ $currentPremiumIO = [bool] ($currentSku.Capabilities | Where-Object { $_.Name -eq 'PremiumIO' }).Value
+ $currentCpuArch = ($currentSku.Capabilities | Where-Object { $_.Name -eq 'CpuArchitectureType' }).Value
+
+ if ($null -eq $skuPricesFound[$currentSku.Name])
+ {
+ $skuPricesFound[$currentSku.Name] = Find-SkuHourlyPrice -SKUName $currentSku.Name -SKUPriceSheet $pricesheetEntries
+ }
+
+ $targetSkuCandidates = @()
+
+ foreach ($sku in $skus)
+ {
+ $targetSkuCandidate = $null
+
+ $skuCPUs = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'vCPUsAvailable' }).Value
+ $skuMemory = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MemoryGB' }).Value
+ $skuMaxDataDisks = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxDataDiskCount' }).Value
+ $skuMaxNICs = [int] ($sku.Capabilities | Where-Object { $_.Name -eq 'MaxNetworkInterfaces' }).Value
+ $skuPremiumIO = [bool] ($sku.Capabilities | Where-Object { $_.Name -eq 'PremiumIO' }).Value
+ $skuCpuArch = ($sku.Capabilities | Where-Object { $_.Name -eq 'CpuArchitectureType' }).Value
+
+ if ($currentSku.Name -ne $sku.Name -and -not($sku.Name -like "*Promo*") -and [double]$skuCPUs -ge $cpuNeeded -and [double]$skuMemory -ge $memoryNeeded `
+ -and $skuMaxDataDisks -ge [int] $result.DataDiskCount_s -and $skuMaxNICs -ge [int] $result.NicCount_s `
+ -and ($currentPremiumIO -eq $false -or $skuPremiumIO -eq $currentPremiumIO) -and $skuCpuArch -eq $currentCpuArch)
+ {
+ if ($null -eq $skuPricesFound[$sku.Name])
+ {
+ $skuPricesFound[$sku.Name] = Find-SkuHourlyPrice -SKUName $sku.Name -SKUPriceSheet $pricesheetEntries
+ }
+
+ if ($skuPricesFound[$currentSku.Name] -eq 0 -or $skuPricesFound[$sku.Name] -lt $skuPricesFound[$currentSku.Name])
+ {
+ $targetSkuCandidate = New-Object PSObject -Property @{
+ Name = $sku.Name
+ HourlyPrice = $skuPricesFound[$sku.Name]
+ vCPUsAvailable = $skuCPUs
+ MemoryGB = $skuMemory
+ }
+
+ $targetSkuCandidates += $targetSkuCandidate
+ }
+ }
+ }
+
+ $targetSku = $targetSkuCandidates | Sort-Object -Property HourlyPrice,MemoryGB,vCPUsAvailable | Select-Object -First 1
+
+ if ($null -ne $targetSku)
+ {
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ let billingInterval = 30d;
+ let armId = `'$queryInstanceId`';
+ let gInt = $perfTimeGrain;
+ let MemoryPerf = $metricsTableName
+ | where TimeGenerated > ago(billingInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Available Memory Bytes' and AggregationType_s == 'Minimum'
+ | extend MemoryAvailableMBs = todouble(MetricValue_s)/1024/1024
+ | project CollectedDate, MemoryAvailableMBs, InstanceId_s=ResourceId
+ | join kind=inner (
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, MemoryMB_s
+ ) on InstanceId_s
+ | extend MemoryPercentage = todouble(toint(MemoryMB_s) - toint(MemoryAvailableMBs)) / todouble(MemoryMB_s) * 100
+ | summarize percentile(MemoryPercentage, $memoryPercentile) by bin(CollectedDate, gInt);
+ let ProcessorPerf = $metricsTableName
+ | where TimeGenerated > ago(billingInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Percentage CPU' and AggregationType_s == 'Maximum'
+ | extend ProcessorPercentage = todouble(MetricValue_s)
+ | summarize percentile(ProcessorPercentage, $cpuPercentile) by bin(CollectedDate, gInt);
+ MemoryPerf
+ | join kind=inner (ProcessorPerf) on CollectedDate
+ | render timechart
+"@
+
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["SupportsDataDisksCount"] = "true"
+ $additionalInfoDictionary["SupportsNICCount"] = "true"
+ $additionalInfoDictionary["BelowCPUThreshold"] = "true"
+ $additionalInfoDictionary["BelowMemoryThreshold"] = "true"
+ $additionalInfoDictionary["currentSku"] = "$($result.VMSSSize_s)"
+ $additionalInfoDictionary["InstanceCount"] = [int] $result.Capacity_s
+ $additionalInfoDictionary["targetSku"] = "$($targetSku.Name)"
+ $additionalInfoDictionary["DataDiskCount"] = "$($result.DataDiskCount_s)"
+ $additionalInfoDictionary["NicCount"] = "$($result.NicCount_s)"
+ $additionalInfoDictionary["MetricCPUPercentage"] = "$($result.PCPUPercentage)"
+ $additionalInfoDictionary["MetricMemoryPercentage"] = "$($result.PMemoryPercentage)"
+
+ $fitScore = 4 # needs disk IOPS and throughput analysis to improve score
+
+ $fitScore = [Math]::max(0.0, $fitScore)
+
+ $savingCoefficient = [double] $currentSkuvCPUs / [double] $targetSku.vCPUsAvailable
+
+ if ($targetSku -and $null -eq $skuPricesFound[$targetSku.Name])
+ {
+ $skuPricesFound[$targetSku.Name] = Find-SkuHourlyPrice -SKUName $targetSku.Name -SKUPriceSheet $pricesheetEntries
+ }
+
+ $targetSkuSavingsMonthly = $result.Last30DaysCost - ($result.Last30DaysCost / $savingCoefficient)
+
+ $tentativeTargetSkuSavingsMonthly = -1
+
+ if ($targetSku -and $skuPricesFound[$targetSku.Name] -lt [double]::MaxValue)
+ {
+ $targetSkuPrice = $skuPricesFound[$targetSku.Name]
+
+ if ($null -eq $skuPricesFound[$currentSku.Name])
+ {
+ $skuPricesFound[$currentSku.Name] = Find-SkuHourlyPrice -SKUName $currentSku.Name -SKUPriceSheet $pricesheetEntries
+ }
+
+ if ($skuPricesFound[$currentSku.Name] -lt [double]::MaxValue)
+ {
+ $currentSkuPrice = $skuPricesFound[$currentSku.Name]
+ $tentativeTargetSkuSavingsMonthly = ($currentSkuPrice * [double] $result.Last30DaysQuantity) - ($targetSkuPrice * [double] $result.Last30DaysQuantity)
+ }
+ else
+ {
+ $tentativeTargetSkuSavingsMonthly = $result.Last30DaysCost - ($targetSkuPrice * [double] $result.Last30DaysQuantity)
+ }
+ }
+
+ if ($tentativeTargetSkuSavingsMonthly -ge 0)
+ {
+ $targetSkuSavingsMonthly = $tentativeTargetSkuSavingsMonthly
+ }
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ if ($targetSkuSavingsMonthly -eq [double]::PositiveInfinity)
+ {
+ $targetSkuSavingsMonthly = [double] $result.Last30DaysCost / 2
+ }
+
+ $additionalInfoDictionary["savingsAmount"] = [double] $targetSkuSavingsMonthly
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Compute/virtualMachineScaleSets"
+ Impact = "High"
+ RecommendationType = "Saving"
+ RecommendationSubType = "UnderusedVMSS"
+ RecommendationSubTypeId = "a4955cc9-533d-46a2-8625-5c4ebd1c30d5"
+ RecommendationDescription = "VM Scale Set has been underutilized"
+ RecommendationAction = "Resize VM Scale Set to lower SKU or scale it in"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMSSName
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionId
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+ }
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "vmss-underutilized-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for performance constrained Scale Sets, with more than $cpuDegradedMaxPercentageThreshold% Max. CPU, $cpuDegradedAvgPercentageThreshold% Avg. CPU and $memoryDegradedPercentageThreshold% RAM usage..."
+
+$baseQuery = @"
+ let perfInterval = $($perfDaysBackwards)d;
+
+ let MemoryPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where MetricNames_s == "Available Memory Bytes" and AggregationType_s == "Minimum"
+ | extend MemoryAvailableMBs = todouble(MetricValue_s)/1024/1024
+ | project TimeGenerated, MemoryAvailableMBs, InstanceId_s=ResourceId
+ | join kind=inner (
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, MemoryMB_s
+ ) on InstanceId_s
+ | extend MemoryPercentage = todouble(toint(MemoryMB_s) - toint(MemoryAvailableMBs)) / todouble(MemoryMB_s) * 100
+ | summarize PMemoryPercentage = avg(MemoryPercentage) by InstanceId_s;
+
+ let ProcessorMaxPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where MetricNames_s == "Percentage CPU" and AggregationType_s == 'Maximum'
+ | extend InstanceId_s = ResourceId
+ | summarize PCPUMaxPercentage = avg(todouble(MetricValue_s)) by InstanceId_s;
+
+ let ProcessorAvgPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | where MetricNames_s == "Percentage CPU" and AggregationType_s == 'Average'
+ | extend InstanceId_s = ResourceId
+ | summarize PCPUAvgPercentage = avg(todouble(MetricValue_s)) by InstanceId_s;
+
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, VMSSName_s, ResourceGroupName_s, SubscriptionGuid_g, Cloud_s, TenantGuid_g, VMSSSize_s, NicCount_s, DataDiskCount_s, Capacity_s, Tags_s
+ | join kind=leftouter ( MemoryPerf ) on InstanceId_s
+ | join kind=leftouter ( ProcessorMaxPerf ) on InstanceId_s
+ | join kind=leftouter ( ProcessorAvgPerf ) on InstanceId_s
+ | project InstanceId_s, VMSSName = VMSSName_s, ResourceGroup = ResourceGroupName_s, SubscriptionId = SubscriptionGuid_g, Cloud_s, TenantGuid_g, VMSSSize_s, NicCount_s, DataDiskCount_s, Capacity_s, PMemoryPercentage, PCPUMaxPercentage, PCPUAvgPercentage, Tags_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionId = SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionId
+ | where isnotempty(PMemoryPercentage) and isnotempty(PCPUAvgPercentage) and isnotempty(PCPUMaxPercentage) and (PMemoryPercentage > $memoryDegradedPercentageThreshold or (PCPUMaxPercentage > $cpuDegradedMaxPercentageThreshold and PCPUAvgPercentage > $cpuDegradedAvgPercentageThreshold))
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ let perfInterval = $($perfDaysBackwards)d;
+ let armId = `'$queryInstanceId`';
+ let gInt = $perfTimeGrain;
+ let MemoryPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Available Memory Bytes' and AggregationType_s == 'Minimum'
+ | extend MemoryAvailableMBs = todouble(MetricValue_s)/1024/1024
+ | project CollectedDate, MemoryAvailableMBs, InstanceId_s=ResourceId
+ | join kind=inner (
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, MemoryMB_s
+ ) on InstanceId_s
+ | extend MemoryPercentage = todouble(toint(MemoryMB_s) - toint(MemoryAvailableMBs)) / todouble(MemoryMB_s) * 100
+ | summarize avg(MemoryPercentage) by bin(CollectedDate, gInt);
+ let ProcessorMaxPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Percentage CPU' and AggregationType_s == 'Maximum'
+ | extend ProcessorMaxPercentage = todouble(MetricValue_s)
+ | summarize percentile(ProcessorMaxPercentage, $cpuPercentile) by bin(CollectedDate, gInt);
+ let ProcessorAvgPerf = $metricsTableName
+ | where TimeGenerated > ago(perfInterval)
+ | extend CollectedDate = todatetime(strcat(format_datetime(TimeGenerated, 'yyyy-MM-dd'),'T',format_datetime(TimeGenerated, 'HH'),':00:00Z'))
+ | where ResourceId == armId
+ | where MetricNames_s == 'Percentage CPU' and AggregationType_s == 'Average'
+ | extend ProcessorAvgPercentage = todouble(MetricValue_s)
+ | summarize percentile(ProcessorAvgPercentage, $cpuPercentile) by bin(CollectedDate, gInt);
+ MemoryPerf
+ | join kind=inner (ProcessorMaxPerf) on CollectedDate
+ | join kind=inner (ProcessorAvgPerf) on CollectedDate
+ | render timechart
+"@
+
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $datetime.AddDays(-30).ToString("yyyy-MM-dd")
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = "$($result.VMSSSize_s)"
+ $additionalInfoDictionary["InstanceCount"] = [int] $result.Capacity_s
+ $additionalInfoDictionary["MetricCPUAvgPercentage"] = "$($result.PCPUAvgPercentage)"
+ $additionalInfoDictionary["MetricCPUMaxPercentage"] = "$($result.PCPUMaxPercentage)"
+ $additionalInfoDictionary["MetricMemoryPercentage"] = "$($result.PMemoryPercentage)"
+
+ $fitScore = 3 # needs disk IOPS and throughput analysis to improve score
+
+ if ([double] $result.PCPUMaxPercentage -gt [double] $cpuDegradedMaxPercentageThreshold -and [double] $result.PCPUAvgPercentage -gt [double] $cpuDegradedAvgPercentageThreshold)
+ {
+ $fitScore = 4
+ }
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Performance"
+ ImpactedArea = "Microsoft.Compute/virtualMachineScaleSets"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "PerfConstrainedVMSS"
+ RecommendationSubTypeId = "20a40c62-e5c8-4cc3-9fc2-f4ac75013182"
+ RecommendationDescription = "VM Scale Set performance has been constrained by lack of resources"
+ RecommendationAction = "Resize VM Scale Set to higher SKU or scale it out"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMSSName
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroup
+ SubscriptionGuid = $result.SubscriptionId
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "vmss-perfconstrained-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1
new file mode 100644
index 000000000..ddb29d768
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VMsHighAvailabilityToBlobStorage.ps1
@@ -0,0 +1,1476 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGVirtualMachine','ARGUnmanagedDisk','ARGAvailabilitySet','ARGResourceContainers','ARGVMSS')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$availSetTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGAvailabilitySet' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+$vmsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGVirtualMachine' }).LogAnalyticsSuffix + "_CL"
+$vhdsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGUnmanagedDisk' }).LogAnalyticsSuffix + "_CL"
+$vmssTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGVMSS' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $availSetTableName, $vmsTableName, $vmssTableName, $vhdsTableName and $subscriptionsTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 1
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+Write-Output "Looking for Availability Sets with a low fault domain count..."
+
+# Execute the recommendation query against Log Analytics
+
+$baseQuery = @"
+ $availSetTableName
+ | where TimeGenerated > ago(1d) and toint(FaultDomains_s) < 3 and toint(FaultDomains_s) < todouble(VmCount_s)/2
+ | project TimeGenerated, InstanceId_s, InstanceName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s, Tags_s, FaultDomains_s, VmCount_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["FaultDomainCount"] = $result.FaultDomains_s
+ $additionalInfoDictionary["VMCount"] = $result.VmCount_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "AvailSetLowFaultDomainCount"
+ RecommendationSubTypeId = "255de20b-d5e4-4be5-9695-620b4a905774"
+ RecommendationDescription = "Availability Sets should have a fault domain count of 3 or equal or greater than half of the Virtual Machines count"
+ RecommendationAction = "Increase the fault domain count of your Availability Set"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "availsetsfaultdomaincount-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for Availability Sets with a low update domain count..."
+
+$baseQuery = @"
+ $availSetTableName
+ | where TimeGenerated > ago(1d) and toint(UpdateDomains_s) < todouble(VmCount_s)/2
+ | project TimeGenerated, InstanceId_s, InstanceName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s, Tags_s, UpdateDomains_s, VmCount_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["UpdateDomainCount"] = $result.UpdateDomains_s
+ $additionalInfoDictionary["VMCount"] = $result.VmCount_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "AvailSetLowUpdateDomainCount"
+ RecommendationSubTypeId = "9764e285-2eca-46c5-b49e-649c039cf0cf"
+ RecommendationDescription = "Availability Sets should have an update domain count equal or greater than half of the Virtual Machines count"
+ RecommendationAction = "Increase the update domain count of your Availability Set"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.InstanceName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "availsetsupdatedomaincount-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for Availability Sets with VMs sharing storage accounts..."
+
+$baseQuery = @"
+ $vhdsTableName
+ | where TimeGenerated > ago(1d)
+ | extend StorageAccountName = tostring(split(InstanceId_s, '/')[0])
+ | distinct TimeGenerated, StorageAccountName, OwnerVMId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s
+ | join kind=inner (
+ $vmsTableName
+ | where TimeGenerated > ago(1d) and isnotempty(AvailabilitySetId_s)
+ | distinct VMName_s, InstanceId_s, AvailabilitySetId_s, Cloud_s, Tags_s
+ ) on `$left.OwnerVMId_s == `$right.InstanceId_s
+ | extend AvailabilitySetName = tostring(split(AvailabilitySetId_s,'/')[8])
+ | summarize TimeGenerated = any(TimeGenerated), Tags_s=any(Tags_s), VMCount = count() by AvailabilitySetName, AvailabilitySetId_s, StorageAccountName, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s
+ | where VMCount > 1
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics -ErrorAction Continue
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.AvailabilitySetId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["SharedStorageAccountName"] = $result.StorageAccountName
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "AvailSetSharedStorageAccount"
+ RecommendationSubTypeId = "e530029f-9b6a-413a-99ed-81af54502bb9"
+ RecommendationDescription = "Virtual Machines in unmanaged Availability Sets should not share the same Storage Account"
+ RecommendationAction = "Migrate Virtual Machines disks to Managed Disks or keep the disks in a dedicated Storage Account per VM"
+ InstanceId = $result.AvailabilitySetId_s
+ InstanceName = $result.AvailabilitySetName
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "availsetsharedsa-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for Storage Accounts with multiple VMs..."
+
+$baseQuery = @"
+ $vhdsTableName
+ | where TimeGenerated > ago(1d)
+ | extend StorageAccountName = tostring(split(InstanceId_s, '/')[0])
+ | distinct TimeGenerated, StorageAccountName, OwnerVMId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, Cloud_s
+ | join kind=inner (
+ $vmsTableName
+ | where TimeGenerated > ago(1d)
+ | distinct InstanceId_s, Tags_s
+ ) on `$left.OwnerVMId_s == `$right.InstanceId_s
+ | summarize TimeGenerated = any(TimeGenerated), Tags_s=any(Tags_s), VMCount = count() by StorageAccountName, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, Cloud_s
+ | where VMCount > 1
+ | extend StorageAccountId = strcat('/subscriptions/', SubscriptionGuid_g, '/resourcegroups/', ResourceGroupName_s, '/providers/microsoft.storage/storageaccounts/', StorageAccountName)
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics -ErrorAction Continue
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.StorageAccountId
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["VirtualMachineCount"] = $result.VMCount
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "StorageAccountsMultipleVMs"
+ RecommendationSubTypeId = "b70f44fa-5ef9-4180-b2f9-9cc6be07ab3e"
+ RecommendationDescription = "Virtual Machines with unmanaged disks should not share the same Storage Account"
+ RecommendationAction = "Migrate Virtual Machines disks to Managed Disks or keep the disks in a dedicated Storage Account per VM"
+ InstanceId = $result.StorageAccountId
+ InstanceName = $result.StorageAccountName
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "storageaccountsmultiplevms-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMs with no Availability Set..."
+
+$baseQuery = @"
+ $vmsTableName
+ | where TimeGenerated > ago(1d) and isempty(AvailabilitySetId_s) and isempty(Zones_s) and Tags_s !has 'databricks-instance-name'
+ | project TimeGenerated, VMName_s, InstanceId_s, Tags_s, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "VMsNoAvailSet"
+ RecommendationSubTypeId = "998b50d8-e654-417b-ab20-a31cb11629c0"
+ RecommendationDescription = "Virtual Machines should be placed in an Availability Set together with other instances with the same role"
+ RecommendationAction = "Add VM to an Availability Set together with other VMs of the same role"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "vmsnoavailset-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMs alone in an Availability Set..."
+
+$baseQuery = @"
+ $vmsTableName
+ | where TimeGenerated > ago(1d) and isnotempty(AvailabilitySetId_s) and isempty(Zones_s)
+ | distinct TimeGenerated, VMName_s, InstanceId_s, AvailabilitySetId_s, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, Cloud_s, Tags_s
+ | summarize any(TimeGenerated, VMName_s, InstanceId_s, Tags_s), VMCount = count() by AvailabilitySetId_s, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, Cloud_s
+ | where VMCount == 1
+ | project TimeGenerated = any_TimeGenerated, VMName_s = any_VMName_s, InstanceId_s = any_InstanceId_s, Tags_s = any_Tags_s, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "VMsSingleInAvailSet"
+ RecommendationSubTypeId = "fe577af5-dfa2-413a-82a9-f183196c1f49"
+ RecommendationDescription = "Virtual Machines should not be the only instance in an Availability Set"
+ RecommendationAction = "Add more VMs of the same role to the Availability Set"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "vmssingleinavailset-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMs with disks in multiple Storage Accounts..."
+
+$baseQuery = @"
+ $vhdsTableName
+ | where TimeGenerated > ago(1d)
+ | extend StorageAccountName = tostring(split(InstanceId_s, '/')[0])
+ | distinct TimeGenerated, StorageAccountName, OwnerVMId_s
+ | summarize TimeGenerated = any(TimeGenerated), StorageAcccountCount = count() by OwnerVMId_s
+ | where StorageAcccountCount > 1
+ | join kind=inner (
+ $vmsTableName
+ | where TimeGenerated > ago(1d)
+ | distinct VMName_s, InstanceId_s, Cloud_s, TenantGuid_g, SubscriptionGuid_g, ResourceGroupName_s, Tags_s
+ ) on `$left.OwnerVMId_s == `$right.InstanceId_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics -ErrorAction Continue
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["StorageAccountsUsed"] = $result.StorageAcccountCount
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "DisksMultipleStorageAccounts"
+ RecommendationSubTypeId = "024049e7-f63a-4e1c-b620-f011aafbc576"
+ RecommendationDescription = "Each Virtual Machine should have its unmanaged disks stored in a single Storage Account for higher availability and manageability"
+ RecommendationAction = "Migrate Virtual Machines disks to Managed Disks or move VHDs to the same Storage Account"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "disksmultiplesa-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMs using unmanaged disks..."
+
+$baseQuery = @"
+ $vmsTableName
+ | where TimeGenerated > ago(1d) and UsesManagedDisks_s == 'false'
+ | distinct InstanceId_s, VMName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, DeploymentModel_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["DeploymentModel"] = $result.DeploymentModel_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "UnmanagedDisks"
+ RecommendationSubTypeId = "b576a069-b1f2-43a6-9134-5ee75376402a"
+ RecommendationDescription = "Virtual Machines should use Managed Disks for higher availability and manageability"
+ RecommendationAction = "Migrate Virtual Machines disks to Managed Disks"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "unmanageddisks-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for Resource Groups with VMs not in multiple AZs..."
+
+$baseQuery = @"
+ let VMsInZones = materialize($vmsTableName
+ | where TimeGenerated > ago(1d) and isempty(AvailabilitySetId_s) and isnotempty(Zones_s));
+ VMsInZones
+ | distinct ResourceGroupName_s, Zones_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s
+ | summarize ZonesCount=count() by ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Cloud_s
+ | where ZonesCount < 3
+ | join kind=inner (
+ VMsInZones
+ | where PowerState_s has 'running'
+ | distinct VMName_s, ResourceGroupName_s, SubscriptionGuid_g
+ | summarize VMCount=count() by ResourceGroupName_s, SubscriptionGuid_g
+ ) on ResourceGroupName_s and SubscriptionGuid_g
+ | where VMCount == 1 or VMCount > ZonesCount
+ | project-away SubscriptionGuid_g1, ResourceGroupName_s1
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+ | extend InstanceId = strcat('/subscriptions/', SubscriptionGuid_g, '/resourcegroups/', ResourceGroupName_s)
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["ZonesCount"] = $result.ZonesCount
+ $additionalInfoDictionary["VMsCount"] = $result.VMCount
+
+ $fitScore = 4 # a resource group may contain VMs from multiple applications which may lead to false negatives
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachines"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "VMsMultipleAZs"
+ RecommendationSubTypeId = "1a77887c-7375-434e-af19-c2543171e0b8"
+ RecommendationDescription = "Virtual Machines should be placed in multiple Availability Zones"
+ RecommendationAction = "Distribute Virtual Machines instances of the same role in multiple Availability Zones"
+ InstanceId = $result.InstanceId
+ InstanceName = $result.ResourceGroupName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "vmsmultipleazs-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMSS not in multiple AZs..."
+
+$baseQuery = @"
+ $vmssTableName
+ | where TimeGenerated > ago(1d)
+ | where (isempty(Zones_s) and toint(Capacity_s) > 1) or (array_length(split(Zones_s, ' ')) != 3 and toint(Capacity_s) > 2)
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["Zones"] = $result.Zones_s
+ $additionalInfoDictionary["VMSSCapacity"] = $result.Capacity_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachineScaleSets"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "VMSSMultipleAZs"
+ RecommendationSubTypeId = "47e5457c-b345-4372-b536-8887fa8f0298"
+ RecommendationDescription = "Virtual Machine Scale Sets should be placed in multiple Availability Zones"
+ RecommendationAction = "Reprovision the Scale Set leveraging enough Availability Zones"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMSSName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "vmssmultipleazs-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for VMSS using unmanaged disks..."
+
+$baseQuery = @"
+ $vmssTableName
+ | where TimeGenerated > ago(1d) and UsesManagedDisks_s == 'false'
+ | distinct InstanceId_s, VMSSName_s, ResourceGroupName_s, SubscriptionGuid_g, TenantGuid_g, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "HighAvailability"
+ ImpactedArea = "Microsoft.Compute/virtualMachineScaleSets"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "UnmanagedDisksVMSS"
+ RecommendationSubTypeId = "1bf03c4a-c402-4e6c-bf20-051b18af30e2"
+ RecommendationDescription = "Virtual Machine Scale Sets should use Managed Disks for higher availability and manageability"
+ RecommendationAction = "Migrate Virtual Machine Scale Sets disks to Managed Disks"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.VMSSName_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "unmanageddisksvmss-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1
new file mode 100644
index 000000000..b5dc9d01e
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/recommendations/Recommend-VNetOptimizationsToBlobStorage.ps1
@@ -0,0 +1,1329 @@
+$ErrorActionPreference = "Stop"
+
+# Collect generic and recommendation-specific variables
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$workspaceId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceId"
+$workspaceName = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceName"
+$workspaceRG = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceRG"
+$workspaceSubscriptionId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceSubId"
+$workspaceTenantId = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsWorkspaceTenantId"
+
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RecommendationsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "recommendationsexports"
+}
+
+$deploymentDate = Get-AutomationVariable -Name "AzureOptimization_DeploymentDate" # yyyy-MM-dd format
+$deploymentDate = $deploymentDate.Replace('"', "")
+
+$lognamePrefix = Get-AutomationVariable -Name "AzureOptimization_LogAnalyticsLogPrefix" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($lognamePrefix))
+{
+ $lognamePrefix = "AzureOptimization"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+
+$subnetMaxUsedThresholdVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationVNetSubnetMaxUsedPercentageThreshold" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($subnetMaxUsedThresholdVar) -or $subnetMaxUsedThresholdVar -eq 0)
+{
+ $subnetMaxUsedThreshold = 80
+}
+else
+{
+ $subnetMaxUsedThreshold = [int] $subnetMaxUsedThresholdVar
+}
+
+$subnetMinUsedThresholdVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationVNetSubnetMinUsedPercentageThreshold" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($subnetMinUsedThresholdVar) -or $subnetMinUsedThresholdVar -eq 0)
+{
+ $subnetMinUsedThreshold = 5
+}
+else
+{
+ $subnetMinUsedThreshold = [int] $subnetMinUsedThresholdVar
+}
+
+# must be a comma-separated, single-quote enclosed list of subnet names, e.g., 'gatewaysubnet','azurebastionsubnet'
+$subnetFreeExclusions = Get-AutomationVariable -Name "AzureOptimization_RecommendationVNetSubnetUsedPercentageExclusions" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($subnetFreeExclusions))
+{
+ $subnetFreeExclusions = "'gatewaysubnet'"
+}
+
+$subnetMinAgeVar = Get-AutomationVariable -Name "AzureOptimization_RecommendationVNetSubnetEmptyMinAgeInDays" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($subnetMinAgeVar) -or $subnetMinAgeVar -eq 0)
+{
+ $subnetMinAge = 30
+}
+else
+{
+ $subnetMinAge = [int] $subnetMinAgeVar
+}
+
+$consumptionOffsetDays = [int] (Get-AutomationVariable -Name "AzureOptimization_ConsumptionOffsetDays")
+$consumptionOffsetDaysStart = $consumptionOffsetDays + 1
+
+$SqlTimeout = 120
+$LogAnalyticsIngestControlTable = "LogAnalyticsIngestControl"
+
+# Authenticate against Azure
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+Write-Output "Finding tables where recommendations will be generated from..."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = "SELECT * FROM [dbo].[$LogAnalyticsIngestControlTable] WHERE CollectedType IN ('ARGNetworkInterface','ARGVirtualNetwork','ARGResourceContainers', 'ARGNSGRule', 'ARGPublicIP','AzureConsumption')"
+
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $controlRows = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($controlRows) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+$nicsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGNetworkInterface' }).LogAnalyticsSuffix + "_CL"
+$vNetsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGVirtualNetwork' }).LogAnalyticsSuffix + "_CL"
+$subscriptionsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGResourceContainers' }).LogAnalyticsSuffix + "_CL"
+$nsgRulesTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGNSGRule' }).LogAnalyticsSuffix + "_CL"
+$publicIpsTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'ARGPublicIP' }).LogAnalyticsSuffix + "_CL"
+$consumptionTableName = $lognamePrefix + ($controlRows | Where-Object { $_.CollectedType -eq 'AzureConsumption' }).LogAnalyticsSuffix + "_CL"
+
+Write-Output "Will run query against tables $nicsTableName, $nsgRulesTableName, $publicIpsTableName, $subscriptionsTableName, $consumptionTableName and $vNetsTableName"
+
+$Conn.Close()
+$Conn.Dispose()
+
+$recommendationSearchTimeSpan = 30 + $consumptionOffsetDaysStart
+
+# Grab a context reference to the Storage Account where the recommendations file will be stored
+
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+if ($workspaceSubscriptionId -ne $storageAccountSinkSubscriptionId)
+{
+ Select-AzSubscription -SubscriptionId $workspaceSubscriptionId
+}
+
+$recommendationsErrors = 0
+
+Write-Output "Looking for subnets with free IP space less than $subnetMaxUsedThreshold%, excluding $subnetFreeExclusions..."
+
+$baseQuery = @"
+ $vNetsTableName
+ | where TimeGenerated > ago(1d)
+ | where SubnetName_s !in ($subnetFreeExclusions)
+ | extend FreeIPs = toint(SubnetTotalPrefixIPs_s) - toint(SubnetUsedIPs_s)
+ | extend UsedIPPercentage = (todouble(SubnetUsedIPs_s) / todouble(SubnetTotalPrefixIPs_s)) * 100
+ | where UsedIPPercentage >= $subnetMaxUsedThreshold
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/subnets"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["subnetName"] = $result.SubnetName_s
+ $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s
+ $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s
+ $additionalInfoDictionary["subnetFreeIPs"] = $result.FreeIPs
+ $additionalInfoDictionary["subnetUsedIPPercentage"] = $result.UsedIPPercentage
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Network/virtualNetworks"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "HighSubnetIPSpaceUsage"
+ RecommendationSubTypeId = "5292525b-5095-4e52-803e-e17192f1d099"
+ RecommendationDescription = "Subnets with a high IP space usage may constrain operations"
+ RecommendationAction = "Move network devices to a subnet with a larger address space"
+ InstanceId = $result.InstanceId_s
+ InstanceName = "$($result.VNetName_s)/$($result.SubnetName_s)"
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "subnetshighspaceusage-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for subnets with used IP space less than $subnetMinUsedThreshold%..."
+
+$baseQuery = @"
+ $vNetsTableName
+ | where TimeGenerated > ago(1d)
+ | where SubnetName_s !in ($subnetFreeExclusions)
+ | extend FreeIPs = toint(SubnetTotalPrefixIPs_s) - toint(SubnetUsedIPs_s)
+ | extend UsedIPPercentage = (todouble(SubnetUsedIPs_s) / todouble(SubnetTotalPrefixIPs_s)) * 100
+ | where UsedIPPercentage > 0 and UsedIPPercentage <= $subnetMinUsedThreshold
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/subnets"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["subnetName"] = $result.SubnetName_s
+ $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s
+ $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s
+ $additionalInfoDictionary["subnetUsedIPs_s"] = $result.SubnetUsedIPs_s
+ $additionalInfoDictionary["subnetUsedIPPercentage"] = $result.UsedIPPercentage
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Network/virtualNetworks"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "LowSubnetIPSpaceUsage"
+ RecommendationSubTypeId = "0f27b41c-869a-4563-86e9-d1c94232ba81"
+ RecommendationDescription = "Subnets with a low IP space usage are a waste of virtual network address space"
+ RecommendationAction = "Move network devices to a subnet with a smaller address space"
+ InstanceId = $result.InstanceId_s
+ InstanceName = "$($result.VNetName_s)/$($result.SubnetName_s)"
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "subnetslowspaceusage-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for subnets without any device..."
+
+$baseQuery = @"
+ $vNetsTableName
+ | where TimeGenerated > ago(1d)
+ | where toint(SubnetUsedIPs_s) == 0 and toint(SubnetDelegationsCount_s) == 0
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/subnets"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["subnetName"] = $result.SubnetName_s
+ $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s
+ $additionalInfoDictionary["subnetTotalIPs"] = $result.SubnetTotalPrefixIPs_s
+ $additionalInfoDictionary["subnetUsedIPs_s"] = $result.SubnetUsedIPs_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Network/virtualNetworks"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "NoSubnetIPSpaceUsage"
+ RecommendationSubTypeId = "343bbfb7-5bec-4711-8353-398454d42b7b"
+ RecommendationDescription = "Subnets without any IP usage are a waste of virtual network address space"
+ RecommendationAction = "Delete the subnet to reclaim address space"
+ InstanceId = $result.InstanceId_s
+ InstanceName = "$($result.VNetName_s)/$($result.SubnetName_s)"
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "subnetsnospaceusage-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for orphaned NICs..."
+
+$baseQuery = @"
+ $nicsTableName
+ | where TimeGenerated > ago(1d)
+ | where isempty(OwnerVMId_s) and isempty(OwnerPEId_s)
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.InstanceId_s
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["privateIpAddress"] = $result.PrivateIPAddress_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "OperationalExcellence"
+ ImpactedArea = "Microsoft.Network/networkInterfaces"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "OrphanedNIC"
+ RecommendationSubTypeId = "4c5c2d0c-b6a4-4c59-bc18-6fff6c1f5b23"
+ RecommendationDescription = "Orphaned Network Interfaces (without owner VM or PE) unnecessarily consume IP address space"
+ RecommendationAction = "Delete the NIC to reclaim address space"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.Name_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "orphanednics-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for NSG rules referring empty or removed subnets..."
+
+$baseQuery = @"
+ let MinimumSubnetAge = $($subnetMinAge)d;
+ let SubnetsToday = materialize( $vNetsTableName
+ | where TimeGenerated > ago(1d)
+ | extend SubnetId = tolower(strcat(InstanceId_s, '/subnets/', SubnetName_s))
+ | distinct SubnetId, SubnetPrefix_s, SubnetUsedIPs_s, SubnetDelegationsCount_s );
+ let SubnetsBefore = materialize( $vNetsTableName
+ | where TimeGenerated < ago(1d)
+ | extend SubnetId = tolower(strcat(InstanceId_s, '/subnets/', SubnetName_s))
+ | summarize ExistsSince = min(todatetime(StatusDate_s)) by SubnetId, SubnetPrefix_s );
+ let SubnetsExistingLongEnoughIds = SubnetsBefore | where ExistsSince < ago(MinimumSubnetAge) | distinct SubnetId;
+ let EmptySubnets = SubnetsToday | where SubnetId in (SubnetsExistingLongEnoughIds) and toint(SubnetUsedIPs_s) == 0 and toint(SubnetDelegationsCount_s) == 0;
+ let SubnetsTodayIds = SubnetsToday | distinct SubnetId;
+ let SubnetsTodayPrefixes = SubnetsToday | distinct SubnetPrefix_s;
+ let RemovedSubnets = SubnetsBefore | where SubnetId !in (SubnetsTodayIds) and SubnetPrefix_s !in (SubnetsTodayPrefixes);
+ let NSGRules = materialize($nsgRulesTableName
+ | where TimeGenerated > ago(1d)
+ | extend SourceAddresses = split(RuleSourceAddresses_s,',')
+ | mvexpand SourceAddresses
+ | extend SourceAddress = tostring(SourceAddresses)
+ | extend DestinationAddresses = split(RuleDestinationAddresses_s,',')
+ | mvexpand DestinationAddresses
+ | extend DestinationAddress = tostring(DestinationAddresses)
+ | project NSGId = InstanceId_s, RuleName_s, DestinationAddress, SourceAddress, SubscriptionGuid_g, Cloud_s, TenantGuid_g, ResourceGroupName_s, NSGName = NSGName_s, Tags_s);
+ let EmptySubnetsAsSource = EmptySubnets
+ | join kind=inner ( NSGRules ) on `$left.SubnetPrefix_s == `$right.SourceAddress
+ | extend SubnetState = 'empty';
+ let EmptySubnetsAsDestination = EmptySubnets
+ | join kind=inner ( NSGRules ) on `$left.SubnetPrefix_s == `$right.DestinationAddress
+ | extend SubnetState = 'empty';
+ let RemovedSubnetsAsSource = RemovedSubnets
+ | join kind=inner ( NSGRules ) on `$left.SubnetPrefix_s == `$right.SourceAddress
+ | extend SubnetState = 'unexisting';
+ let RemovedSubnetsAsDestination = RemovedSubnets
+ | join kind=inner ( NSGRules ) on `$left.SubnetPrefix_s == `$right.DestinationAddress
+ | extend SubnetState = 'unexisting';
+ EmptySubnetsAsSource
+ | union EmptySubnetsAsDestination
+ | union RemovedSubnetsAsSource
+ | union RemovedSubnetsAsDestination
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+ | where isnotempty(SubnetPrefix_s)
+ | distinct NSGId, NSGName, RuleName_s, SubscriptionGuid_g, SubscriptionName, ResourceGroupName_s, TenantGuid_g, Cloud_s, SubnetId, SubnetPrefix_s, SubnetState, Tags_s
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.NSGId
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["subnetId"] = $result.SubnetId
+ $additionalInfoDictionary["subnetPrefix"] = $result.SubnetPrefix_s
+ $additionalInfoDictionary["subnetState"] = $result.SubnetState
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Security"
+ ImpactedArea = "Microsoft.Network/networkSecurityGroups"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "NSGRuleForEmptyOrUnexistingSubnet"
+ RecommendationSubTypeId = "b5491cde-f76c-4423-8c4c-89e3558ff2f2"
+ RecommendationDescription = "NSG rules referring to empty or unexisting subnets"
+ RecommendationAction = "Update or remove the NSG rule to improve your network security posture"
+ InstanceId = $result.NSGId
+ InstanceName = "$($result.NSGName)/$($result.RuleName_s)"
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "nsgrules-emptyunexistingsubnets-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for NSG rules referring orphan or removed NICs..."
+
+$baseQuery = @"
+ let NICsToday = materialize( $nicsTableName
+ | where TimeGenerated > ago(1d)
+ | extend NICId = tolower(InstanceId_s)
+ | distinct NICId, PrivateIPAddress_s, PublicIPId_s, OwnerVMId_s, OwnerPEId_s );
+ let NICsBefore = $nicsTableName
+ | where TimeGenerated < ago(1d)
+ | extend NICId = tolower(InstanceId_s)
+ | distinct NICId, PrivateIPAddress_s, PublicIPId_s;
+ let OrphanNICs = NICsToday
+ | where isempty(OwnerVMId_s) and isempty(OwnerPEId_s)
+ | extend PublicIPId_s = tolower(PublicIPId_s)
+ | join kind=leftouter (
+ $publicIpsTableName
+ | where TimeGenerated > ago(1d)
+ | project PublicIPId_s = tolower(InstanceId_s), PublicIPAddress = IPAddress
+ ) on PublicIPId_s;
+ let NICsTodayIds = NICsToday | distinct NICId;
+ let NICsTodayIPs = NICsToday | distinct PrivateIPAddress_s;
+ let RemovedNICs = NICsBefore
+ | where NICId !in (NICsTodayIds) and PrivateIPAddress_s !in (NICsTodayIPs)
+ | extend PublicIPId_s = tolower(PublicIPId_s)
+ | join kind=leftouter (
+ $publicIpsTableName
+ | where TimeGenerated < ago(1d)
+ | project PublicIPId_s = tolower(InstanceId_s), PublicIPAddress = IPAddress
+ ) on PublicIPId_s;
+ let NSGRules = materialize($nsgRulesTableName
+ | where TimeGenerated > ago(1d)
+ | extend SourceAddresses = split(RuleSourceAddresses_s,',')
+ | mvexpand SourceAddresses
+ | extend SourceAddress = replace('/32','',tostring(SourceAddresses))
+ | extend DestinationAddresses = split(RuleDestinationAddresses_s,',')
+ | mvexpand DestinationAddresses
+ | extend DestinationAddress = replace('/32','',tostring(DestinationAddresses))
+ | project NSGId = InstanceId_s, RuleName_s, DestinationAddress, SourceAddress, SubscriptionGuid_g, Cloud_s, TenantGuid_g, ResourceGroupName_s, NSGName = NSGName_s, Tags_s);
+ let OrphanNICsAsPrivateSource = OrphanNICs
+ | join kind=inner ( NSGRules ) on `$left.PrivateIPAddress_s == `$right.SourceAddress
+ | extend NICState = 'orphan', IPAddress = PrivateIPAddress_s;
+ let OrphanNICsAsPublicSource = OrphanNICs
+ | join kind=inner ( NSGRules ) on `$left.PublicIPAddress == `$right.SourceAddress
+ | extend NICState = 'orphan', IPAddress = PublicIPAddress;
+ let OrphanNICsAsPrivateDestination = OrphanNICs
+ | join kind=inner ( NSGRules ) on `$left.PrivateIPAddress_s == `$right.DestinationAddress
+ | extend NICState = 'orphan', IPAddress = PrivateIPAddress_s;
+ let OrphanNICsAsPublicDestination = OrphanNICs
+ | join kind=inner ( NSGRules ) on `$left.PublicIPAddress == `$right.DestinationAddress
+ | extend NICState = 'orphan', IPAddress = PublicIPAddress;
+ let RemovedNICsAsPrivateSource = RemovedNICs
+ | join kind=inner ( NSGRules ) on `$left.PrivateIPAddress_s == `$right.SourceAddress
+ | extend NICState = 'unexisting', IPAddress = PrivateIPAddress_s;
+ let RemovedNICsAsPublicSource = RemovedNICs
+ | join kind=inner ( NSGRules ) on `$left.PublicIPAddress == `$right.SourceAddress
+ | extend NICState = 'unexisting', IPAddress = PublicIPAddress;
+ let RemovedNICsAsPrivateDestination = RemovedNICs
+ | join kind=inner ( NSGRules ) on `$left.PrivateIPAddress_s == `$right.DestinationAddress
+ | extend NICState = 'unexisting', IPAddress = PrivateIPAddress_s;
+ let RemovedNICsAsPublicDestination = RemovedNICs
+ | join kind=inner ( NSGRules ) on `$left.PublicIPAddress == `$right.DestinationAddress
+ | extend NICState = 'unexisting', IPAddress = PublicIPAddress;
+ OrphanNICsAsPrivateSource
+ | union OrphanNICsAsPublicSource
+ | union OrphanNICsAsPrivateDestination
+ | union OrphanNICsAsPublicDestination
+ | union RemovedNICsAsPrivateSource
+ | union RemovedNICsAsPublicSource
+ | union RemovedNICsAsPrivateDestination
+ | union RemovedNICsAsPublicDestination
+ | where isnotempty(IPAddress)
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+ | distinct NSGId, NSGName, RuleName_s, SubscriptionGuid_g, SubscriptionName, ResourceGroupName_s, TenantGuid_g, Cloud_s, NICId, IPAddress, NICState, Tags_s
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.NSGId
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["nicId"] = $result.NICId
+ $additionalInfoDictionary["ipAddress"] = $result.IPAddress
+ $additionalInfoDictionary["nicState"] = $result.NICState
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Security"
+ ImpactedArea = "Microsoft.Network/networkSecurityGroups"
+ Impact = "Medium"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "NSGRuleForOrphanOrUnexistingNIC"
+ RecommendationSubTypeId = "3dc1d1f8-19ef-4572-9c9d-78d62831f55a"
+ RecommendationDescription = "NSG rules referring to orphan or unexisting NICs"
+ RecommendationAction = "Update or remove the NSG rule to improve your network security posture"
+ InstanceId = $result.NSGId
+ InstanceName = "$($result.NSGName)/$($result.RuleName_s)"
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "nsgrules-orphanunexistingnics-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for NSG rules referring orphan or removed Public IPs..."
+
+$baseQuery = @"
+ let PIPsToday = materialize( $publicIpsTableName
+ | where TimeGenerated > ago(1d)
+ | extend PublicIPId = tolower(InstanceId_s)
+ | distinct PublicIPId, AssociatedResourceId_s, AllocationMethod_s, IPAddress );
+ let PIPsBefore = materialize( $publicIpsTableName
+ | where TimeGenerated < ago(1d)
+ | extend PublicIPId = tolower(InstanceId_s)
+ | distinct PublicIPId, IPAddress );
+ let OrphanStaticPIPs = PIPsToday
+ | where isempty(AssociatedResourceId_s) and AllocationMethod_s == 'static';
+ let OrphanDynamicPIPIDs = PIPsToday
+ | where isempty(AssociatedResourceId_s) and AllocationMethod_s == 'dynamic'
+ | distinct PublicIPId;
+ let PIPsTodayIds = PIPsToday | distinct PublicIPId;
+ let PIPsTodayIPs = PIPsToday | distinct IPAddress;
+ let OrphanDynamicPIPs = PIPsBefore
+ | where PublicIPId in (OrphanDynamicPIPIDs) and isnotempty(IPAddress) and IPAddress !in (PIPsTodayIPs);
+ let RemovedPIPs = PIPsBefore
+ | where PublicIPId !in (PIPsTodayIds) and isnotempty(IPAddress) and IPAddress !in (PIPsTodayIPs);
+ let NSGRules = materialize( $nsgRulesTableName
+ | where TimeGenerated > ago(1d)
+ | extend SourceAddresses = split(RuleSourceAddresses_s,',')
+ | mvexpand SourceAddresses
+ | extend SourceAddress = replace('/32','',tostring(SourceAddresses))
+ | extend DestinationAddresses = split(RuleDestinationAddresses_s,',')
+ | mvexpand DestinationAddresses
+ | extend DestinationAddress = replace('/32','',tostring(DestinationAddresses))
+ | project NSGId = InstanceId_s, RuleName_s, DestinationAddress, SourceAddress, SubscriptionGuid_g, Cloud_s, TenantGuid_g, ResourceGroupName_s, NSGName = NSGName_s, Tags_s);
+ let OrphanStaticPIPsAsSource = OrphanStaticPIPs
+ | join kind=inner ( NSGRules ) on `$left.IPAddress == `$right.SourceAddress
+ | extend PIPState = 'orphan';
+ let OrphanStaticPIPsAsDestination = OrphanStaticPIPs
+ | join kind=inner ( NSGRules ) on `$left.IPAddress == `$right.DestinationAddress
+ | extend PIPState = 'orphan';
+ let OrphanDynamicPIPsAsSource = OrphanDynamicPIPs
+ | join kind=inner ( NSGRules ) on `$left.IPAddress == `$right.SourceAddress
+ | extend PIPState = 'orphan';
+ let OrphanDynamicPIPsAsDestination = OrphanDynamicPIPs
+ | join kind=inner ( NSGRules ) on `$left.IPAddress == `$right.DestinationAddress
+ | extend PIPState = 'orphan';
+ let RemovedPIPsAsSource = RemovedPIPs
+ | join kind=inner ( NSGRules ) on `$left.IPAddress == `$right.SourceAddress
+ | extend PIPState = 'unexisting';
+ let RemovedPIPsAsDestination = RemovedPIPs
+ | join kind=inner ( NSGRules ) on `$left.IPAddress == `$right.DestinationAddress
+ | extend PIPState = 'unexisting';
+ OrphanStaticPIPsAsSource
+ | union OrphanDynamicPIPsAsSource
+ | union OrphanStaticPIPsAsDestination
+ | union OrphanDynamicPIPsAsDestination
+ | union RemovedPIPsAsSource
+ | union RemovedPIPsAsDestination
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+ | distinct NSGId, NSGName, RuleName_s, SubscriptionGuid_g, SubscriptionName, ResourceGroupName_s, TenantGuid_g, Cloud_s, PublicIPId, IPAddress, PIPState, AllocationMethod_s, Tags_s
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ switch ($result.Cloud_s)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+
+ $queryInstanceId = $result.NSGId
+ $detailsURL = "https://portal.azure.$azureTld/#@$($result.TenantGuid_g)/resource/$queryInstanceId/overview"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["publicIPId"] = $result.PublicIPId
+ $additionalInfoDictionary["ipAddress"] = $result.IPAddress
+ $additionalInfoDictionary["publicIPState"] = $result.PIPState
+ $additionalInfoDictionary["allocationMethod"] = $result.AllocationMethod_s
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Security"
+ ImpactedArea = "Microsoft.Network/networkSecurityGroups"
+ Impact = "High"
+ RecommendationType = "BestPractices"
+ RecommendationSubType = "NSGRuleForOrphanOrUnexistingPublicIP"
+ RecommendationSubTypeId = "fe40cbe7-bdee-4cce-b072-cf25e1247b7a"
+ RecommendationDescription = "NSG rules referring to orphan or unexisting Public IPs"
+ RecommendationAction = "Update or remove the NSG rule to improve your network security posture"
+ InstanceId = $result.NSGId
+ InstanceName = "$($result.NSGName)/$($result.RuleName_s)"
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "nsgrules-orphanunexistingpublicips-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+Write-Output "Looking for orphaned Public IPs..."
+
+$baseQuery = @"
+ let interval = 30d;
+ let etime = todatetime(toscalar($consumptionTableName | where todatetime(Date_s) < now() and todatetime(Date_s) > ago(30d) | summarize max(todatetime(Date_s))));
+ let stime = etime-interval;
+ $publicIpsTableName
+ | where TimeGenerated > ago(1d) and isempty(AssociatedResourceId_s)
+ | distinct Name_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, AllocationMethod_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | where todatetime(Date_s) between (stime..etime)
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize Last30DaysCost=sum(todouble(CostInBillingCurrency_s)) by Name_s, InstanceId_s, SubscriptionGuid_g, TenantGuid_g, ResourceGroupName_s, SkuName_s, AllocationMethod_s, Tags_s, Cloud_s
+ | join kind=leftouter (
+ $subscriptionsTableName
+ | where TimeGenerated > ago(1d)
+ | where ContainerType_s =~ 'microsoft.resources/subscriptions'
+ | project SubscriptionGuid_g, SubscriptionName = ContainerName_s
+ ) on SubscriptionGuid_g
+"@
+
+try
+{
+ $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $baseQuery -Timespan (New-TimeSpan -Days $recommendationSearchTimeSpan) -Wait 600 -IncludeStatistics
+ if ($queryResults)
+ {
+ $results = [System.Linq.Enumerable]::ToArray($queryResults.Results)
+ }
+}
+catch
+{
+ Write-Warning -Message "Query failed. Debug the following query in the AOE Log Analytics workspace: $baseQuery"
+ Write-Warning -Message $error[0]
+ $recommendationsErrors++
+}
+
+Write-Output "Query finished with $($results.Count) results."
+
+Write-Output "Query statistics: $($queryResults.Statistics.query)"
+
+# Build the recommendations objects
+
+$recommendations = @()
+$datetime = (get-date).ToUniversalTime()
+$timestamp = $datetime.ToString("yyyy-MM-ddTHH:mm:00.000Z")
+
+foreach ($result in $results)
+{
+ $queryInstanceId = $result.InstanceId_s
+ $queryText = @"
+ $publicIpsTableName
+ | where InstanceId_s == '$queryInstanceId' and isempty(AssociatedResourceId_s)
+ | distinct InstanceId_s, Name_s, AllocationMethod_s, SkuName_s, TimeGenerated
+ | summarize LastAttachedDate = min(TimeGenerated) by InstanceId_s, Name_s, AllocationMethod_s, SkuName_s
+ | join kind=leftouter (
+ $consumptionTableName
+ | project InstanceId_s=tolower(ResourceId), CostInBillingCurrency_s, Date_s
+ ) on InstanceId_s
+ | summarize CostsSinceDetached = sumif(todouble(CostInBillingCurrency_s), todatetime(Date_s) > LastAttachedDate) by Name_s, LastAttachedDate, AllocationMethod_s, SkuName_s
+"@
+ $encodedQuery = [System.Uri]::EscapeDataString($queryText)
+ $detailsQueryStart = $deploymentDate
+ $detailsQueryEnd = $datetime.AddDays(8).ToString("yyyy-MM-dd")
+ switch ($cloudEnvironment)
+ {
+ "AzureCloud" { $azureTld = "com" }
+ "AzureChinaCloud" { $azureTld = "cn" }
+ "AzureUSGovernment" { $azureTld = "us" }
+ default { $azureTld = "com" }
+ }
+ $detailsURL = "https://portal.azure.$azureTld#@$workspaceTenantId/blade/Microsoft_Azure_Monitoring_Logs/LogsBlade/resourceId/%2Fsubscriptions%2F$workspaceSubscriptionId%2Fresourcegroups%2F$workspaceRG%2Fproviders%2Fmicrosoft.operationalinsights%2Fworkspaces%2F$workspaceName/source/LogsBlade.AnalyticsShareLinkToQuery/query/$encodedQuery/timespan/$($detailsQueryStart)T00%3A00%3A00.000Z%2F$($detailsQueryEnd)T00%3A00%3A00.000Z"
+
+ $additionalInfoDictionary = @{}
+
+ $additionalInfoDictionary["currentSku"] = $result.SkuName_s
+ $additionalInfoDictionary["allocationMethod"] = $result.AllocationMethod_s
+ $additionalInfoDictionary["CostsAmount"] = [double] $result.Last30DaysCost
+ $additionalInfoDictionary["savingsAmount"] = [double] $result.Last30DaysCost
+
+ $fitScore = 5
+
+ $tags = @{}
+
+ if (-not([string]::IsNullOrEmpty($result.Tags_s)))
+ {
+ $tagPairs = $result.Tags_s.Substring(2, $result.Tags_s.Length - 3).Split(';')
+ foreach ($tagPairString in $tagPairs)
+ {
+ $tagPair = $tagPairString.Split('=')
+ if (-not([string]::IsNullOrEmpty($tagPair[0])) -and -not([string]::IsNullOrEmpty($tagPair[1])))
+ {
+ $tagName = $tagPair[0].Trim()
+ $tagValue = $tagPair[1].Trim()
+ $tags[$tagName] = $tagValue
+ }
+ }
+ }
+
+ $recommendation = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $result.Cloud_s
+ Category = "Cost"
+ ImpactedArea = "Microsoft.Network/publicIPAddresses"
+ Impact = "Low"
+ RecommendationType = "Saving"
+ RecommendationSubType = "OrphanedPublicIP"
+ RecommendationSubTypeId = "3125883f-8b9f-4bde-a0ff-6c739858c6e1"
+ RecommendationDescription = "Orphaned Public IP (without owner resource) incur in unnecessary costs"
+ RecommendationAction = "Delete the Public IP or change its configuration to dynamic allocation"
+ InstanceId = $result.InstanceId_s
+ InstanceName = $result.Name_s
+ AdditionalInfo = $additionalInfoDictionary
+ ResourceGroup = $result.ResourceGroupName_s
+ SubscriptionGuid = $result.SubscriptionGuid_g
+ SubscriptionName = $result.SubscriptionName
+ TenantGuid = $result.TenantGuid_g
+ FitScore = $fitScore
+ Tags = $tags
+ DetailsURL = $detailsURL
+ }
+
+ $recommendations += $recommendation
+}
+
+# Export the recommendations as JSON to blob storage
+
+$fileDate = $datetime.ToString("yyyy-MM-dd")
+$jsonExportPath = "orphanedpublicips-$fileDate.json"
+$recommendations | ConvertTo-Json | Out-File $jsonExportPath
+
+$jsonBlobName = $jsonExportPath
+$jsonProperties = @{"ContentType" = "application/json"};
+Set-AzStorageBlobContent -File $jsonExportPath -Container $storageAccountSinkContainer -Properties $jsonProperties -Blob $jsonBlobName -Context $saCtx -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Uploaded $jsonBlobName to Blob Storage..."
+
+Remove-Item -Path $jsonExportPath -Force
+
+$now = (Get-Date).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'")
+Write-Output "[$now] Removed $jsonExportPath from local disk..."
+
+if ($recommendationsErrors -gt 0)
+{
+ throw "Some of the recommendations queries failed. Please, review the job logs for additional information."
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1
new file mode 100644
index 000000000..3627a2578
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-AdvisorRightSizeFiltered.ps1
@@ -0,0 +1,225 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [bool] $Simulate = $true
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "remediationlogs"
+}
+
+$minFitScore = [double] (Get-AutomationVariable -Name "AzureOptimization_RemediateRightSizeMinFitScore" -ErrorAction SilentlyContinue)
+if (-not($minFitScore -gt 0.0)) {
+ $minFitScore = 5.0
+}
+
+$minWeeksInARow = [int] (Get-AutomationVariable -Name "AzureOptimization_RemediateRightSizeMinWeeksInARow" -ErrorAction SilentlyContinue)
+if (-not($minWeeksInARow -gt 0)) {
+ $minWeeksInARow = 4
+}
+
+$tagsFilter = Get-AutomationVariable -Name "AzureOptimization_RemediateRightSizeTagsFilter" -ErrorAction SilentlyContinue
+# example: '[ { "tagName": "a", "tagValue": "b" }, { "tagName": "c", "tagValue": "d" } ]'
+if (-not($tagsFilter)) {
+ $tagsFilter = '{}'
+}
+$tagsFilter = $tagsFilter | ConvertFrom-Json
+
+$rightSizeRecommendationId = Get-AutomationVariable -Name "AzureOptimization_RecommendationAdvisorCostRightSizeId" -ErrorAction SilentlyContinue
+if (-not($rightSizeRecommendationId)) {
+ $rightSizeRecommendationId = 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974'
+}
+
+$SqlTimeout = 0
+$recommendationsTable = "Recommendations"
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+# get reference to storage sink
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+Write-Output "Querying for right-size recommendations with fit score >= $minFitScore made consecutively for the last $minWeeksInARow weeks."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = @"
+ SELECT InstanceId, Cloud, TenantGuid, JSON_VALUE(AdditionalInfo, '`$.currentSku') AS CurrentSKU, JSON_VALUE(AdditionalInfo, '`$.targetSku') AS TargetSKU, COUNT(InstanceId)
+ FROM [dbo].[$recommendationsTable]
+ WHERE RecommendationSubTypeId = '$rightSizeRecommendationId' AND FitScore >= $minFitScore AND GeneratedDate >= GETDATE()-(7*$minWeeksInARow)
+ GROUP BY InstanceId, Cloud, TenantGuid, JSON_VALUE(AdditionalInfo, '`$.currentSku'), JSON_VALUE(AdditionalInfo, '`$.targetSku')
+ HAVING COUNT(InstanceId) >= $minWeeksInARow
+"@
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $vmsToRightSize = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($vmsToRightSize) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+Write-Output "Found $($vmsToRightSize.Rows.Count) remediation opportunities."
+
+$Conn.Close()
+$Conn.Dispose()
+
+$logEntries = @()
+
+$datetime = (get-date).ToUniversalTime()
+$hour = $datetime.Hour
+$min = $datetime.Minute
+$timestamp = $datetime.ToString("yyyy-MM-ddT$($hour):$($min):00.000Z")
+
+$ctx = Get-AzContext
+
+foreach ($vm in $vmsToRightSize.Rows)
+{
+ $isEligible = $false
+ $logDetails = $null
+ if ([string]::IsNullOrEmpty($tagsFilter))
+ {
+ $isEligible = $true
+ }
+ else
+ {
+ $vmTags = Get-AzTag -ResourceId $vm.InstanceId -ErrorAction SilentlyContinue
+ if ($vmTags)
+ {
+ foreach ($tagFilter in $tagsFilter)
+ {
+ if ($vmTags.Properties.TagsProperty.($tagFilter.tagName) -eq $tagFilter.tagValue)
+ {
+ $isEligible = $true
+ }
+ else
+ {
+ $isEligible = $false
+ break
+ }
+ }
+ }
+ }
+
+ $subscriptionId = $vm.InstanceId.Split("/")[2]
+ $resourceGroup = $vm.InstanceId.Split("/")[4]
+ $instanceName = $vm.InstanceId.Split("/")[8]
+
+ if ($isEligible)
+ {
+ Write-Output "Downsizing (SIMULATE=$Simulate) $($vm.InstanceId) to $($vm.TargetSKU)..."
+ if (-not($Simulate) -and $ctx.Environment.Name -eq $vm.Cloud -and $ctx.Tenant.Id -eq $vm.TenantGuid)
+ {
+ if ($ctx.Subscription.Id -ne $subscriptionId)
+ {
+ Select-AzSubscription -SubscriptionId $subscriptionId | Out-Null
+ $ctx = Get-AzContext
+ }
+ $vmObj = Get-AzVM -ResourceGroupName $resourceGroup -VMName $instanceName -ErrorAction SilentlyContinue
+ if ($vmObj)
+ {
+ $vmObj.HardwareProfile.VmSize = $vm.TargetSKU
+ Update-AzVM -VM $vmObj -ResourceGroupName $resourceGroup
+ }
+ else
+ {
+ Write-Output "Skipping as VM was already removed."
+ }
+ }
+ else
+ {
+ Write-Output "Did not apply remediation."
+ }
+ }
+
+ $logDetails = @{
+ IsEligible = $isEligible
+ CurrentSku = $vm.CurrentSKU
+ TargetSku = $vm.TargetSKU
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $vm.Cloud
+ TenantGuid = $vm.TenantGuid
+ SubscriptionGuid = $subscriptionId
+ ResourceGroupName = $resourceGroup.ToLower()
+ InstanceName = $instanceName.ToLower()
+ InstanceId = $vm.InstanceId.ToLower()
+ Simulate = $Simulate
+ LogDetails = $logDetails | ConvertTo-Json -Compress
+ RecommendationSubTypeId = $rightSizeRecommendationId
+ }
+
+ $logEntries += $logentry
+}
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-rightsizefiltered.csv"
+
+$logEntries | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1
new file mode 100644
index 000000000..b22c1dc30
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-LongDeallocatedVMsFiltered.ps1
@@ -0,0 +1,287 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [bool] $Simulate = $true
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "remediationlogs"
+}
+
+$minFitScore = [double] (Get-AutomationVariable -Name "AzureOptimization_RemediateLongDeallocatedVMsMinFitScore" -ErrorAction SilentlyContinue)
+if (-not($minFitScore -gt 0.0)) {
+ $minFitScore = 5.0
+}
+
+$minWeeksInARow = [int] (Get-AutomationVariable -Name "AzureOptimization_RemediateLongDeallocatedVMsMinWeeksInARow" -ErrorAction SilentlyContinue)
+if (-not($minWeeksInARow -gt 0)) {
+ $minWeeksInARow = 4
+}
+
+$tagsFilter = Get-AutomationVariable -Name "AzureOptimization_RemediateLongDeallocatedVMsTagsFilter" -ErrorAction SilentlyContinue
+# example: '[ { "tagName": "a", "tagValue": "b" }, { "tagName": "c", "tagValue": "d" } ]'
+if (-not($tagsFilter)) {
+ $tagsFilter = '{}'
+}
+$tagsFilter = $tagsFilter | ConvertFrom-Json
+
+$recommendationId = Get-AutomationVariable -Name "AzureOptimization_RecommendationLongDeallocatedVMsId" -ErrorAction SilentlyContinue
+if (-not($recommendationId)) {
+ $recommendationId = 'c320b790-2e58-452a-aa63-7b62c383ad8a'
+}
+
+$SqlTimeout = 0
+$recommendationsTable = "Recommendations"
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+# get reference to storage sink
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+Write-Output "Querying for long-deallocated recommendations with fit score >= $minFitScore made consecutively for the last $minWeeksInARow weeks."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = @"
+ SELECT InstanceId, Cloud, TenantGuid, COUNT(InstanceId)
+ FROM [dbo].[$recommendationsTable]
+ WHERE RecommendationSubTypeId = '$recommendationId' AND FitScore >= $minFitScore AND GeneratedDate >= GETDATE()-(7*$minWeeksInARow)
+ GROUP BY InstanceId, Cloud, TenantGuid
+ HAVING COUNT(InstanceId) >= $minWeeksInARow
+"@
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $deallocatedVMs = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($deallocatedVMs) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+Write-Output "Found $($deallocatedVMs.Rows.Count) remediation opportunities."
+
+$Conn.Close()
+$Conn.Dispose()
+
+$logEntries = @()
+
+$datetime = (get-date).ToUniversalTime()
+$hour = $datetime.Hour
+$min = $datetime.Minute
+$timestamp = $datetime.ToString("yyyy-MM-ddT$($hour):$($min):00.000Z")
+
+$ctx = Get-AzContext
+
+foreach ($vm in $deallocatedVMs.Rows)
+{
+ $isEligible = $false
+ $logDetails = $null
+ if ([string]::IsNullOrEmpty($tagsFilter))
+ {
+ $isEligible = $true
+ }
+ else
+ {
+ $vmTags = Get-AzTag -ResourceId $vm.InstanceId -ErrorAction SilentlyContinue
+ if ($vmTags)
+ {
+ foreach ($tagFilter in $tagsFilter)
+ {
+ if ($vmTags.Properties.TagsProperty.($tagFilter.tagName) -eq $tagFilter.tagValue)
+ {
+ $isEligible = $true
+ }
+ else
+ {
+ $isEligible = $false
+ break
+ }
+ }
+ }
+ }
+
+ $subscriptionId = $vm.InstanceId.Split("/")[2]
+ $resourceGroup = $vm.InstanceId.Split("/")[4]
+ $instanceName = $vm.InstanceId.Split("/")[8]
+
+ if ($isEligible)
+ {
+ $vmState = "Unknown"
+ $hasManagedDisks = $false
+ $osDiskSkuName = "Unknown"
+ $dataDisksSkuNames = "Unknown"
+
+ Write-Output "Downsizing (SIMULATE=$Simulate) $($vm.InstanceId) disks to Standard_LRS..."
+ if ($ctx.Environment.Name -eq $vm.Cloud -and $ctx.Tenant.Id -eq $vm.TenantGuid)
+ {
+ if ($ctx.Subscription.Id -ne $subscriptionId)
+ {
+ Select-AzSubscription -SubscriptionId $subscriptionId | Out-Null
+ $ctx = Get-AzContext
+ }
+ $vmObj = Get-AzVM -ResourceGroupName $resourceGroup -VMName $instanceName -Status -ErrorAction SilentlyContinue
+ if ($vmObj.PowerState -eq 'VM deallocated')
+ {
+ $vmState = "Deallocated"
+ $osDiskId = $vmObj.StorageProfile.OsDisk.ManagedDisk.Id
+ $dataDiskIds = $vmObj.StorageProfile.DataDisks.ManagedDisk.Id
+ if ($osDiskId)
+ {
+ $hasManagedDisks = $true
+ $disk = Get-AzDisk -ResourceGroupName $osDiskId.Split("/")[4] -DiskName $osDiskId.Split("/")[8]
+ $osDiskSkuName = $disk.Sku.Name
+ if (-not($Simulate) -and $disk.Sku.Name -ne 'Standard_LRS')
+ {
+ $disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS')
+ $disk | Update-AzDisk | Out-Null
+ }
+ else
+ {
+ Write-Output "Skipping as OS disk is already HDD."
+ }
+ foreach ($dataDiskId in $dataDiskIds)
+ {
+ $disk = Get-AzDisk -ResourceGroupName $dataDiskId.Split("/")[4] -DiskName $dataDiskId.Split("/")[8]
+ if ($dataDisksSkuNames -eq 'Unknown')
+ {
+ $dataDisksSkuNames = $disk.Sku.Name
+ }
+ else
+ {
+ if ($dataDisksSkuNames -notlike "*$($disk.Sku.Name)*")
+ {
+ $dataDisksSkuNames += ",$($disk.Sku.Name)"
+ }
+ }
+
+ if (-not($Simulate) -and $disk.Sku.Name -ne 'Standard_LRS')
+ {
+ $disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS')
+ $disk | Update-AzDisk | Out-Null
+ }
+ else
+ {
+ Write-Output "Skipping as Data disk is already HDD."
+ }
+ }
+ }
+ else
+ {
+ Write-Output "Skipping as disks are not Managed Disks."
+ $hasManagedDisks = $false
+ }
+ }
+ else
+ {
+ if ($vmObj)
+ {
+ Write-Output "Skipping as VM is not deallocated."
+ $vmState = "Running"
+ }
+ else
+ {
+ Write-Output "Skipping as VM was already removed."
+ $vmState = "Removed"
+ }
+ }
+ }
+ else
+ {
+ Write-Output "Could not apply remediation as VM is in another cloud/tenant."
+ }
+ }
+
+ $logDetails = @{
+ IsEligible = $isEligible
+ VMState = $vmState
+ HasManagedDisks = $hasManagedDisks
+ OsDiskSkuName = $osDiskSkuName
+ DataDisksSkuName = $dataDisksSkuNames
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $vm.Cloud
+ TenantGuid = $vm.TenantGuid
+ SubscriptionGuid = $subscriptionId
+ ResourceGroupName = $resourceGroup.ToLower()
+ InstanceName = $instanceName.ToLower()
+ InstanceId = $vm.InstanceId.ToLower()
+ Simulate = $Simulate
+ LogDetails = $logDetails | ConvertTo-Json -Compress
+ RecommendationSubTypeId = $recommendationId
+ }
+
+ $logEntries += $logentry
+}
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-longdeallocatedvmsfiltered.csv"
+
+$logEntries | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
diff --git a/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1 b/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1
new file mode 100644
index 000000000..69c462294
--- /dev/null
+++ b/docs/deploy/optimization-engine/0.8/runbooks/remediations/Remediate-UnattachedDisksFiltered.ps1
@@ -0,0 +1,266 @@
+param(
+ [Parameter(Mandatory = $false)]
+ [bool] $Simulate = $true
+)
+
+$ErrorActionPreference = "Stop"
+
+$cloudEnvironment = Get-AutomationVariable -Name "AzureOptimization_CloudEnvironment" -ErrorAction SilentlyContinue # AzureCloud|AzureChinaCloud
+if ([string]::IsNullOrEmpty($cloudEnvironment))
+{
+ $cloudEnvironment = "AzureCloud"
+}
+$authenticationOption = Get-AutomationVariable -Name "AzureOptimization_AuthenticationOption" -ErrorAction SilentlyContinue # ManagedIdentity|UserAssignedManagedIdentity
+if ([string]::IsNullOrEmpty($authenticationOption))
+{
+ $authenticationOption = "ManagedIdentity"
+}
+if ($authenticationOption -eq "UserAssignedManagedIdentity")
+{
+ $uamiClientID = Get-AutomationVariable -Name "AzureOptimization_UAMIClientID"
+}
+
+$sqlserver = Get-AutomationVariable -Name "AzureOptimization_SQLServerHostname"
+$sqldatabase = Get-AutomationVariable -Name "AzureOptimization_SQLServerDatabase" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($sqldatabase))
+{
+ $sqldatabase = "azureoptimization"
+}
+$storageAccountSink = Get-AutomationVariable -Name "AzureOptimization_StorageSink"
+
+
+$storageAccountSinkContainer = Get-AutomationVariable -Name "AzureOptimization_RemediationLogsContainer" -ErrorAction SilentlyContinue
+if ([string]::IsNullOrEmpty($storageAccountSinkContainer)) {
+ $storageAccountSinkContainer = "remediationlogs"
+}
+
+$minFitScore = [double] (Get-AutomationVariable -Name "AzureOptimization_RemediateUnattachedDisksMinFitScore" -ErrorAction SilentlyContinue)
+if (-not($minFitScore -gt 0.0)) {
+ $minFitScore = 5.0
+}
+
+$minWeeksInARow = [int] (Get-AutomationVariable -Name "AzureOptimization_RemediateUnattachedDisksMinWeeksInARow" -ErrorAction SilentlyContinue)
+if (-not($minWeeksInARow -gt 0)) {
+ $minWeeksInARow = 4
+}
+
+$tagsFilter = Get-AutomationVariable -Name "AzureOptimization_RemediateUnattachedDisksTagsFilter" -ErrorAction SilentlyContinue
+# example: '[ { "tagName": "a", "tagValue": "b" }, { "tagName": "c", "tagValue": "d" } ]'
+if (-not($tagsFilter)) {
+ $tagsFilter = '{}'
+}
+$tagsFilter = $tagsFilter | ConvertFrom-Json
+
+$remediationAction = Get-AutomationVariable -Name "AzureOptimization_RemediateUnattachedDisksAction" -ErrorAction SilentlyContinue # Delete / Downsize
+if (-not($remediationAction)) {
+ $remediationAction = "Delete"
+}
+
+$recommendationId = Get-AutomationVariable -Name "AzureOptimization_RecommendationUnattachedDisksId" -ErrorAction SilentlyContinue
+if (-not($recommendationId)) {
+ $recommendationId = 'c84d5e86-e2d6-4d62-be7c-cecfbd73b0db'
+}
+
+$SqlTimeout = 0
+$recommendationsTable = "Recommendations"
+
+"Logging in to Azure with $authenticationOption..."
+
+switch ($authenticationOption) {
+ "UserAssignedManagedIdentity" {
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment -AccountId $uamiClientID
+ break
+ }
+ Default { #ManagedIdentity
+ Connect-AzAccount -Identity -EnvironmentName $cloudEnvironment
+ break
+ }
+}
+
+$cloudDetails = Get-AzEnvironment -Name $CloudEnvironment
+$azureSqlDomain = $cloudDetails.SqlDatabaseDnsSuffix.Substring(1)
+
+# get reference to storage sink
+
+$saCtx = New-AzStorageContext -StorageAccountName $storageAccountSink -UseConnectedAccount -Environment $cloudEnvironment
+
+Write-Output "Querying for unattached disks recommendations with fit score >= $minFitScore made consecutively for the last $minWeeksInARow weeks."
+
+$tries = 0
+$connectionSuccess = $false
+do {
+ $tries++
+ try {
+ $dbToken = Get-AzAccessToken -ResourceUrl "https://$azureSqlDomain/"
+ $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$sqlserver,1433;Database=$sqldatabase;Encrypt=True;Connection Timeout=$SqlTimeout;")
+ $Conn.AccessToken = $dbToken.Token
+ $Conn.Open()
+ $Cmd=new-object system.Data.SqlClient.SqlCommand
+ $Cmd.Connection = $Conn
+ $Cmd.CommandTimeout = $SqlTimeout
+ $Cmd.CommandText = @"
+ SELECT InstanceId, Cloud, TenantGuid, COUNT(InstanceId)
+ FROM [dbo].[$recommendationsTable]
+ WHERE RecommendationSubTypeId = '$recommendationId' AND FitScore >= $minFitScore AND GeneratedDate >= GETDATE()-(7*$minWeeksInARow)
+ GROUP BY InstanceId, Cloud, TenantGuid
+ HAVING COUNT(InstanceId) >= $minWeeksInARow
+"@
+ $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
+ $sqlAdapter.SelectCommand = $Cmd
+ $unattachedDisks = New-Object System.Data.DataTable
+ $sqlAdapter.Fill($unattachedDisks) | Out-Null
+ $connectionSuccess = $true
+ }
+ catch {
+ Write-Output "Failed to contact SQL at try $tries."
+ Write-Output $Error[0]
+ Start-Sleep -Seconds ($tries * 20)
+ }
+} while (-not($connectionSuccess) -and $tries -lt 3)
+
+if (-not($connectionSuccess))
+{
+ throw "Could not establish connection to SQL."
+}
+
+Write-Output "Found $($unattachedDisks.Rows.Count) remediation opportunities."
+
+$Conn.Close()
+$Conn.Dispose()
+
+$logEntries = @()
+
+$datetime = (get-date).ToUniversalTime()
+$hour = $datetime.Hour
+$min = $datetime.Minute
+$timestamp = $datetime.ToString("yyyy-MM-ddT$($hour):$($min):00.000Z")
+
+$ctx = Get-AzContext
+
+foreach ($disk in $unattachedDisks.Rows)
+{
+ $isEligible = $false
+ $logDetails = $null
+ if ([string]::IsNullOrEmpty($tagsFilter))
+ {
+ $isEligible = $true
+ }
+ else
+ {
+ $diskTags = Get-AzTag -ResourceId $disk.InstanceId -ErrorAction SilentlyContinue
+ if ($diskTags)
+ {
+ foreach ($tagFilter in $tagsFilter)
+ {
+ if ($diskTags.Properties.TagsProperty.($tagFilter.tagName) -eq $tagFilter.tagValue)
+ {
+ $isEligible = $true
+ }
+ else
+ {
+ $isEligible = $false
+ break
+ }
+ }
+ }
+ }
+
+ $subscriptionId = $disk.InstanceId.Split("/")[2]
+ $resourceGroup = $disk.InstanceId.Split("/")[4]
+ $instanceName = $disk.InstanceId.Split("/")[8]
+
+ if ($isEligible)
+ {
+ $diskState = "Unknown"
+ $currentSku = "Unknown"
+
+ Write-Output "Performing $remediationAction action (SIMULATE=$Simulate) on $($disk.InstanceId) disk..."
+ if ($ctx.Environment.Name -eq $disk.Cloud -and $ctx.Tenant.Id -eq $disk.TenantGuid)
+ {
+ if ($ctx.Subscription.Id -ne $subscriptionId)
+ {
+ Select-AzSubscription -SubscriptionId $subscriptionId | Out-Null
+ $ctx = Get-AzContext
+ }
+ $diskObj = Get-AzDisk -ResourceGroupName $resourceGroup -DiskName $instanceName -ErrorAction SilentlyContinue
+ if (-not($diskObj.ManagedBy))
+ {
+ $diskState = "Unattached"
+ $currentSku = $diskObj.Sku.Name
+ if ($remediationAction -eq "Downsize")
+ {
+ if (-not($Simulate) -and $diskObj.Sku.Name -ne 'Standard_LRS')
+ {
+ $diskObj.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Standard_LRS')
+ $diskObj | Update-AzDisk | Out-Null
+ }
+ else
+ {
+ Write-Output "Skipping as disk is already HDD."
+ }
+ }
+ elseif ($remediationAction -eq "Delete")
+ {
+ if (-not($Simulate))
+ {
+ Remove-AzDisk -ResourceGroupName $resourceGroup -DiskName $instanceName -Force | Out-Null
+ }
+ }
+ else
+ {
+ Write-Output "Skipping as action is not supported."
+ }
+ }
+ else
+ {
+ if ($diskObj)
+ {
+ Write-Output "Skipping as disk is not unattached."
+ $diskState = "Attached"
+ }
+ else
+ {
+ Write-Output "Skipping as disk was already removed."
+ $diskState = "Removed"
+ }
+ }
+ }
+ else
+ {
+ Write-Output "Could not apply remediation as disk is in another cloud/tenant."
+ }
+ }
+
+ $logDetails = @{
+ IsEligible = $isEligible
+ RemediationAction = $remediationAction
+ DiskState = $diskState
+ CurrentSku = $currentSku
+ }
+
+ $logentry = New-Object PSObject -Property @{
+ Timestamp = $timestamp
+ Cloud = $disk.Cloud
+ TenantGuid = $disk.TenantGuid
+ SubscriptionGuid = $subscriptionId
+ ResourceGroupName = $resourceGroup.ToLower()
+ InstanceName = $instanceName.ToLower()
+ InstanceId = $disk.InstanceId.ToLower()
+ Simulate = $Simulate
+ LogDetails = $logDetails | ConvertTo-Json -Compress
+ RecommendationSubTypeId = $recommendationId
+ }
+
+ $logEntries += $logentry
+}
+
+$today = $datetime.ToString("yyyyMMdd")
+$csvExportPath = "$today-unattacheddisksfiltered.csv"
+
+$logEntries | Export-Csv -Path $csvExportPath -NoTypeInformation
+
+$csvBlobName = $csvExportPath
+
+$csvProperties = @{"ContentType" = "text/csv"};
+
+Set-AzStorageBlobContent -File $csvExportPath -Container $storageAccountSinkContainer -Properties $csvProperties -Blob $csvBlobName -Context $saCtx -Force
diff --git a/docs/deploy/optimization-workbook-0.8.json b/docs/deploy/optimization-workbook-0.8.json
new file mode 100644
index 000000000..72ae03059
--- /dev/null
+++ b/docs/deploy/optimization-workbook-0.8.json
@@ -0,0 +1,12524 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "bicep",
+ "version": "0.33.93.31351",
+ "templateHash": "10544991197071991923"
+ }
+ },
+ "parameters": {
+ "displayName": {
+ "type": "string",
+ "defaultValue": "Cost optimization",
+ "metadata": {
+ "description": "Optional. Display name for the workbook used in the Gallery. Must be unique in the resource group."
+ }
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]",
+ "metadata": {
+ "description": "Optional. Location of the resources. Default: Same as deployment. See https://aka.ms/azureregions."
+ }
+ },
+ "description": {
+ "type": "string",
+ "defaultValue": "Reports to help you optimize your cost.",
+ "metadata": {
+ "description": "Optional. Workbook description."
+ }
+ },
+ "tags": {
+ "type": "object",
+ "defaultValue": {},
+ "metadata": {
+ "description": "Optional. Tags for all resources."
+ }
+ },
+ "enableDefaultTelemetry": {
+ "type": "bool",
+ "defaultValue": true,
+ "metadata": {
+ "description": "Optional. Enable telemetry to track anonymous module usage trends, monitor for bugs, and improve future releases."
+ }
+ }
+ },
+ "variables": {
+ "$fxv#0": {
+ "version": "Notebook/1.0",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "ca40468d-4518-43bf-ac6e-0a11d7331e12",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Overview",
+ "subTarget": "Welcome",
+ "style": "link"
+ },
+ {
+ "id": "f280fc2a-f42a-42a4-ad4b-be37ab3e8b48",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Rate optimization",
+ "subTarget": "RateOptimization",
+ "style": "link"
+ },
+ {
+ "id": "26b3c7ef-1a00-4a3f-a773-677f00db9343",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Usage optimization",
+ "subTarget": "UsageOptimization",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - MainTabs"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "28fdc6e9-2946-4016-8e75-b812ff8f853d",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Compute",
+ "subTarget": "Compute",
+ "style": "link"
+ },
+ {
+ "id": "4e0a0d2d-1d61-4d04-a35d-93e38d1bac29",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Storage",
+ "subTarget": "Storage",
+ "style": "link"
+ },
+ {
+ "id": "22d04714-50f4-4d72-baec-e8ccddddc7f3",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Networking",
+ "subTarget": "Networking",
+ "style": "link"
+ },
+ {
+ "id": "eaedbb0e-e895-4940-80ad-f743c3ab1041",
+ "cellValue": "SelectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Top 10 services",
+ "subTarget": "Top10Services",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - UsageOptimization tabs"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "51aa3a9b-14e0-4c22-a60d-abdbf8813f00",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "f342a111-002a-47fd-807f-0d4ccac0618a",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "2336f06b-ddaa-4a9e-b72f-a2bec1ea84a9",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "d6776ffe-e4f6-4c08-8f9e-a2fe2b3b6634",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "f73dc4a1-ef8b-45c5-a30b-a11bb077a3cc",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "37ceb1c3-3930-4689-a90b-22f26e42bd81",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "08f5fe68-c2e3-4882-9300-b3e33f572dfe",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "4fea3013-df84-4930-a453-8a6bd0375130",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "8412f39d-ee67-4979-b887-47463b8848c2",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "50c68f38-13a0-4aff-a259-4426c83b7cc0",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure App Service",
+ "subTarget": "webapp",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Kubernetes Service",
+ "subTarget": "AKS",
+ "style": "link"
+ },
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Synapse",
+ "subTarget": "Synapse",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "820d600c-8ab3-4622-ba5a-52f60574d111",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Monitoring",
+ "subTarget": "Monitoring",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Storage"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Synapse\r\nA Synapse Workspace is considered unused if it doesn't have any SQL pools attached to it\r\n",
+ "style": "upsell"
+ },
+ "name": "Synapse"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type =~ 'Microsoft.Synapse/workspaces'\r\n| join kind=leftouter (\r\n Resources\r\n | where type =~ 'Microsoft.Synapse/workspaces/sqlPools'\r\n | extend SynapseWorkspaceResourceId = substring(id, 0, indexof(id, '/sqlPools/'))\r\n | summarize sqlpoolCount = count() by SynapseWorkspaceResourceId\r\n) on $left.id == $right.SynapseWorkspaceResourceId\r\n| join kind=leftouter (\r\n Resources\r\n | where type =~ 'Microsoft.Synapse/workspaces/bigDataPools'\r\n | extend SynapseWorkspaceResourceId = substring(id, 0, indexof(id, '/bigDataPools/'))\r\n | summarize bigdatapoolCount = count() by SynapseWorkspaceResourceId\r\n) on $left.id == $right.SynapseWorkspaceResourceId\r\n| where (isnull(sqlpoolCount) or sqlpoolCount == 0) and (isnull(bigdatapoolCount) or bigdatapoolCount == 0)\r\n| project id, resourceGroup, subscriptionId, location\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Unused Synapase workspace",
+ "noDataMessage": "All of your Synapse workspaces have SQL pools.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "storageaccount",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ }
+ },
+ "name": "Get-Synapse1"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Synapse"
+ },
+ "name": "SynapseGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Azure Kubernetes Service\r\n- Enable cluster autoscaler to automatically adjust the number of agent nodes in response to resource constraints\r\n\r\n- Consider using Azure Spot VMs for workloads that can handle interruptions, early terminations, or evictions. For example, workloads such as batch processing jobs, development and testing environments, and large compute workloads may be good candidates to be scheduled on a spot node pool.\r\n\r\n- Utilize the Horizontal pod autoscaler to adjust the number of pods in a deployment depending on CPU utilization or other select metrics.\r\n\r\n- Use the Start/Stop feature in Azure Kubernetes Services (AKS).\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "Azure Kubernetes Service"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "\tresources\r\n | where resourceGroup in ({ResourceGroup})\r\n\t| where type == \"microsoft.containerservice/managedclusters\"\r\n\t| extend AKSname=name,location=location,Sku=tostring(sku.name),Tier=tostring(sku.tier),AgentPoolProfiles=properties.agentPoolProfiles\r\n | project id,AKSname,resourceGroup,subscriptionId,Sku,Tier,AgentPoolProfiles,location\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n\t| mvexpand AgentPoolProfiles\r\n\t| extend ProfileName = tostring(AgentPoolProfiles.name) ,mode=AgentPoolProfiles.mode,AutoScaleEnabled = AgentPoolProfiles.enableAutoScaling ,SpotVM=AgentPoolProfiles.scaleSetPriority, VMSize=tostring(AgentPoolProfiles.vmSize),minCount=tostring(AgentPoolProfiles.minCount),maxCount=tostring(AgentPoolProfiles.maxCount) , nodeCount=tostring(AgentPoolProfiles.['count'])\r\n | project id,ProfileName,Sku,Tier,mode,AutoScaleEnabled,SpotVM, VMSize,nodeCount,minCount,maxCount,location,resourceGroup,subscriptionId,AKSname\r\n \r\n",
+ "size": 0,
+ "noDataMessage": "You have no AKS clusters!",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "AKS Name",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "Insights",
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "mode",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "System",
+ "representation": "Gear",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "User",
+ "representation": "Person",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "AutoScaleEnabled",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "true",
+ "representation": "success",
+ "text": "Enabled"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "disabled",
+ "text": "Disabled"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SpotVM",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "2",
+ "text": "{0}{1}Not Spot VM"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "AKSname",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "AKSname"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "ProfileName",
+ "label": "Profile Name"
+ },
+ {
+ "columnId": "Sku",
+ "label": "SKU"
+ },
+ {
+ "columnId": "Tier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "mode",
+ "label": "Mode"
+ },
+ {
+ "columnId": "AutoScaleEnabled",
+ "label": "Autoscale enabled?"
+ },
+ {
+ "columnId": "SpotVM",
+ "label": "Spot VM?"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "VM SKU"
+ },
+ {
+ "columnId": "nodeCount",
+ "label": "Number of nodes"
+ },
+ {
+ "columnId": "minCount",
+ "label": "Minimum nodes"
+ },
+ {
+ "columnId": "maxCount",
+ "label": "Maximum nodes"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "AKSname",
+ "label": "AKS Name"
+ }
+ ]
+ }
+ },
+ "name": "Get-All-AKS"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "AKS"
+ },
+ "name": "AKSGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Azure App Service\r\n## Save with Premium v3 reserved instances\r\nWhen you commit to an Azure App Service Premium v3 reserved instance you can save money. The reservation discount is applied automatically to the number of running instances that match the reservation scope and attributes - you don't need to assign a reservation to a specific instance to get the discounts.\r\n\r\n## Determine the right reserved instance size before you buy\r\nBefore you buy a reservation, you should determine the size of the Premium v3 reserved instance that you need. The following sections will help you determine the right Premium v3 reserved instance size.\r\n\r\n## Use Autoscale appropriately\r\nAutoscale can be used to provision resources for when they're needed or on demand, which allows you to minimize costs when your environment is idle.\r\n",
+ "style": "upsell"
+ },
+ "name": "Azure App Service"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'Microsoft.Web/sites'\r\n| extend WebAppRG=resourceGroup, WebAppName=name, AppServicePlan=tostring(properties.serverFarmId), SKU=tostring(properties.sku), Type=kind, Status=tostring(properties.state), WebAppLocation=location, SubscriptionName=subscriptionId\r\n| project id,WebAppName, Type, Status, WebAppLocation, AppServicePlan, WebAppRG,SubscriptionName\r\n| order by id asc\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "Never"
+ },
+ "name": "query - WebFunctionStatus"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type == \"microsoft.web/serverfarms\" and sku.tier !~ 'Free'\r\n| extend planId=tolower(tostring(id)),skuname = tostring(sku.name) , skutier = tostring(sku.tier), workers=tostring(properties.numberOfWorkers),webRG=resourceGroup,maxworkers=tostring(properties.maximumNumberOfWorkers), Sites=tostring(properties.numberOfSites), SubscriptionName=subscriptionId\r\n| project planId, name, skuname, skutier, workers, maxworkers, webRG, Sites, SubscriptionName\r\n| join kind=leftouter (resources | where type ==\"microsoft.insights/autoscalesettings\" | project planId=tolower(tostring(properties.targetResourceUri)), PredictiveAutoscale=properties.predictiveAutoscalePolicy.scaleMode, AutoScaleProfiles=properties.profiles,resourceGroup) on planId\r\n",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "Never"
+ },
+ "name": "query - AppServiceplandetails"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\",\"mergeType\":\"inner\",\"leftTable\":\"query - AppServiceplandetails\",\"rightTable\":\"query - WebFunctionStatus\",\"leftColumn\":\"planId\",\"rightColumn\":\"AppServicePlan\"}],\"projectRename\":[{\"originalName\":\"[query - AppServiceplandetails].type\",\"mergedName\":\"type\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].tenantId\",\"mergedName\":\"tenantId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].kind\",\"mergedName\":\"kind\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].location\",\"mergedName\":\"location\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].managedBy\",\"mergedName\":\"managedBy\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].sku\",\"mergedName\":\"sku\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].plan\",\"mergedName\":\"plan\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].properties\",\"mergedName\":\"properties\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].tags\",\"mergedName\":\"tags\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].identity\",\"mergedName\":\"identity\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].zones\",\"mergedName\":\"zones\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].extendedLocation\",\"mergedName\":\"extendedLocation\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].planId\",\"mergedName\":\"planId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - WebFunctionStatus].id\",\"mergedName\":\"id\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].name\",\"mergedName\":\"name\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].Status\",\"mergedName\":\"Status\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].Type\",\"mergedName\":\"Type\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].skuname\",\"mergedName\":\"skuname\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].skutier\",\"mergedName\":\"skutier\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].PredictiveAutoscale\",\"mergedName\":\"PredictiveAutoscale\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].AutoScaleProfiles\",\"mergedName\":\"AutoScaleProfiles\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - AppServiceplandetails].workers\",\"mergedName\":\"workers\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].maxworkers\",\"mergedName\":\"maxworkers\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].webRG\",\"mergedName\":\"webRG\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].planId1\",\"mergedName\":\"planId1\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].resourceGroup\",\"mergedName\":\"resourceGroup\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].WebAppName\",\"mergedName\":\"WebAppName\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].WebAppLocation\",\"mergedName\":\"WebAppLocation\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].AppServicePlan\",\"mergedName\":\"AppServicePlan\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - WebFunctionStatus].WebAppRG\",\"mergedName\":\"WebAppRG\",\"fromId\":\"3fddbdd9-c4eb-46ae-b6b0-654c0da7b1a8\"},{\"originalName\":\"[query - AppServiceplandetails].Sites\",\"mergedName\":\"Sites\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - WebFunctionStatus].SubscriptionName\"},{\"originalName\":\"[query - WebFunctionStatus].id1\"},{\"originalName\":\"[query - AppServiceplandetails].resourceGroup1\"}]}",
+ "size": 0,
+ "title": "Web Apps",
+ "noDataMessage": "You have no WebApps!",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Name",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Running",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Stopped",
+ "representation": "disabled",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "webRG",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "planId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WebAppName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AppServicePlan",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WebAppRG",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "name"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "planId",
+ "label": "Plan ID"
+ },
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "skuname",
+ "label": "SKU"
+ },
+ {
+ "columnId": "skutier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "PredictiveAutoscale",
+ "label": "Autoscale Enabled?"
+ },
+ {
+ "columnId": "AutoScaleProfiles",
+ "label": "Autoscale Profile"
+ },
+ {
+ "columnId": "workers",
+ "label": "Workers"
+ },
+ {
+ "columnId": "maxworkers",
+ "label": "Max. Workers"
+ },
+ {
+ "columnId": "webRG",
+ "label": "Application Resource Group"
+ },
+ {
+ "columnId": "WebAppName",
+ "label": "Application Name"
+ },
+ {
+ "columnId": "WebAppLocation",
+ "label": "Application Location"
+ },
+ {
+ "columnId": "AppServicePlan",
+ "label": "App Service Plan"
+ },
+ {
+ "columnId": "WebAppRG",
+ "label": "Application Resource Group"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-WebApp"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type == \"microsoft.web/serverfarms\" and properties.numberOfSites == \"0\"\r\n| extend id, planId=tolower(tostring(id)),skuname = tostring(sku.name) , skutier = tostring(sku.tier), workers=tostring(properties.numberOfWorkers),webRG=resourceGroup,maxworkers=tostring(properties.maximumNumberOfWorkers), Sites=tostring(properties.numberOfSites), SubscriptionName=subscriptionId\r\n| project id, planId, name, skuname, skutier, workers, maxworkers, webRG, Sites, SubscriptionName\r\n| join kind=leftouter (resources | where type ==\"microsoft.insights/autoscalesettings\" | project planId=tolower(tostring(properties.targetResourceUri)), PredictiveAutoscale=properties.predictiveAutoscalePolicy.scaleMode, AutoScaleProfiles=properties.profiles,resourceGroup) on planId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n ) on id",
+ "size": 0,
+ "noDataMessage": "All of your App Service's plan have at least one website.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxworkers",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "planId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "PredictiveAutoscale",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AutoScaleProfiles",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "planId",
+ "label": "App Service Plan "
+ },
+ {
+ "columnId": "name",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "skuname",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "skutier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "workers",
+ "label": "Number of Workers "
+ },
+ {
+ "columnId": "maxworkers",
+ "label": "Number of websites"
+ },
+ {
+ "columnId": "webRG",
+ "label": "Resource Group "
+ },
+ {
+ "columnId": "Sites",
+ "label": "Number of websites"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ }
+ ]
+ }
+ },
+ "name": "query - IdleServicePlans"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "webapp"
+ },
+ "name": "WebAppGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Log Analytics workspace\r\nA [Log Analytics workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-workspace-overview) is a unique environment for log data from Azure Monitor and other Azure services, such as Microsoft Sentinel and Microsoft Defender for Cloud. Each workspace has its own data repository and configuration but might combine data from multiple services. The following advices could be of help in cost optimization:\r\n\r\n1. Adopt [commitment tiers](https://learn.microsoft.com/azure/azure-monitor/logs/cost-logs#commitment-tiers) where applicable.\r\n2. Adopt [Azure Monitor Logs dedicated cluster](https://learn.microsoft.com/azure/azure-monitor/logs/cost-logs#dedicated-clusters) if a single workspace does not ingest enough data as per the minimum commitment tier (100 GB/day) or if it is possible to aggregate ingestion costs from more than one workspace in the same region.\r\n3. Convert the free tier based workspace to **Pay-as-you-go** model and add them to an Azure Monitor Logs dedicated cluster where possible.",
+ "style": "upsell"
+ },
+ "name": "MonitoringRecommendations"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'microsoft.operationalinsights/workspaces'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend \r\n state = trim(' ', tostring(properties.provisioningState)),\r\n sku = trim(' ', tostring(properties.sku.name)),\r\n skuUpdate = trim(' ', tostring(properties.sku.lastSkuUpdate)),\r\n retentionDays = toint(properties.retentionInDays),\r\n dailyquotaGB = trim(' ', tostring(properties.workspaceCapping.dailyQuotaGb))\r\n| extend dailyquotaGB = iif(dailyquotaGB !=-1.0, dailyquotaGB,\"--\")\r\n| project id, resourceGroup, location, retentionDays, dailyquotaGB, sku, subscriptionId\r\n| join kind = inner (\r\n resources\r\n | where type =~ 'microsoft.operationalinsights/workspaces'\r\n | where resourceGroup in ({ResourceGroup})\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags[tagName])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | summarize arg_max(tagName, tagValue) by id\r\n) on id\r\n| extend resourceGroup = tostring(split(id,'/providers/')[0])\r\n| project-away id1",
+ "size": 0,
+ "title": "Log Analytics Workspaces",
+ "showRefreshButton": true,
+ "exportMultipleValues": true,
+ "exportedParameters": [
+ {
+ "fieldName": "id",
+ "parameterName": "selectedWorkspaceId",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "id",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "retentionDays",
+ "formatter": 4,
+ "formatOptions": {
+ "min": 1,
+ "max": 730,
+ "palette": "blue",
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "dailyquotaGB",
+ "formatter": 0,
+ "formatOptions": {
+ "customColumnWidthSetting": "10%"
+ }
+ },
+ {
+ "columnMatch": "sku",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "lacluster",
+ "representation": "green",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "free",
+ "representation": "gray",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "capacityreservation",
+ "representation": "green",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "red",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "tagName",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "Blank",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Tags",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "tagValue",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "Blank",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Tags",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "rowLimit": 10000,
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Workspace"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "retentionDays",
+ "label": "Retention (days)"
+ },
+ {
+ "columnId": "dailyquotaGB",
+ "label": "Daily Cap (GB)"
+ },
+ {
+ "columnId": "sku",
+ "label": "Pricing Tier"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ },
+ {
+ "columnId": "tagName",
+ "label": "Tag Name"
+ },
+ {
+ "columnId": "tagValue",
+ "label": "Tag Value"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "name": "logAnalyticsWorkspaces",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "π‘_Select one or more workspaces from the list above to see daily ingestion trend_"
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedWorkspaceId",
+ "comparison": "isEqualTo"
+ },
+ "name": "text - 3",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "d9c04e61-453f-4f85-8d7e-1a34037d836b",
+ "version": "KqlParameterItem/1.0",
+ "name": "selectedWorkspaces",
+ "type": 5,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "where type =~ 'microsoft.operationalinsights/workspaces'\r\n| where id in ({selectedWorkspaceId})",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 2592000000
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null
+ },
+ {
+ "id": "2108523c-fb80-49b3-9ff1-ea5e5eca2091",
+ "version": "KqlParameterItem/1.0",
+ "name": "TimeRange",
+ "label": "Time range",
+ "type": 4,
+ "isRequired": true,
+ "typeSettings": {
+ "selectableValues": [
+ {
+ "durationMs": 172800000
+ },
+ {
+ "durationMs": 604800000
+ },
+ {
+ "durationMs": 1209600000
+ },
+ {
+ "durationMs": 2592000000
+ }
+ ]
+ },
+ "timeContext": {
+ "durationMs": 2592000000
+ },
+ "value": {
+ "durationMs": 2592000000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "conditionalVisibility": {
+ "parameterName": "_",
+ "comparison": "isEqualTo",
+ "value": "_"
+ },
+ "name": "parameters - 2"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Usage\r\n| where StartTime >= startofday({TimeRange:start}) and EndTime < startofday(now())\r\n| where IsBillable == true\r\n| project Quantity, ResourceUri, TimeGenerated\r\n| summarize BillableDataGB = sum(Quantity / 1024.) by bin(TimeGenerated, 1d)\r\n| project TimeGenerated, BillableDataGB",
+ "size": 0,
+ "aggregation": 5,
+ "title": "Total Daily Ingestion for selected workspaces - Trend by {TimeRange:label}",
+ "timeContextFromParameter": "TimeRange",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces",
+ "crossComponentResources": [
+ "{selectedWorkspaces}"
+ ],
+ "visualization": "barchart",
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "BillableDataGB",
+ "label": "Ingested data"
+ }
+ ],
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 39,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "selectedWorkspaceId",
+ "comparison": "isNotEqualTo"
+ },
+ "name": "dailyIngestionTrend",
+ "styleSettings": {
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Monitoring"
+ },
+ "name": "MonitoringGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| where properties.impactedField has \"Workspaces\"\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Impact=properties.impact,resourceGroup,subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Recommendation=tostring(properties.shortDescription.problem), Impact=properties.impact,resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| where Category == 'Cost' \r\n| where SubCategory has \"Workspaces\"\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Monitoring",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Monitoring"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where type has \"microsoft.operationalinsights/workspaces\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "rowLimit": 10000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all network resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Monitoring\",\"rightTable\":\"query - tags - list all network resources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].AffectedResource\",\"mergedName\":\"Affected Resource\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].Category\",\"mergedName\":\"Recommendation Category\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].SubCategory\",\"mergedName\":\"Affected Resource Type\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].subscriptionId\",\"mergedName\":\"Subscription ID\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].id\",\"mergedName\":\"id\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].stableId\",\"mergedName\":\"stableId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].recommendationTypeId\",\"mergedName\":\"recommendationTypeId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].maxCpuP95\",\"mergedName\":\"maxCpuP95\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].excludeRecomm\",\"mergedName\":\"excludeRecomm\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].lowCpuThreshold\",\"mergedName\":\"lowCpuThreshold\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].AdditionaInfo\",\"mergedName\":\"AdditionaInfo\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].isActive1\",\"mergedName\":\"isActive1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Monitoring].excludeProperty\",\"mergedName\":\"excludeProperty\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[query - tags - list all network resources].id\",\"mergedName\":\"id1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeProperty\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].isActive1\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].AdditionaInfo\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].lowCpuThreshold\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeRecomm\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].maxCpuP95\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].recommendationTypeId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].stableId\"},{\"originalName\":\"[query - tags - list all network resources].id\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].id\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Monitoring",
+ "noDataMessageStyle": 3,
+ "queryType": 7
+ },
+ "showPin": false,
+ "name": "query - Merge - Monitoring Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Monitoring"
+ },
+ "name": "AdvisorGroupMonitoring"
+ }
+ ]
+ },
+ "name": "group - 0 "
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Top10Services"
+ }
+ ],
+ "name": "group - Top10Services"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "7a720abf-5b4a-4fb1-adaf-2383e70f625d",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "a29babbc-5092-46c5-b03b-932c90aa61c9",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "4b9c84b6-14ab-4663-b8b7-8bf0c351bbb5",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "6637e003-5323-4c6d-9990-426388c833e9",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "d390e2b5-aa2f-494b-bbb8-0b18c8de9063",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ae7eb928-8873-46f8-a3ff-77f45c207fb3",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Networking cost optimization recommendations",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "ae7eb928-8873-46f8-a3ff-77f45c207fb3",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "e5d97e9d-97e6-45f2-871c-376799213b6a",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Firewall",
+ "subTarget": "firewall",
+ "style": "link"
+ },
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Application Gateway",
+ "subTarget": "appGateway",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "61595d5e-9f25-4919-95a6-1462739f4657",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Load Balancer",
+ "subTarget": "loadBalancer",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Public IP Address",
+ "subTarget": "publicIP",
+ "style": "link"
+ },
+ {
+ "id": "79e7a97a-1413-41e8-b4c6-ebd1d0a45e2e",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual Network Gateway",
+ "subTarget": "vpnGw",
+ "style": "link"
+ },
+ {
+ "id": "5655ef75-a5ec-4f4b-badf-a99191a0493f",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "NAT Gateway",
+ "subTarget": "natgw",
+ "style": "link"
+ },
+ {
+ "id": "68a77162-06c2-4648-83e0-f8f41c4fbda7",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "ExpressRoute",
+ "subTarget": "ER",
+ "style": "link"
+ },
+ {
+ "id": "5dd4cb39-5aa1-4de9-bc4c-338e15b8d389",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Private DNS & Private Endpoint",
+ "subTarget": "privatedns",
+ "style": "link"
+ },
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Advisor recommendations",
+ "subTarget": "advisorNetworking",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Networking"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Application Gateways\r\nReview Application Gateways which include backend pools with no targets. Resources listed with 2 red signs are considered idle.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for Application Gateways"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'Microsoft.Network/applicationGateways' and resourceGroup in ({ResourceGroup})\r\n| extend backendPoolsCount = array_length(properties.backendAddressPools),SKUName= tostring(properties.sku.name), SKUTier= tostring(properties.sku.tier),SKUCapacity=properties.sku.capacity,backendPools=properties.backendAddressPools,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id, name, SKUName, SKUTier, SKUCapacity,resourceGroup,subscriptionId\r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Network/applicationGateways' and resourceGroup in ({ResourceGroup})\r\n | mvexpand backendPools = properties.backendAddressPools\r\n | extend backendIPCount = array_length(backendPools.properties.backendIPConfigurations)\r\n | extend backendAddressesCount = array_length(backendPools.properties.backendAddresses)\r\n | extend backendPoolName = backendPools.properties.backendAddressPools.name\r\n | summarize backendIPCount = sum(backendIPCount) ,backendAddressesCount=sum(backendAddressesCount) by id\r\n) on id\r\n| project-away id1\r\n| where (backendIPCount == 0 or isempty(backendIPCount)) and (backendAddressesCount==0 or isempty(backendAddressesCount))\r\n| order by id asc\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Application gateways with empty backend pools",
+ "noDataMessage": "You don't have any Application Gateways with empty backendpools",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SKUCapacity",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "backendIPCount",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": "No Backend IPs"
+ },
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": "Backend IP configured"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "backendAddressesCount",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": "No Backend targets"
+ },
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": "Backend targets available"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Recommendation",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "No Backend targets",
+ "representation": "redBright",
+ "text": "No Backend targets"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "green",
+ "text": "Backend targets enabled"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "backendPoolIPTarget",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "backendPoolVMTarget",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "disabled",
+ "text": ""
+ },
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Recommednation",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "No Backend targets",
+ "representation": "redBright",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "green",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SKUCapacity",
+ "label": "Capacity"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ },
+ {
+ "columnId": "backendIPCount",
+ "label": "Has backend pool for IPs?"
+ },
+ {
+ "columnId": "backendAddressesCount",
+ "label": "Has backend pool for VMs?"
+ },
+ {
+ "columnId": "id1",
+ "label": "ResourceID"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-AppGW"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "appGateway"
+ },
+ "name": "NetworkingAppGateway"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Load Balancers\r\nReview Load balancers with no backend pools, and remove them if not needed.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for Load Balancers"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| extend resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup), SKUName=tostring(sku.name),SKUTier=tostring(sku.tier),location,backendAddressPools = properties.backendAddressPools\r\n| where type =~ 'microsoft.network/loadbalancers' and array_length(backendAddressPools) == 0 and sku.name!='Basic'\r\n| order by id asc\r\n| project id,name, SKUName,SKUTier,backendAddressPools, location,resourceGroup, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Load Balancers with empty backend pools",
+ "noDataMessage": "You don't have any Load Balancers with empty backendpools",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "backendAddressPools",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "disabled",
+ "text": "Empty Backend Pool"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "backendAddressPools",
+ "label": "Has backend pool?"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "id1",
+ "label": "ResourceID"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-LB"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "loadBalancer"
+ },
+ "name": "LoadBalancerGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Public IP Addresses\r\nReview unattached Public IP addresses, as they may represent additional cost.\r\n This query will also show Public IPs attached to Idle network cards.\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for PIP"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'Microsoft.Network/publicIPAddresses' and isempty(properties.ipConfiguration) and isempty(properties.natGateway) and properties.publicIPAllocationMethod =~ 'Static'\r\n| extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location ,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId\r\n| union (\r\n Resources \r\n | where type =~ 'microsoft.network/networkinterfaces' and isempty(properties.virtualMachine) and isnull(properties.privateEndpoint) and isnotempty(properties.ipConfigurations) \r\n | extend IPconfig = properties.ipConfigurations \r\n | mv-expand IPconfig \r\n | extend PublicIpId= tostring(IPconfig.properties.publicIPAddress.id)\r\n | project PublicIpId\r\n | join ( \r\n resources \r\n | where type =~ 'Microsoft.Network/publicIPAddresses'\r\n | extend PublicIpId=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, resourceGroup, Location=location \r\n ) on PublicIpId\r\n | project PublicIpId,IPName, SKUName, resourceGroup, Location, AllocationMethod, subscriptionId\r\n)\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | extend PublicIpId=id\r\n | distinct PublicIpId\r\n )\r\n on PublicIpId\r\n",
+ "size": 0,
+ "title": "Unattached Public IPs",
+ "noDataMessage": "You have no unattached Public IPs",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "PublicIpId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PublicIpId",
+ "label": "ID"
+ },
+ {
+ "columnId": "IPName",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "AllocationMethod",
+ "label": "Allocation Method"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "PublicIpId1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "name": "Get-Idle-PIP"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Routing Preference\r\n\r\nAzure routing preference enables you to choose how your traffic routes between Azure and the Internet. You can choose to route traffic either via the Microsoft network or via the ISP network (public internet). By default, traffic is routed via the Microsoft global network for all Azure services.\r\n\r\nRouting preference choices include:\r\n\r\n- **Microsoft Network**: Both ingress and egress traffic stays bulk of the travel on the Microsoft global network. This routing is also known as cold potato routing. This option has a higher ingress/egress cost.\r\n\r\n- **Public Internet (ISP network)**: The new routing choice Internet routing minimizes travel on the Microsoft global network and uses the transit ISP network to route your traffic. This routing is also known as hot potato routing.\r\n\r\nFor more information about routing preference, see [What is routing preference?](https://learn.microsoft.com/azure/virtual-network/ip-services/ip-services-overview#routing-preference).\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'Microsoft.Network/publicIPAddresses' and isnotempty(properties.ipConfiguration)\r\n| where tostring(properties.ipTags)== \"[]\"\r\n| extend PublicIpId=id, RoutingMethod=id, IPName=name, AllocationMethod=tostring(properties.publicIPAllocationMethod), SKUName=sku.name, Location=location ,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project PublicIpId,IPName, RoutingMethod,SKUName, resourceGroup, Location, AllocationMethod, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | extend PublicIpId=id\r\n | distinct PublicIpId\r\n )\r\n on PublicIpId",
+ "size": 0,
+ "title": "Public IP Addresses ",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "RoutingMethod",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "info",
+ "text": "Microsoft Network"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "PublicIpId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "PublicIpId",
+ "label": "ID"
+ },
+ {
+ "columnId": "IPName",
+ "label": "Name"
+ },
+ {
+ "columnId": "RoutingMethod",
+ "label": "Routing Method"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "AllocationMethod",
+ "label": "Allocation Method"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "SubscriptionId"
+ },
+ {
+ "columnId": "PublicIpId1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "name": "Query-PIP-RoutingPreference"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# DDoS IP Protection\r\nIf you need to protect fewer than 15 public IP resources, the IP Protection tier is the more cost-effective option. However, if you have more than 15 public IP resources to protect, then the Network Protection tier becomes more cost-effective. \r\n\r\nThis query will surface all Public IP (PIP) addressess with the DDoS Protection enabled. If there are more than 15 Public IP Addresses with DDoS protection in the same virtual network, then it is cheaper to enable DDoS Network protection.\r\n\r\nThe Network Protection tier also provides additional features, including:\r\n\r\n- DDoS Protection Rapid Response (DRR)\r\n- Cost protection guarantees\r\n- Web Application Firewall (WAF) discounts\r\n\r\nFor more information about DDoS protection, see [Which Azure DDoS Protection tier should I choose?](https://learn.microsoft.com/azure/ddos-protection/ddos-faq?source=recommendations#which-azure-ddos-protection-tier-should-i-choose-).",
+ "style": "upsell"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/publicipaddresses\"\r\n| project ddosProtection=tostring(properties.ddosSettings), name\r\n| where ddosProtection has \"Enabled\"\r\n| count\r\n| project TotalIpsProtected = Count\r\n| extend CheckIpsProtected = iff(TotalIpsProtected >= 15,\"Enable Network Protection tier\", \"Enable PIP DDoS Protection\")",
+ "size": 0,
+ "title": "Public IP Addresses DDoS Protection",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "RoutingMethod",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "info",
+ "text": "Microsoft Network"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "PublicIpId1",
+ "formatter": 5
+ }
+ ]
+ }
+ },
+ "name": "Query-PIP-DDoSProtection"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "publicIP"
+ },
+ "name": "PIPGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Virtual Network Gateways\r\nReview idle Virtual Network Gateways that have no connections defined, as they may represent additional cost.\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle virtualNetworkGateways"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/virtualnetworkgateways\"\r\n| extend resourceGroup =strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id, GWName=name,resourceGroup,location,subscriptionId\r\n| join kind = leftouter(\r\n resources\r\n | where type == \"microsoft.network/connections\"\r\n | extend id = tostring(properties.virtualNetworkGateway1.id)\r\n | project id\r\n | union (\r\n resources\r\n | where type == \"microsoft.network/connections\"\r\n | extend id = tostring(properties.virtualNetworkGateway2.id)\r\n | project id\r\n )\r\n) on id\r\n| where isempty(id1)\r\n| project id, GWName,resourceGroup,location,subscriptionId,status=id",
+ "size": 0,
+ "title": "Idle Virtual Network Gateways",
+ "noDataMessage": "No Idle Virtual Network Gateways found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Error-Connection not configured"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "GWName",
+ "label": "VPN Gateway Name"
+ },
+ {
+ "columnId": "status",
+ "label": "Is connected?"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle Virtual Network gateways"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "vpnGw"
+ },
+ "name": "VPNGW Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| where properties.impactedField has \"Network\"\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Impact=properties.impact,resourceGroup,subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=properties.category, SubCategory=properties.impactedField, Recommendation=tostring(properties.shortDescription.problem), Impact=properties.impact,resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| where Category == 'Cost' \r\n| where SubCategory has \"Network\"\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Networking",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Networking"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where type has \"Microsoft.Network\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all network resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Networking\",\"rightTable\":\"query - tags - list all network resources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Networking].AffectedResource\",\"mergedName\":\"AffectedResource\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].Category\",\"mergedName\":\"Category\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].SubCategory\",\"mergedName\":\"SubCategory\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].resourceGroup\",\"mergedName\":\"resourceGroup\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d87008d\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeProperty\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].isActive1\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].AdditionaInfo\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].lowCpuThreshold\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].excludeRecomm\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].maxCpuP95\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].recommendationTypeId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].stableId\"},{\"originalName\":\"[query - tags - list all network resources].id\"},{\"originalName\":\"[Get-AdvisorRecommendations-Networking].id\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Networking",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 7
+ },
+ "showPin": false,
+ "name": "query - Merge - Network Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "advisorNetworking"
+ },
+ "name": "AdvisorGroupNetworking"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for NAT Gateways\r\nReview idle NAT Gateways that have no subnet defined, as they may represent additional cost.\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle NAT Gateway"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/natgateways\" and isnull(properties.subnets)\r\n| project id, GWName=name, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), Location=location ,resourceGroup=tostring(strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)),subnet=tostring(properties.subnet), subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Idle NAT Gateways",
+ "noDataMessage": "No idle NAT gateways found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subnet",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not associated."
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "GWName",
+ "label": "NAT Gateway Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subnet",
+ "label": "Subnet"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle NAT gateways"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "natgw"
+ },
+ "name": "NATGW Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Private DNS\r\nReview private DNS without [Virtual Network Links](https://learn.microsoft.com/azure/dns/private-dns-virtual-network-links).\r\n",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle private dns"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.network/privatednszones\" and properties.numberOfVirtualNetworkLinks == 0\r\n| project id, PrivateDNSName=name, NumberOfRecordSets=tostring(properties.numberOfRecordSets),resourceGroup=tostring(strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)),vNets=tostring(properties.properties.numberOfVirtualNetworkLinks), subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Idle private DNS ",
+ "noDataMessage": "No idle private DNS found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "vNets",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "0",
+ "representation": "2",
+ "text": "Not associated to any vNET"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not associated to any vNET"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subnet",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not associated."
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "PrivateDNSName",
+ "label": "Private DNS name"
+ },
+ {
+ "columnId": "NumberOfRecordSets",
+ "label": "Number of DNS records"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "vNets",
+ "label": "vNETs associated"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle private DNS"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Private endpoints\r\nReview [Private Endpoints](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) that are not connected to any resource.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for idle private endpoints"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ \"microsoft.network/privateendpoints\"\r\n| extend connection = iff(array_length(properties.manualPrivateLinkServiceConnections) > 0, properties.manualPrivateLinkServiceConnections[0], properties.privateLinkServiceConnections[0])\r\n| extend subnetId = properties.subnet.id\r\n| extend subnetIdSplit = split(subnetId, \"/\")\r\n| extend vnetId = strcat_array(array_slice(subnetIdSplit,0,8), \"/\")\r\n| extend serviceId = tostring(connection.properties.privateLinkServiceId)\r\n| extend serviceIdSplit = split(serviceId, \"/\")\r\n| extend serviceName = tostring(serviceIdSplit[8])\r\n| extend serviceTypeEnum = iff(isnotnull(serviceIdSplit[6]), tolower(strcat(serviceIdSplit[6], \"/\", serviceIdSplit[7])), \"microsoft.network/privatelinkservices\")\r\n| extend stateEnum = tostring(connection.properties.privateLinkServiceConnectionState.status)\r\n| extend stateDescription = tostring(connection.properties.privateLinkServiceConnectionState.description)\r\n| extend groupIds = tostring(connection.properties.groupIds[0])\r\n| where stateEnum == \"Disconnected\"\r\n| extend Details = pack_all()\r\n| project id, PrivateDNSName=name, stateEnum, stateDescription, resourceGroup=tostring(strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)),serviceName, serviceTypeEnum, groupIds, vnetId, subnetId,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Idle private endpoints",
+ "noDataMessage": "No idle private endpoints found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "serviceTypeEnum",
+ "formatter": 16,
+ "formatOptions": {
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "vnetId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subnetId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "PrivateDNSName",
+ "label": "Private Endpoint name"
+ },
+ {
+ "columnId": "stateEnum",
+ "label": "State"
+ },
+ {
+ "columnId": "stateDescription",
+ "label": "State description"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "serviceName",
+ "label": "Resource Name"
+ },
+ {
+ "columnId": "serviceTypeEnum",
+ "label": "Service Type"
+ },
+ {
+ "columnId": "groupIds",
+ "label": "Resource Sub-type"
+ },
+ {
+ "columnId": "vnetId",
+ "label": "Subnet"
+ },
+ {
+ "columnId": "subnetId",
+ "label": "Subscription"
+ }
+ ]
+ }
+ },
+ "name": "query - Idle private endpoint"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "privatedns"
+ },
+ "name": "Private DNS and Private Endpoints Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for Azure Firewall\r\n\r\n## Azure Firewall Premium SKU\r\nThis table identifies Azure Firewalls with Premium SKU and evaluates whether the associated policy incorporates premium-only features or not. If a Premium SKU Firewall lacks a policy with premium features, such as TLS or intrusion detection it will be shown here. To learn more about Azure Firewall skus, check this [SKU comparison table](https://learn.microsoft.com/azure/firewall/choose-firewall-sku). ",
+ "style": "upsell"
+ },
+ "name": "Recommendations for premium Firewall"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'Microsoft.Network/azureFirewalls' and properties.sku.tier==\"Premium\"\r\n| project FWID=id, firewallName = name, SkuTier = tostring(properties.sku.tier), resourceGroup, location\r\n| join kind=inner (\r\n resources\r\n | where type =~ 'microsoft.network/firewallpolicies'\r\n | mv-expand properties.firewalls\r\n | extend intrusionDetection = tostring(properties.intrusionDetection contains \"Alert\" or properties.intrusionDetection contains \"Deny\"), transportSecurity = tostring(properties.transportSecurity contains \"keyVaultSecretId\")\r\n | extend FWID=tostring(properties_firewalls.id)\r\n | where intrusionDetection == \"False\" and transportSecurity == \"False\"\r\n | project PolicyName = name, PolicySKU=tostring(properties.sku.tier), intrusionDetection, transportSecurity, FWID\r\n) on FWID",
+ "size": 0,
+ "title": "Azure Firewall Premium",
+ "noDataMessage": "No Azure Firewall Premium found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "firewallName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "FWID1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Error-Connection not configured"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "FWID",
+ "label": "Firewall Name"
+ },
+ {
+ "columnId": "firewallName",
+ "label": "FWName"
+ },
+ {
+ "columnId": "SkuTier",
+ "label": "SKU"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "PolicyName",
+ "label": "Policy Name"
+ },
+ {
+ "columnId": "PolicySKU",
+ "label": "Policy SKU"
+ },
+ {
+ "columnId": "intrusionDetection",
+ "label": "Is Intrusion Detection enabled?"
+ },
+ {
+ "columnId": "transportSecurity",
+ "label": "Is TLS enabled?"
+ }
+ ]
+ }
+ },
+ "name": "query - Optimize Premium AZ Firewall"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Avoid multiple Firewall instances in the same region\r\nOptimize the use of Azure Firewall by having a central instance of Azure Firewall in the hub virtual network or Virtual WAN secure hub and share the same firewall across many spoke virtual networks that are connected to the same hub from the same region. Ensure there's no unexpected cross-region traffic as part of the hub-spoke topology nor multiple Azure firewall instances deployed to the same region. To learn more about Azure Firewall design principles, check [Azure Well-Architected Framework review - Azure Firewall](https://learn.microsoft.com/azure/well-architected/service-guides/azure-firewall#cost-optimization).",
+ "style": "upsell"
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'Microsoft.Network/azureFirewalls'\r\n| mv-expand properties.ipConfigurations\r\n| project FWID=id, firewallName = name, SkuTier = tostring(properties.sku.tier), FWRG=resourceGroup, FWLocation=location, SubnetID=tostring(properties_ipConfigurations.properties.subnet.id)\r\n| join (\r\nresources\r\n| where type =~ 'Microsoft.Network/virtualNetworks' \r\n| mv-expand properties.subnets\r\n| where properties_subnets.id has 'AzureFirewallSubnet'\r\n| extend SubnetID=tostring(properties_subnets.id), SubnetName=name, SubnetLocation=location, SubnetRG=resourceGroup) on SubnetID\r\n| project FWID, FWRG,FWLocation, SubnetID,SubnetName, SubnetRG, SubnetLocation\r\n",
+ "size": 0,
+ "title": "Azure Firewall per location",
+ "noDataMessage": "No Firewall deployed",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SubnetName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "firewallName",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "FWID1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "status",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Error-Connection not configured"
+ }
+ ]
+ }
+ }
+ ],
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "FWID",
+ "label": "Firewall Name"
+ },
+ {
+ "columnId": "FWRG",
+ "label": "Firewall Resource Group"
+ },
+ {
+ "columnId": "FWLocation",
+ "label": "Firewall Location"
+ },
+ {
+ "columnId": "SubnetID",
+ "label": "Vnet / Subnet Name"
+ },
+ {
+ "columnId": "SubnetName",
+ "label": "Subnet extended Name"
+ },
+ {
+ "columnId": "SubnetRG",
+ "label": "Subnet Resource Group"
+ },
+ {
+ "columnId": "SubnetLocation",
+ "label": "Subnet Location"
+ }
+ ]
+ }
+ },
+ "name": "query - Firewall per Location"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "firewall"
+ },
+ "name": "Firewall Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Recommendations for ExpressRoute\r\n\r\nReview idle ExpressRoute circuits that has not been provisioned (service provider has not completed provisioning or has deprovisioned), as they may represent additional cost.",
+ "style": "upsell"
+ },
+ "name": "Recommendations for ExpressRoute"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type =~ 'Microsoft.Network/expressRouteCircuits' and properties.serviceProviderProvisioningState == \"NotProvisioned\"\r\n| extend ServiceLocation=tostring(properties.serviceProviderProperties.peeringLocation), ServiceProvider=tostring(properties.serviceProviderProperties.serviceProviderName), BandwidthInMbps=tostring(properties.serviceProviderProperties.bandwidthInMbps)\r\n| project ERId=id,ERName = name, ERRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), SKUFamily=tostring(sku.family), ERLocation = location, ServiceLocation, ServiceProvider, BandwidthInMbps\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | extend ERId=id\r\n | distinct ERId\r\n )\r\n on ERId\r\n\r\n",
+ "size": 0,
+ "title": "Idle ExpressRoute circuits",
+ "noDataMessage": "No idle ExpressRoute circuits found",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ERId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "ERId",
+ "label": "ExpressRoute ID"
+ },
+ {
+ "columnId": "ERName",
+ "label": "ER Name"
+ },
+ {
+ "columnId": "ERRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU Name"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SKUFamily",
+ "label": "SKU Family"
+ },
+ {
+ "columnId": "ERLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "ServiceLocation",
+ "label": "Service Location"
+ },
+ {
+ "columnId": "ServiceProvider",
+ "label": "Service Provider"
+ },
+ {
+ "columnId": "BandwidthInMbps",
+ "label": "Bandwidth in Mbps"
+ }
+ ]
+ }
+ },
+ "name": "Idle ExpressRoute circuits"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "ER"
+ },
+ "name": "ExpressRoute Group"
+ }
+ ]
+ },
+ "name": "networking - Subscription"
+ }
+ ]
+ },
+ "name": "group - 0"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Networking"
+ }
+ ],
+ "name": "NetworkingGroup",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "title": "Storage cost optimization recommendations",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "37ceb1c3-3930-4689-a90b-22f26e42bd81",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "08f5fe68-c2e3-4882-9300-b3e33f572dfe",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "4fea3013-df84-4930-a453-8a6bd0375130",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "8412f39d-ee67-4979-b887-47463b8848c2",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "50c68f38-13a0-4aff-a259-4426c83b7cc0",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "eae8a0d2-14e6-4cd1-a2d2-fd6b207cf517",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Storage Accounts",
+ "subTarget": "Storage",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Managed Disks",
+ "subTarget": "Disks",
+ "style": "link"
+ },
+ {
+ "id": "86ff248b-1ce4-4194-8cd4-b1e0a9956b5d",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Backup",
+ "subTarget": "Backup",
+ "style": "link"
+ },
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Advisor recommendations",
+ "subTarget": "advisorStorage",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Storage"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Idle backups\r\n\r\nReview protected items backup activity to determine if there are items that have not been backed up in the last 90 days. This could either mean that the underlying resource that's being backed up doesn't exist anymore or there's some issue with the resource that's preventing backups from being taken reliably.\r\n",
+ "style": "upsell"
+ },
+ "name": "text - idleBackup"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "recoveryservicesresources\r\n| where type =~ 'microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems'\r\n| extend vaultId = tostring(properties.vaultId),resourceId = tostring(properties.sourceResourceId),idleBackup= datetime_diff('day', now(), todatetime(properties.lastBackupTime)) > 90, resourceType=tostring(properties.workloadType), protectionState=tostring(properties.protectionState),lastBackupTime=tostring(properties.lastBackupTime), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),lastBackupDate=todatetime(properties.lastBackupTime)\r\n| where idleBackup != 0\r\n| project resourceId,vaultId,idleBackup,lastBackupDate,resourceType,protectionState,lastBackupTime,location,resourceGroup,subscriptionId\r\n| join kind = inner(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend vaultId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | project vaultId\r\n )\r\n on vaultId\r\n | project-away vaultId1",
+ "size": 0,
+ "title": "Idle backups",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "idleBackup",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": ">",
+ "thresholdValue": "0",
+ "representation": "2",
+ "text": "No backup in the last 90 days"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "resourceId",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "idleBackup",
+ "label": "Backup activity"
+ },
+ {
+ "columnId": "lastBackupDate",
+ "label": "Last backup date"
+ },
+ {
+ "columnId": "resourceType",
+ "label": "Resource type"
+ },
+ {
+ "columnId": "protectionState",
+ "label": "Protection state"
+ },
+ {
+ "columnId": "lastBackupTime",
+ "label": "Last backup time"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "name": "query - idleBackups"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Backup storage redundancy settings\r\n\r\nBy default, when you configure backup for resources, geo-redundant storage (GRS) replication is applied to these backups. While this is the recommended storage replication option as it creates more redundancy for your critical data, you can choose to protect items using locally-redundant storage (LRS) if that meets your backup availability needs for dev-test workloads. Using LRS instead of GRS halves the cost of your backup storage. \r\n\r\nπ±οΈClick on each vault to see the configured storage replication\r\n",
+ "style": "upsell"
+ },
+ "name": "text - backupReplication"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "Resources\r\n| where type == 'microsoft.recoveryservices/vaults'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend skuTier = tostring(sku['tier']), skuName = tostring(sku['name']), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),redundancySettings = tostring(properties.redundancySettings['standardTierStorageRedundancy'])\r\n| order by id asc\r\n| project id,redundancySettings, resourceGroup, location,subscriptionId, skuTier, skuName\r\n| join kind = innerunique (\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend vaultId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | project id\r\n)\r\non id\r\n| project-away id1\r\n",
+ "size": 0,
+ "title": "Recovery vaults storage replication ",
+ "exportedParameters": [
+ {
+ "fieldName": "RGVault",
+ "parameterName": "resourceGroupVault",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "subscriptionId",
+ "parameterName": "subscriptionId",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "name",
+ "parameterName": "vaultName",
+ "parameterType": 1
+ }
+ ],
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "redundancySettings",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "GeoRedundant",
+ "representation": "Globe",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "ResourceFlat",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "RGVault",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ }
+ ]
+ }
+ },
+ "name": "query - backupStorageReplication"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Backup"
+ },
+ "name": "group - Backup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Storage accounts\r\nGeneral-purpose v2 storage accounts support the latest Azure Storage features and incorporate all of the functionality of general-purpose v1 and Blob storage accounts. General-purpose v2 accounts are recommended for most storage scenarios.\r\n\r\n1. General-purpose v2 accounts deliver the lowest per-gigabyte capacity prices for Azure Storage, as well as industry-competitive transaction prices.\r\n2. General-purpose v2 accounts support default account access tiers of hot or cool and blob level tiering between hot, cool, or archive.\r\n3. General-purpose v2 accounts allows you to also use lifecycle management to optimize your storage cost",
+ "style": "upsell"
+ },
+ "name": "Storage accounts"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'Microsoft.Storage/StorageAccounts' and kind !='StorageV2' and kind !='FileStorage' and kind != 'BlockBlobStorage'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend StorageAccountName=name, SAKind=kind,AccessTier=tostring(properties.accessTier),SKUName=sku.name, SKUTier=sku.tier, Location=location\r\n| order by id asc\r\n| project id,StorageAccountName, SKUName, SKUTier, SAKind,AccessTier, resourceGroup, Location, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Storage accounts which are not v2",
+ "noDataMessage": "All storage accounts are General-purpose v2",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SKUName",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SKUTier",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "SAKind",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "AccessTier",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "storageaccount",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": "Resource",
+ "subTarget": "insights",
+ "linkIsContextBlade": true,
+ "showIcon": true
+ }
+ }
+ ],
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_id_0",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "StorageAccountName",
+ "label": "Name"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SAKind",
+ "label": "Kind"
+ },
+ {
+ "columnId": "AccessTier",
+ "label": "Access Tier"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "$gen_link_id_0",
+ "sortOrder": 1
+ }
+ ]
+ },
+ "name": "Get-Storagev1"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Storage"
+ },
+ "name": "group - StorageAccount"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Unattached Managed Disks\r\n\r\nReview Managed Disks that are not attached to any Virtual machine.\r\n\r\n## Last Modified Date\r\nClick on a cell in the specified row to view the last modified date. This may help identify when the disk became idle.\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 3"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/disks' and managedBy == \"\"\r\n| extend diskState = tostring(properties.diskState)\r\n| where (tags !contains \"kubernetes.io-created-for-pvc\") and tags !contains \"ASR-ReplicaDisk\" and tags !contains \"asrseeddisk\" and tags !contains \"RSVaultBackup\"\r\n| where (managedBy == \"\" and diskState != 'ActiveSAS')\r\nor (diskState == 'Unattached' and diskState != 'ActiveSAS')\r\n| extend DiskId=id, DiskIDfull=id, DiskName=name, SKUName=sku.name, SKUTier=sku.tier, DiskSizeGB=tostring(properties.diskSizeGB), Location=location, TimeCreated=tostring(properties.timeCreated), QuickFix=id, SubId=subscriptionId\r\n| order by DiskId asc \r\n| project DiskId,DiskIDfull, DiskName, DiskSizeGB, SKUName, SKUTier, resourceGroup, QuickFix, Location, TimeCreated, subscriptionId,SubId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend DiskId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct DiskId\r\n )\r\n on DiskId",
+ "size": 0,
+ "title": "Unattached disks",
+ "noDataMessage": "There aren't any unattached disks!",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "DiskIDfull",
+ "parameterName": "DiskID"
+ },
+ {
+ "fieldName": "DiskName",
+ "parameterName": "DiskName",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "resourceGroup",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "SubId",
+ "parameterName": "subscriptionId",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "DiskIDfull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "ArmAction",
+ "linkLabel": "Remove Idle Disk",
+ "linkIsContextBlade": true,
+ "templateRunContext": {
+ "componentIdSource": "column",
+ "componentId": "DiskId",
+ "templateUriSource": "static",
+ "templateUri": "https://raw.githubusercontent.com/sebassem/MS-learn-Workbooks/main/Deploy-Tag.json",
+ "templateParameters": [
+ {
+ "name": "DiskID",
+ "source": "static",
+ "value": "DiskId",
+ "kind": "stringValue"
+ }
+ ],
+ "titleSource": "static",
+ "title": "Remove Idle Disk",
+ "descriptionSource": "static",
+ "description": "# Description\r\nThis ARM Template will remove the selected disk.\r\n\r\n# Actions:\r\n- Click \"Remove Idle Disk\" to remove the selected item.\r\n- Click View Template to examine the template and parameters used during deployment\r\n\r\n\r\n\r\n",
+ "runLabelSource": "static",
+ "runLabel": "Remove Idle Disk"
+ },
+ "armActionContext": {
+ "path": "/{DiskID}?api-version=2021-04-01",
+ "headers": [],
+ "params": [
+ {
+ "key": "DiskID",
+ "value": ""
+ }
+ ],
+ "httpMethod": "DELETE",
+ "title": "Remove Idle Disks",
+ "description": "# Disk Deletion Warning: {DiskName}\r\n\r\n**Attention!**\r\n\r\nThis action will permanently remove the disk with the name **{DiskName}**. Please ensure that this disk is not currently in use and that you are deleting the correct disk.\r\n\r\n**Resource Details:**\r\n\r\n- Disk Name: {DiskName}\r\n- Resource Group: {ResourceGroup}\r\n\r\n### Required RBAC Permissions\r\n\r\nTo perform this action, you need to have **Contributor** permissions on the Resource Group where the disk is located.\r\n\r\nPlease review the information carefully before proceeding with the deletion.\r\n",
+ "actionName": "Removing Idle Dsk",
+ "runLabel": "I understand, remove disk {DiskName}"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "labelSettings": [
+ {
+ "columnId": "DiskId",
+ "label": "Resource ID"
+ },
+ {
+ "columnId": "DiskName",
+ "label": "Name"
+ },
+ {
+ "columnId": "DiskSizeGB",
+ "label": "Disk Size (GB)"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "QuickFix",
+ "label": "Delete disk?"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "TimeCreated",
+ "label": "Time Created"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "customWidth": "80",
+ "name": "Get-Idle-Disk"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{subscriptionId}/resources?\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-04-01\"},{\"key\":\"$expand\",\"value\":\"createdTime,changedTime,provisioningState\"},{\"key\":\"$filter\",\"value\":\"name eq '{DiskName}' and resourceGroup eq'{ResourceGroup}'\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.value\",\"columns\":[{\"path\":\"$..id\",\"columnid\":\"id\"},{\"path\":\"$..createdTime\",\"columnid\":\"createdTime\"},{\"path\":\"$..changedTime\",\"columnid\":\"changedTime\"},{\"path\":\"$.name\",\"columnid\":\"name\"}]}}]}",
+ "size": 0,
+ "title": "Disk last modified date",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "createdTime",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Name"
+ },
+ {
+ "columnId": "createdTime",
+ "label": "Created time"
+ },
+ {
+ "columnId": "changedTime",
+ "label": "Last change time"
+ }
+ ]
+ }
+ },
+ "customWidth": "20",
+ "conditionalVisibility": {
+ "parameterName": "DiskID",
+ "comparison": "isNotEqualTo",
+ "value": ""
+ },
+ "name": "IdleDisk date"
+ }
+ ]
+ },
+ "name": "Idle Disks Group"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# Premium disks attached to powered off virtual machines\r\nIf the VM associated with these premium disks has been deallocated for an extended period, consider changing the disk SKU to a less expensive option to save on costs. Premium disks are typically used for high-performance workloads, and if the VM is not in use, it might be more economical to downgrade the disk.",
+ "style": "upsell"
+ },
+ "name": "text - premiumAttachedToPoweredOffVMs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend vmId = tolower(tostring(id)), vmName = name, vmState = tostring(properties.extended.instanceView.powerState.displayStatus),VMRG=resourceGroup\r\n| where vmState == \"VM stopped\" or vmState == \"VM deallocated\"\r\n| extend storageProfile = parse_json(tostring(properties.storageProfile.osDisk))\r\n| extend managedDiskId = tolower(tostring(storageProfile.managedDisk.id))\r\n| join kind=inner (\r\n resources\r\n | where type == \"microsoft.compute/disks\"\r\n | where sku.name == \"Premium_LRS\" or sku.name == \"Premium_ZRS\"\r\n | extend diskId = tolower(tostring(id)), diskName = name, diskSKU=tostring(sku.name), diskTier=tostring(sku.tier)\r\n) on $left.managedDiskId == $right.diskId\r\n| project vmId, vmName, vmState, diskName,VMRG, diskId, diskSKU,diskTier\r\n",
+ "size": 0,
+ "title": "Premium disks attached to powered off VMs",
+ "noDataMessage": "None of your deallocated VMs have premium disks",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "vmName",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "vmId",
+ "label": "VM ID"
+ },
+ {
+ "columnId": "vmName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "vmState",
+ "label": "VM state"
+ },
+ {
+ "columnId": "diskName",
+ "label": "Disk name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "VM RG"
+ },
+ {
+ "columnId": "diskId",
+ "label": "Disk ID"
+ },
+ {
+ "columnId": "diskSKU",
+ "label": "Disk SKU"
+ },
+ {
+ "columnId": "diskTier",
+ "label": "Disk Tier"
+ }
+ ]
+ }
+ },
+ "name": "query-PremiumDiskDeallocatedVM"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Old Managed Disks snapshots\r\n\r\nReview Managed Disks snapshots that are older than 30 days\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 4"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend TimeCreated = properties.timeCreated\r\n| extend resourceGroup=strcat(\"/subscriptions/\",subscriptionId,\"/resourceGroups/\",resourceGroup)\r\n| where TimeCreated < ago(30d)\r\n| order by id asc \r\n| project id, resourceGroup, location, TimeCreated ,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "title": "Disk Snapshots with + 30 Days",
+ "noDataMessage": "No Snapshots with more than 30 days.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "TimeCreated",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Name"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "TimeCreated",
+ "label": "Time Created"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ }
+ ]
+ }
+ },
+ "name": "Get-Old-Snapshots"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Managed Disks snapshots using Premium storage\r\n\r\nTo save 60% of cost, we recommend storing your snapshots in Standard Storage, regardless of the storage type of the parent disk. It is the default option for Managed Disks snapshots. Migrate your snapshot from Premium to Standard Storage.\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend StorageSku = tostring(sku.tier), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),diskSize=tostring(properties.diskSizeGB)\r\n| where StorageSku == \"Premium\"\r\n| project id,name,StorageSku,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
+ "size": 0,
+ "title": "Snapshots using premium storage",
+ "noDataMessage": "No snapshots are using Premium storage",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Id"
+ },
+ {
+ "columnId": "name",
+ "label": "Name"
+ },
+ {
+ "columnId": "StorageSku",
+ "label": "SKU"
+ },
+ {
+ "columnId": "diskSize",
+ "label": "Disk Size (GB)"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Id"
+ }
+ ]
+ }
+ },
+ "name": "query - Snapshots using premium storage"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Orphaned Managed Disks snapshots\r\n\r\nReview snapshots with deleted source disks.\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 6"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend parentDisk = properties.creationData.sourceResourceId, diskSize=tostring(properties.diskSizeGB),resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id,parentDisk,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
+ "size": 0,
+ "title": "All Managed Disks snapshots",
+ "noDataMessage": "No snapshots found",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Id"
+ },
+ {
+ "columnId": "parentDisk",
+ "label": "Parent Disk Resource Id"
+ },
+ {
+ "columnId": "diskSize",
+ "label": "Disk size (GB)"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Id"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "IsVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - Retrieve all snapshots"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/disks'\r\n| project id\r\n",
+ "size": 0,
+ "title": "All managed disks",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "Resource Id"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "True"
+ },
+ "name": "query - Retrieve all managed disks"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\",\"mergeType\":\"leftanti\",\"leftTable\":\"query - Retrieve all snapshots\",\"rightTable\":\"query - Retrieve all managed disks\",\"leftColumn\":\"parentDisk\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[query - Retrieve all snapshots].id\",\"mergedName\":\"Resource Id\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].parentDisk\",\"mergedName\":\"Parent Disk Resource Id\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].diskSize\",\"mergedName\":\"Disk size (GB)\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].location\",\"mergedName\":\"Location\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].subscriptionId\",\"mergedName\":\"Subscription Id\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"},{\"originalName\":\"[query - Retrieve all snapshots].id1\",\"mergedName\":\"id1\",\"fromId\":\"d0a11ffb-579b-4259-827d-7ea62e3021fe\"}]}",
+ "size": 0,
+ "title": "Snapshots with deleted source disk",
+ "noDataMessage": "No orphaned snapshots found",
+ "noDataMessageStyle": 3,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Parent Disk Resource Id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Subscription Id",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "Resource Id",
+ "label": "Resource Id"
+ },
+ {
+ "columnId": "Parent Disk Resource Id",
+ "label": "Parent Disk resource Id"
+ },
+ {
+ "columnId": "Disk size (GB)",
+ "label": "Disk size (GB)"
+ },
+ {
+ "columnId": "Location",
+ "label": "Location"
+ },
+ {
+ "columnId": "Resource Group",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "Subscription Id",
+ "label": "Subscription Id"
+ }
+ ]
+ }
+ },
+ "showPin": false,
+ "name": "query - orphaned snapshots"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "Disks"
+ },
+ "name": "Managed Disks Group"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Impact=tostring(properties.impact),resourceGroup,subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| where SubCategory has \"Microsoft.Storage\"\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Recommendation=tostring(properties.shortDescription.problem), Impact=tostring(properties.impact),resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=properties.impact,resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2\r\n| where resourceGroup in ({ResourceGroup})",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Storage",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Storage"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where type has \"Microsoft.Storage\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all storageresources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"e84cba0d-e501-4f55-a761-9126fb305030\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Storage\",\"rightTable\":\"query - tags - list all storageresources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Storage].AffectedResource\",\"mergedName\":\"Affected Resource\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].Category\",\"mergedName\":\"Recommendation Category\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].SubCategory\",\"mergedName\":\"Affected Resource Type\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].subscriptionId\",\"mergedName\":\"Subscription ID\",\"fromId\":\"e84cba0d-e501-4f55-a761-9126fb305030\"},{\"originalName\":\"[query - tags - list all storageresources].id\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].excludeProperty\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].isActive1\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].AdditionaInfo\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].lowCpuThreshold\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].excludeRecomm\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].recommendationTypeId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].maxCpuP95\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].stableId\"},{\"originalName\":\"[Get-AdvisorRecommendations-Storage].id\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Storage",
+ "noDataMessageStyle": 3,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Affected Resource Type",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Subscription ID",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ]
+ }
+ }
+ },
+ "showPin": false,
+ "name": "query - Merge - Storage Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "advisorStorage"
+ },
+ "name": "AdvisorGroupStorage"
+ }
+ ]
+ },
+ "name": "group - 0"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Storage"
+ }
+ ],
+ "name": "StorageGroup",
+ "styleSettings": {
+ "showBorder": true
+ }
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "94bd2bd0-5aa8-4df6-8cf7-603407f4e2d8",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription"
+ },
+ {
+ "id": "faa42c49-ab77-42a1-9aaf-d8508b9408af",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "99a44dfa-30e2-4b2e-80a8-e05d2daab672",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "a02c21a6-cd5e-4e02-bb87-00993a06d8e8",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "add52b5b-2e8d-45d3-a304-f6d8f4b205f7",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "CostInformation"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isNotEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "1fc44b9a-2dd3-4b1f-bebd-b89d4ba6dfec",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual machines",
+ "subTarget": "VM",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "8a2fa734-a30e-404e-bf99-927c1891d4b9",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Virtual machine scale sets",
+ "subTarget": "VMSS",
+ "style": "link"
+ },
+ {
+ "id": "6d563f46-7150-458c-9ee4-0558abe8e29b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Advisor recommendations",
+ "subTarget": "advisorCompute",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - Compute"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Virtual Machines\r\n## Stopped virtual machines\r\nA virtual machine in a stopped state is still allocated the resources it was assigned, such as CPU and memory, but the VM itself is powered off. This allows for a quick startup when needed, but you are still billed for the allocated resources.",
+ "style": "upsell"
+ },
+ "name": "text - StoppedVM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/virtualmachines' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM deallocated' and tostring(properties.extended.instanceView.powerState.displayStatus) != 'VM running'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| order by id asc\r\n| project id, PowerState, VMLocation, resourceGroup, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n | project-away id1",
+ "size": 0,
+ "title": "Virtual Machines in a Stopped State",
+ "noDataMessage": "You have no VMs in a stopped state",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "name": "Get-StoppedVM"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Deallocated virtual machines\r\nA virtual machine in a deallocated state is not only powered off, but the underlying host infrastructure is also released, resulting in no charges for the allocated resources while the VM is in this state. However, some Azure resources such as disks and networking continue to incur charges.",
+ "style": "upsell"
+ },
+ "name": "text - DeallocatedVM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/virtualmachines' and tostring(properties.extended.instanceView.powerState.displayStatus) == 'VM deallocated'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend PowerState=tostring(properties.extended.instanceView.powerState.displayStatus), VMLocation=location, resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| order by id asc\r\n| project id, PowerState, VMLocation, resourceGroup, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n | project-away id1",
+ "size": 0,
+ "title": "Virtual Machines in a deallocated State",
+ "noDataMessage": "You have no VMs in a deallocated state",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true
+ }
+ },
+ "name": "query - vmDeallocatedState"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "### Explore Different Processor Architectures to Optimize Costs\r\n\r\nDifferent processor architectures may offer cost advantages depending on your workload requirements. By exploring various processor types, you may find opportunities to reduce compute costs.\r\n\r\nConsider evaluating different architectures to determine the best fit for your needs.\r\n",
+ "style": "info"
+ },
+ "name": "Text Processor type"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/virtualmachines'\r\n| extend vmSize = properties.hardwareProfile.vmSize\r\n| extend processorType = case(\r\n // ARM Processors\r\n vmSize has \"Epsv5\" or vmSize has \"Epdsv5\" or vmSize has \"Dpsv5\" or vmSize has \"Dpdsv\", \"ARM\",\r\n // AMD Processors\r\n vmSize has \"Standard_D2a\" or vmSize has \"Standard_D4a\" or vmSize has \"Standard_D8a\" or vmSize has \"Standard_D16a\" or vmSize has \"Standard_D32a\" or vmSize has \"Standard_D48a\" or vmSize has \"Standard_D64a\" or vmSize has \"Standard_D96a\" or vmSize has \"Standard_D2as\" or vmSize has \"Standard_D4as\" or vmSize has \"Standard_D8as\" or vmSize has \"Standard_D16as\" or vmSize has \"Standard_D32as\" or vmSize has \"Standard_D48as\" or vmSize has \"Standard_D64as\" or vmSize has \"Standard_D96as\", \"AMD\",\r\n \"Intel\"\r\n)\r\n| summarize count() by processorType\r\n",
+ "size": 0,
+ "title": "ProcessorType per VM",
+ "noDataMessage": "There are no VMs in your environment.",
+ "noDataMessageStyle": 5,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "tileSettings": {
+ "showBorder": false
+ }
+ },
+ "customWidth": "50",
+ "name": "ProcessorType per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources\r\n| where type == 'microsoft.compute/virtualmachines'\r\n| extend vmSize = properties.hardwareProfile.vmSize\r\n| extend processorType = case(\r\n // ARM Processors\r\n vmSize has \"Epsv5\" or vmSize has \"Epdsv5\" or vmSize has \"Dpsv5\" or vmSize has \"Dpdsv\", \"ARM\",\r\n // AMD Processors\r\n vmSize has \"Standard_D2a\" or vmSize has \"Standard_D4a\" or vmSize has \"Standard_D8a\" or vmSize has \"Standard_D16a\" or vmSize has \"Standard_D32a\" or vmSize has \"Standard_D48a\" or vmSize has \"Standard_D64a\" or vmSize has \"Standard_D96a\" or vmSize has \"Standard_D2as\" or vmSize has \"Standard_D4as\" or vmSize has \"Standard_D8as\" or vmSize has \"Standard_D16as\" or vmSize has \"Standard_D32as\" or vmSize has \"Standard_D48as\" or vmSize has \"Standard_D64as\" or vmSize has \"Standard_D96as\" or vmSize has \"Standard_D2ads\" or vmSize has \"Standard_D4ads\"or vmSize has \"Standard_D8ads\" or vmSize has \"Standard_D16ads\" or vmSize has \"Standard_D32ads\"or vmSize has \"Standard_D48ads\"or vmSize has \"Standard_D64ads\"or vmSize has \"Standard_D96ads\", \"AMD\",\r\n \"Intel\"\r\n)\r\n| project vmName = name, processorType, vmSize, resourceGroup\r\n",
+ "size": 0,
+ "title": "List of VMs per processor type",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "customWidth": "50",
+ "name": "query - 1"
+ }
+ ]
+ },
+ "name": "Group VM per Processor Type"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ },
+ "name": "group - VMs"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type =~ 'microsoft.advisor/recommendations'\r\n| where resourceGroup in ({ResourceGroup})\r\n| where properties.category == 'Cost' and properties.lastUpdated >= ago(1d)\r\n| extend AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Impact=tostring(properties.impact),subscriptionId,Recommendation=tostring(properties.shortDescription.problem), id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95,resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId), Category=tostring(properties.category), SubCategory=tostring(properties.impactedField), Recommendation=tostring(properties.shortDescription.problem), Impact=tostring(properties.impact),resourceGroup,subscriptionId, id, stableId = name, recommendationTypeId = tostring(properties.recommendationTypeId), maxCpuP95 = properties.extendedProperties.MaxCpuP95\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isempty(resourceGroup) == true\r\n| project subscriptionId, excludeRecomm = properties.exclude, lowCpuThreshold = properties.lowCpuThreshold, AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=tostring(properties.impact),resourceGroup,AdditionaInfo=properties.extendedProperties,Recommendation=tostring(properties.shortDescription.problem))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| where Category == 'Cost' \r\n| where SubCategory has \"Microsoft.Compute\" or SubCategory has \"Container\" or SubCategory has \"Web\"\r\n| where SubCategory !has \"Microsoft.Compute/disks\"\r\n| project-away subscriptionId1, subscriptionId2, AffectedResource1, isActive2, isActive3, Impact1, Recommendation1, resourceGroup1, resourceGroup2",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Compute",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5,
+ "formatOptions": {
+ "customColumnWidthSetting": "19ch"
+ }
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "AffectedResource",
+ "label": "Affected Resource"
+ },
+ {
+ "columnId": "Category",
+ "label": "Recommendation Category"
+ },
+ {
+ "columnId": "SubCategory",
+ "label": "Affected Resource Type"
+ },
+ {
+ "columnId": "Recommendation",
+ "label": "Recommendation"
+ },
+ {
+ "columnId": "Impact",
+ "label": "Impact"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "IsVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-AdvisorRecommendations-Compute"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": " resources\r\n | where resourceGroup in ({ResourceGroup})\r\n | where (type has \"Microsoft.Compute\" or type has \"Microsoft.ContainerService\" or type has \"serverfarms\") and type !has \"Disks\"\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend AffectedResource=id,ResourceRG=resourceGroup\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n | project id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "isVisible",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - tags - list all compute resources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d446799d-b1af-4bca-9d72-84ba2d870039\",\"mergeType\":\"innerunique\",\"leftTable\":\"Get-AdvisorRecommendations-Compute\",\"rightTable\":\"query - tags - list all compute resources\",\"leftColumn\":\"AffectedResource\",\"rightColumn\":\"id\"}],\"projectRename\":[{\"originalName\":\"[Get-AdvisorRecommendations-Compute].AffectedResource\",\"mergedName\":\"Affected Resource\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].Category\",\"mergedName\":\"Recommendation Category\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].SubCategory\",\"mergedName\":\"Affected Resource Type\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].Recommendation\",\"mergedName\":\"Recommendation\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].Impact\",\"mergedName\":\"Impact\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].resourceGroup\",\"mergedName\":\"Resource Group\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].subscriptionId\",\"mergedName\":\"Subscription ID\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].id\",\"mergedName\":\"id\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].stableId\",\"mergedName\":\"stableId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].recommendationTypeId\",\"mergedName\":\"recommendationTypeId\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].maxCpuP95\",\"mergedName\":\"maxCpuP95\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].excludeRecomm\",\"mergedName\":\"excludeRecomm\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].lowCpuThreshold\",\"mergedName\":\"lowCpuThreshold\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].AdditionaInfo\",\"mergedName\":\"AdditionaInfo\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].isActive1\",\"mergedName\":\"isActive1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].excludeProperty\",\"mergedName\":\"excludeProperty\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[query - tags - list all compute resources].id\",\"mergedName\":\"id1\",\"fromId\":\"d446799d-b1af-4bca-9d72-84ba2d870039\"},{\"originalName\":\"[Get-AdvisorRecommendations-Compute].location\",\"mergedName\":\"location\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Azure Advisor Cost recommendations",
+ "noDataMessage": "You are following all of our cost recommendations for Compute",
+ "noDataMessageStyle": 3,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Group",
+ "formatter": 1
+ },
+ {
+ "columnMatch": "Affected Resource Type",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Resource Group",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription ID",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "stableId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "recommendationTypeId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "maxCpuP95",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeRecomm",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "lowCpuThreshold",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "AdditionaInfo",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "isActive1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "excludeProperty",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "rowLimit": 1000,
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Recommendation"
+ ]
+ }
+ }
+ },
+ "showPin": false,
+ "name": "query - Merge - Compute Advisor recommendations"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "advisorCompute"
+ },
+ "name": "AdvisorGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Virtual Machine Scale Sets\r\n## Save with Azure Spot VMs on Virtual Machine Scale Sets\r\nUsing Azure Spot Virtual Machines on scale sets allows you to take advantage of our unused capacity at a significant cost savings. At any point in time when Azure needs the capacity back, the Azure infrastructure will evict Azure Spot Virtual Machine instances. Therefore, Azure Spot Virtual Machine instances are great for workloads that can handle interruptions like batch processing jobs, dev/test environments, large compute workloads, and more.\r\n\r\n## Spot Priority Mix\r\nAzure allows you to have the flexibility of running a mix of uninterruptible standard VMs and interruptible Spot VMs for Virtual Machine Scale Set deployments. You're able to deploy this Spot Priority Mix using Flexible orchestration to easily balance between high-capacity availability and lower infrastructure costs according to your workload requirements\r\n",
+ "style": "upsell"
+ },
+ "name": "text - 8"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where type =~ 'microsoft.compute/virtualmachinescalesets'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend SpotVMs=tostring(properties.virtualMachineProfile.priority), SpotPriorityMix=tostring(properties.priorityMixPolicy), SKU=tostring(sku.name), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id, SKU, SpotVMs,SpotPriorityMix,subscriptionId,resourceGroup, location\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SpotVMs",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Spot",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "warning",
+ "text": "Not using Spot VMs"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "SpotPriorityMix",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "is Empty",
+ "representation": "2",
+ "text": "Not using Spot Priority Mix"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "id1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "id",
+ "label": "ID"
+ },
+ {
+ "columnId": "SKU",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SpotVMs",
+ "label": "Spot VMs"
+ },
+ {
+ "columnId": "SpotPriorityMix",
+ "label": "Spot Priority Mix"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "resourceGroup",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "location",
+ "label": "Location"
+ }
+ ]
+ }
+ },
+ "name": "query - 9"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VMSS"
+ },
+ "name": "group - VMSS"
+ }
+ ]
+ },
+ "name": "Compute - Subscription"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ {
+ "parameterName": "SelectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Compute"
+ }
+ ],
+ "name": "ComputeGroup",
+ "styleSettings": {
+ "showBorder": true
+ }
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "UsageOptimization"
+ },
+ "name": "group - usage optimization"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Commitment-based savings\r\nTo maximize your Azure savings, consider savings plans for flexible usage and reserved instances for persistent needs. Azure Savings plans offer reduced rates with a fixed hourly spend and reserved instances allow pre-purchasing VM base price. Both options provide discounts and adapt to your usage patterns, helping you manage costs effectively. Below is an estimate of how much you can potentially save with 1-Year commitment for each option based on your usage pattern for the last 30 days.β",
+ "style": "upsell"
+ },
+ "customWidth": "50",
+ "name": "text - P1YTotalSavings"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Commitment-based savings\r\nTo maximize your Azure savings, consider savings plans for flexible usage and reserved instances for persistent needs. Savings plans offer reduced rates with a fixed hourly spend, while reserved instances allow pre-purchasing VM base price. Both options provide discounts and adapt to your usage patterns, helping you manage costs effectively. Below is an estimate of how much you can save with 3-Year commitment for each option based on your usage pattern for the last 30 days.β",
+ "style": "upsell"
+ },
+ "customWidth": "50",
+ "name": "text - P3YTotalSavings - Copy"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and (properties.shortDescription.solution contains \"Reserved Instance\" or properties.shortDescription.solution contains \"savings plan\")\r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"P1Y\" and lookbackPeriod == \"Last 30 days\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId),\r\ntypeOfRecommendation = iif(properties.shortDescription.solution contains \"Reserved Instance\", \"Reservations\", \"Savings plan\")\r\n| where term == \"P1Y\" and lookbackPeriod == \"Last 30 days\"\r\n| summarize bin (sum(savings), 0.01) by typeOfRecommendation,currency\r\n| order by sum_savings desc\r\n",
+ "size": 0,
+ "title": "1 year total commitment-based savings",
+ "noDataMessage": "There are no commitment-based recommendations",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "value::all"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Reservations",
+ "label": "Azure Reservations"
+ },
+ {
+ "seriesName": "Savings plan",
+ "label": "Azure Savings Plan for Compute"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "name": "query - CommitmentBasedSavingsP1Y"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and (properties.shortDescription.solution contains \"Reserved Instance\" or properties.shortDescription.solution contains \"savings plan\")\r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"P3Y\" and lookbackPeriod == \"Last 30 days\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId),\r\ntypeOfRecommendation = iif(properties.shortDescription.solution contains \"Reserved Instance\", \"Reservations\", \"Savings plan\")\r\n| where term == \"P3Y\" and lookbackPeriod == \"Last 30 days\"\r\n| summarize bin (sum(savings), 0.01) by typeOfRecommendation,currency\r\n| order by sum_savings desc\r\n",
+ "size": 0,
+ "title": "3 years total commitment-based savings",
+ "noDataMessage": "There are no commitment-based recommendations",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "value::all"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Reservations",
+ "label": "Azure Reservations"
+ },
+ {
+ "seriesName": "Savings plan",
+ "label": "Azure Savings Plan for Compute"
+ }
+ ]
+ }
+ },
+ "customWidth": "50",
+ "name": "query - CommitmentBasedSavingsP3Y"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "792df0b2-35da-403d-999d-ff81ea8d4f56",
+ "cellValue": "selectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Hybrid Benefit",
+ "subTarget": "AHB",
+ "style": "link"
+ },
+ {
+ "id": "56eb4166-cb7c-4384-94a9-c5f201e1316d",
+ "cellValue": "selectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Reservations",
+ "subTarget": "Reservations",
+ "style": "link"
+ },
+ {
+ "id": "799d4fc7-5790-467c-84cc-ce4b4cc34a3f",
+ "cellValue": "selectedRateOptimizationTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure savings plan for compute",
+ "subTarget": "SavingsPlan",
+ "style": "link"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ "name": "links - rate optimization tabs"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "**Reserved instances** can provide a significant discount over on-demand prices. With reserved instances, you can pre-purchase the base costs for your virtual machines. \r\n Discounts will automatically apply to new or existing VMs that have the same size and region as your reserved instance. We analyzed your usage over selected Term, look-back period and recommend money-saving reserved instancesβ.\r\n This query will only provide you recommendations for single scope reserved instances. *To learn more about Reserved Instances, go to this [link.](https://learn.microsoft.com/azure/cost-management-billing/manage/understand-vm-reservation-charges)*",
+ "style": "info"
+ },
+ "name": "text - advisorReservationdDisclaimer"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "a1960768-9da4-455d-b6f6-6d43098cff76",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "2b8ca845-75ba-4f4b-acad-54ee50d66d54",
+ "version": "KqlParameterItem/1.0",
+ "name": "LookBackPeriod",
+ "label": "Look back period",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n {\"value\": \"Last 7 days\"},\r\n {\"value\": \"Last 30 days\"},\r\n {\"value\": \"Last 60 days\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Last 60 days"
+ },
+ {
+ "id": "953c9e4c-af03-4fb7-bf30-3f1bfdf09199",
+ "version": "KqlParameterItem/1.0",
+ "name": "term",
+ "label": "Term",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[[\r\n {\r\n \"value\": \"P1Y\",\r\n \"Selected\": \"true\"\r\n },\r\n {\r\n \"value\": \"P3Y\"\r\n }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "P3Y"
+ },
+ {
+ "id": "c46193fe-f1b2-49d1-a9bc-c9f5149f0194",
+ "version": "KqlParameterItem/1.0",
+ "name": "resourceType",
+ "label": "Resource type",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"Reserved Instance\"\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType)\r\n| distinct reservedResourceType",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - reservationsParams"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"Reserved Instance\" \r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| summarize Subscriptions=dcount(resources), \r\n bin (sum(savings), 0.01) by Recommendation ,reservedResourceType ,lookbackPeriod,scope,term ,currency\r\n| order by sum_savings desc\r\n",
+ "size": 0,
+ "title": "Reservations Summary",
+ "noDataMessage": "No reservations recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "categoricalbar",
+ "gridSettings": {
+ "filter": true,
+ "labelSettings": [
+ {
+ "columnId": "reservedResourceType",
+ "label": "Resource type"
+ },
+ {
+ "columnId": "lookbackPeriod",
+ "label": "Look back period"
+ },
+ {
+ "columnId": "scope",
+ "label": "Scope"
+ },
+ {
+ "columnId": "term",
+ "label": "Term"
+ },
+ {
+ "columnId": "currency",
+ "label": "Currency"
+ },
+ {
+ "columnId": "sum_savings",
+ "label": "Total annual savings"
+ }
+ ]
+ },
+ "chartSettings": {
+ "xAxis": "reservedResourceType",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Reservations Summary"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"Reserved Instance\" \r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nreservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend reservedResourceType=tostring(properties.extendedProperties.reservedResourceType),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nsubscription = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\" and reservedResourceType in ({resourceType})\r\n| project Recommendation,reservedResourceType,displaySKU,displayQty,savings,currency,lookbackPeriod,term,region,subscription\r\n| order by savings desc\r\n",
+ "size": 0,
+ "title": "Reservations details",
+ "noDataMessage": "No reservations recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Recommendation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "reservedResourceType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscription",
+ "reservedResourceType"
+ ],
+ "expandTopLevel": false
+ },
+ "labelSettings": [
+ {
+ "columnId": "displaySKU",
+ "label": "SKU"
+ },
+ {
+ "columnId": "displayQty",
+ "label": "Quantity"
+ },
+ {
+ "columnId": "savings",
+ "label": "Total annual savings"
+ },
+ {
+ "columnId": "currency",
+ "label": "Currency"
+ },
+ {
+ "columnId": "lookbackPeriod",
+ "label": "Look back period"
+ },
+ {
+ "columnId": "term",
+ "label": "Term"
+ },
+ {
+ "columnId": "region",
+ "label": "Region"
+ },
+ {
+ "columnId": "subscription",
+ "label": "Subscription"
+ }
+ ]
+ },
+ "chartSettings": {
+ "xAxis": "reservedResourceType",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Reservations details"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "Reservations"
+ }
+ ],
+ "name": "group - Reservations"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "We analyzed your compute usage over the last 30 days and recommend adding a savings plan to increase your savings. The savings plan unlocks lower prices on select compute services when you commit to spend a fixed hourly amount for 1 or 3 years. As you use select compute services globally, your usage is covered by the plan at reduced prices. During the times when your usage is above your hourly commitment, youβll simply be billed at your regular pay-as-you-go prices. With savings automatically applying across compute usage globally, youβll continue saving even as your usage needs change over time. Savings plan are more suited for dynamic workloads while accommodating for planned or unplanned changes while reservations are more suited for stable, predictable workloads with no planned changes. Saving estimates are calculated for individual subscriptions and the usage pattern observed over last 30 days. **Shared scope savings plans are available in purchase experience and can further increase savings.** \r\nTo learn more about Savings Plan, check out this [link.](https://learn.microsoft.com/azure/cost-management-billing/savings-plan/purchase-recommendations)β",
+ "style": "info"
+ },
+ "name": "text - advisorSavingsPlanDisclaimer"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "a1960768-9da4-455d-b6f6-6d43098cff76",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "2b8ca845-75ba-4f4b-acad-54ee50d66d54",
+ "version": "KqlParameterItem/1.0",
+ "name": "LookBackPeriod",
+ "label": "Look back period",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[[\r\n {\"value\": \"Last 7 days\"},\r\n {\"value\": \"Last 30 days\"},\r\n {\"value\": \"Last 60 days\"}\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Last 30 days"
+ },
+ {
+ "id": "953c9e4c-af03-4fb7-bf30-3f1bfdf09199",
+ "version": "KqlParameterItem/1.0",
+ "name": "term",
+ "label": "Term",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[[\r\n {\r\n \"value\": \"P1Y\",\r\n \"Selected\": \"true\"\r\n },\r\n {\r\n \"value\": \"P3Y\"\r\n }\r\n]",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "P1Y"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "name": "parameters - savingsPlanParams"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"savings plan\"\r\n| extend recommendationTypeId = tostring(properties.recommendationTypeId),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId),\r\ncommitment = tostring(properties.extendedProperties.commitment)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nstableId = name,\r\ncommitment = tostring(properties.extendedProperties.commitment),\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend lookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\nregion = tostring(properties.extendedProperties.region),\r\nresources=tostring(properties.resourceMetadata.resourceId), \r\nsubscription = tostring(properties.extendedProperties.subId),\r\ncommitment = tostring(properties.extendedProperties.commitment)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| summarize Subscriptions=dcount(resources), \r\n bin (sum(savings), 0.01) by subscription ,commitment ,lookbackPeriod,scope,term ,currency\r\n| order by sum_savings desc\r\n| join (\r\nresourcecontainers\r\n| where type == 'microsoft.resources/subscriptions'\r\n| extend subscription = subscriptionId\r\n| project name,subscription\r\n) on subscription\r\n| project-away subscription1,subscription\r\n",
+ "size": 0,
+ "title": "Savings plan Summary",
+ "noDataMessage": "No savings plan recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "categoricalbar",
+ "gridSettings": {
+ "filter": true
+ },
+ "chartSettings": {
+ "xAxis": "name",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Saving plan Summary"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "AdvisorResources \r\n| where type == 'microsoft.advisor/recommendations' \r\n| where properties.category == 'Cost' and properties.shortDescription.solution contains \"savings plan\"\r\n| extend\r\nrecommendationTypeId = tostring(properties.recommendationTypeId),\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nterm=tostring(properties.extendedProperties.term),\r\nstableId = name,\r\nsubscriptionId = tostring(properties.extendedProperties.subId),\r\ncommitment = tostring(properties.extendedProperties.commitment)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources | where type=~'microsoft.advisor/suppressions'\r\n| extend tokens = split(id, '/')\r\n| extend stableId = iff(array_length(tokens) > 3, tokens[(array_length(tokens)-3)], '')\r\n| extend expirationTimeStamp = todatetime(iff(strcmp(tostring(properties.ttl), '-1') == 0, '9999-12-31', properties.expirationTimeStamp))\r\n| where expirationTimeStamp > now()\r\n| project stableId, expirationTimeStamp)\r\non stableId\r\n| where isempty(expirationTimeStamp)\r\n| extend subscriptionId,stableId\r\n| join kind = leftouter\r\n(advisorresources \r\n| where type =~ 'microsoft.advisor/configurations'\r\n| where isempty(resourceGroup) == true\r\n| extend\r\nmaxCpuP95 = properties.extendedProperties.MaxCpuP95,\r\nlowCpuThreshold = properties.lowCpuThreshold,\r\nexcludeRecomm = properties.exclude,\r\nlookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\nstableId = name,\r\ncommitment = tostring(properties.extendedProperties.commitment),\r\nsubscriptionId = tostring(properties.extendedProperties.subId))\r\non subscriptionId\r\n| extend isActive1 = iff(isnull(excludeRecomm), true, tobool(excludeRecomm) == false)\r\n| extend isActive2 = iff(recommendationTypeId == 'e10b1381-5f0a-47ff-8c7b-37bd13d7c974', iff((isnotempty(lowCpuThreshold) and isnotempty(maxCpuP95)), toint(maxCpuP95) < toint(lowCpuThreshold), iff((isempty(maxCpuP95) or toint(maxCpuP95) < 5), true, false)), true)\r\n| where isActive1 == true and isActive2 == true\r\n| join kind = leftouter\r\n(advisorresources | where type =~ 'microsoft.advisor/configurations' | where isnotempty(resourceGroup) == true\r\n| project subscriptionId, resourceGroup, excludeProperty = properties.exclude)\r\non subscriptionId, resourceGroup\r\n| extend isActive3 = iff(isnull(excludeProperty), true, tobool(excludeProperty) == false)\r\n| where isActive3 == true\r\n| extend lookbackPeriod=tostring(strcat(\"Last \",properties.extendedProperties.lookbackPeriod,\" days\")),\r\nscope=tostring(properties.extendedProperties.scope),\r\nterm=tostring(properties.extendedProperties.term),\r\nsavings=todouble(properties.extendedProperties.annualSavingsAmount),\r\nsavingsAmount = todouble(properties.extendedProperties.savingsAmount),\r\nRecommendation=tostring(properties.shortDescription.solution), \r\ncurrency = tostring(properties.extendedProperties.savingsCurrency),\r\ndisplayQty = tostring(properties.extendedProperties.displayQty),\r\ndisplaySKU = tostring(properties.extendedProperties.displaySKU),\r\ncommitment = tostring(properties.extendedProperties.commitment),\r\nregion = tostring(properties.extendedProperties.region),\r\nsubscription = tostring(properties.extendedProperties.subId)\r\n| where term == \"{term}\" and lookbackPeriod == \"{LookBackPeriod}\"\r\n| project Recommendation,savings,commitment,currency,lookbackPeriod,term,subscription\r\n| order by savings desc\r\n| join (\r\nresourcecontainers\r\n| where type == 'microsoft.resources/subscriptions'\r\n| extend subscription = subscriptionId\r\n| project id,name,subscription\r\n) on subscription\r\n| project-away subscription1,subscription\r\n",
+ "size": 0,
+ "title": "Savings plan details",
+ "noDataMessage": "No savings plan recommendations found!",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Recommendation",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "id",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "reservedResourceType",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "subscription",
+ "formatter": 5
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "id"
+ ]
+ },
+ "labelSettings": [
+ {
+ "columnId": "savings",
+ "label": "Total annual savings"
+ },
+ {
+ "columnId": "commitment",
+ "label": "Commitment"
+ },
+ {
+ "columnId": "currency",
+ "label": "Currency"
+ },
+ {
+ "columnId": "lookbackPeriod",
+ "label": "Look back period"
+ },
+ {
+ "columnId": "term",
+ "label": "Term"
+ }
+ ]
+ },
+ "chartSettings": {
+ "xAxis": "reservedResourceType",
+ "yAxis": [
+ "sum_savings"
+ ],
+ "group": "reservedResourceType",
+ "createOtherGroup": 0,
+ "showLegend": true,
+ "ySettings": {
+ "numberFormatSettings": {
+ "unit": 0,
+ "options": {
+ "style": "decimal",
+ "useGrouping": true
+ }
+ }
+ }
+ }
+ },
+ "name": "query - Savings plan details"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "SavingsPlan"
+ }
+ ],
+ "name": "group - SavingsPlan"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "2b43eb64-bca3-444a-8003-003554236fe7",
+ "version": "KqlParameterItem/1.0",
+ "name": "Subscription",
+ "type": 6,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false,
+ "showDefault": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "label": " Subscription",
+ "value": [
+ "value::all"
+ ]
+ },
+ {
+ "id": "03fbf28a-892d-4b68-929c-3ba5056f4b94",
+ "version": "KqlParameterItem/1.0",
+ "name": "ResourceGroup",
+ "label": "Resource Group",
+ "type": 2,
+ "isRequired": true,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "query": "resources\r\n| distinct resourceGroup",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "showDefault": false
+ },
+ "defaultValue": "value::all",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ {
+ "id": "566c43ae-f300-43be-aa0d-61d92ba8da87",
+ "version": "KqlParameterItem/1.0",
+ "name": "SingleSubHidden",
+ "type": 1,
+ "isRequired": true,
+ "query": "resourcecontainers\r\n| where type==\"microsoft.resources/subscriptions\"\r\n| take 1\r\n| project subscriptionId",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "isHiddenWhenLocked": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Hidden Subscription"
+ },
+ {
+ "id": "a9df02ed-7100-4130-952f-a3d9d5d364af",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagName",
+ "type": 2,
+ "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Name"
+ },
+ {
+ "id": "66406915-1f07-448f-8170-2f3b0dc6dc00",
+ "version": "KqlParameterItem/1.0",
+ "name": "TagValue",
+ "type": 2,
+ "query": "Resources\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| extend tagValue = tostring(tags[tagName])\r\n| where tags != '' and tags != '[]' and tostring(bag_keys(tags)[0]) == '{TagName}'\r\n| distinct tagValue\r\n| sort by tagValue asc",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "value": null,
+ "label": "Tag Value"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "75",
+ "conditionalVisibility": {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - Filters"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "parameters": [
+ {
+ "id": "f74bc7f5-2b16-4440-8053-106e040b73b6",
+ "version": "KqlParameterItem/1.0",
+ "name": "Location",
+ "type": 2,
+ "query": "Resources\r\n| where type =~ 'Microsoft.Compute/virtualMachines'\r\n| project name, location\r\n| summarize count () by location\r\n| project location",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::1"
+ ]
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::1",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "label": "Resource Location"
+ }
+ ],
+ "style": "pills",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources"
+ },
+ "customWidth": "25",
+ "conditionalVisibility": {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ "name": "parameters - location"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "template",
+ "loadType": "always",
+ "loadFromTemplateId": "",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Azure Hybrid Benefit\r\nFor customers with Software Assurance, Azure Hybrid Benefit for Windows Server allows you to use your on-premises Windows Server licenses to run Windows virtual machines on Azure at a reduced cost. This article discusses how to deploy new VMs with Azure Hybrid Benefit for Windows Server enabled, and how you can update any existing running VMs. For more information about Azure Hybrid Benefit for Windows Server licensing and cost savings, see the [Azure Hybrid Benefit for Windows Server licensing page](https://azure.microsoft.com/pricing/hybrid-use-benefit/)\r\n\r\n",
+ "style": "upsell"
+ },
+ "name": "Azure Hybrid Benefit"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "API-Get_VM_SKU"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "3f12a4b6-b18d-4191-8c1c-6045a7edcb6b",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "VM/VMSS",
+ "subTarget": "VM",
+ "style": "link"
+ },
+ {
+ "id": "78ac1878-4b69-4f32-af1f-a8f095afbed5",
+ "cellValue": "SelectedTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL",
+ "subTarget": "SQL",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 1"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Virtual Machines",
+ "subTarget": "VM",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "dbe9a7fb-6ab1-4de1-a98b-4ec8a9af906c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Linux Virtual Machines",
+ "subTarget": "LinuxVM",
+ "style": "link"
+ },
+ {
+ "id": "79e7a97a-1413-41e8-b4c6-ebd1d0a45e2e",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "VM Scale Set",
+ "subTarget": "VMSS",
+ "style": "link"
+ },
+ {
+ "id": "be820ada-a0f4-4c51-b17b-3e506edd1410",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Custom Images",
+ "subTarget": "CustomImages",
+ "style": "link"
+ },
+ {
+ "id": "1dda3cc4-59ba-4758-9c51-d6c9fab18647",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Arc",
+ "subTarget": "arc",
+ "style": "link"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ },
+ "name": "links - 4"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "CustomImageAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType != \"Windows\"\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ },
+ "name": "CustomImageAHBDisabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Custom Images - Windows Azure Hybrid Benefit (AHB) Overview\r\n#### Note: This tab contains information only about Custom Images where the OS is Windows."
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors-CustomImages",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name, SubId=id\r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows, SubId, SubscriptionName\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SubId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "finalBy": "SubscriptionName"
+ },
+ "labelSettings": [
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckAHBWindows",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB per Subscription - Custom Images"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "Prioritize AHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "showPin": false,
+ "name": "ConsumedCoresPerAhubpriority-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "30",
+ "showPin": false,
+ "name": "ConsumedCoresPerVM-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"}]}",
+ "size": 0,
+ "title": "Required CPU cores for AHB activation on remaining VMs",
+ "noDataMessage": "All VMs within the current scope have AHB enabled",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "36",
+ "showPin": false,
+ "name": "CoresNotEnabledperAHBPriority-CustomImages"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBEnabled",
+ "label": "See VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBDisabled",
+ "label": "See VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VM AHB Enabled - CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"ConsumedCoresPerAhubpriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBEnabeld-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"CoresNotEnabledperAHBPriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit not enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBDisabled-CustomImages"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "CustomImages"
+ },
+ "name": "CustomImages"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "3f12a4b6-b18d-4191-8c1c-6045a7edcb6b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server ESU licenses",
+ "subTarget": "windowsEsu",
+ "style": "link"
+ },
+ {
+ "id": "0ca197b7-6f96-4def-9be4-dc26bb09538a",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server Management enabled by Azure Arc",
+ "subTarget": "arcAHB",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 1"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server ESU licenses",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| project name, status, operatingSystem, esuStatus\r\n| summarize count() by esuStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not enabled",
+ "color": "red"
+ },
+ {
+ "seriesName": "Enabled",
+ "color": "green"
+ },
+ {
+ "seriesName": "Enabled by Volume License",
+ "color": "greenDarkDark"
+ },
+ {
+ "seriesName": "License deactivated",
+ "color": "yellow"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Review Your Current License Usage\r\n\r\nTo review your current license usage, go to the [Azure Arc](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/usageOverview) resource blade.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "e24ddae0-37c5-46a7-b52f-b307baaa6f51",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleLicenses",
+ "label": "View eligible licenses?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Windows Server 2012 or 2012 R2 machines running Arc agent version below 1.34 are ineligible for Extended Security Updates (ESUs). Upgrade to the latest version of the Azure Arc agent to allow enabling ESU on these machines.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| extend esuStatusIcon = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), '8',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' or properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '7',\r\n '91'\r\n)\r\n| project name, status, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags, esuStatus, esuStatusIcon, agentVersion\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesEsu','Microsoft.HybridCompute/machines'))\r\n| project name,esuStatus,esuStatusIcon,operatingSystem,resourceGroup,subscriptionDisplayName,status,type,id,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "windowsEsu"
+ },
+ "name": "group-Esu"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server Management enabled by Azure Arc",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Benefits of Windows Server Management with Azure Arc\r\n\r\nWindows Server Management enabled by Azure Arc offers customers with Windows Server licenses that have active Software Assurances or Windows Server licenses that are active subscription licenses a few benefits, including access to Azure Update Management, Azure Change Tracking and Inventory and Windwos best practices assessment. FOr the full list of benefits, visit [Windows Server Management enabled by Azure Arc.](https://learn.microsoft.com/azure/azure-arc/servers/windows-server-management-overview?tabs=portal)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| summarize count() by benefitsStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not activated",
+ "color": "red"
+ },
+ {
+ "seriesName": "Activated",
+ "color": "green"
+ },
+ {
+ "seriesName": "Activated via Pay-as-you-go",
+ "color": "greenDarkDark"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Yes"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "To enable Windows Server Management with Azure Arc, visit the [Arc service blade.](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/softwareAssurance)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleAHBResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "benefitsStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "3",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcAHBResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arcAHB"
+ },
+ "name": "group-ahbArc"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arc"
+ },
+ "name": "Arc"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Virtual Machines",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) has \"Windows\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "VMRG",
+ "formatter": 0,
+ "tooltipFormat": {
+ "tooltip": "test"
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "WindowsAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| where properties.changeType == \"Update\" and properties.targetResourceType == \"microsoft.compute/virtualmachines\"\r\n| mv-expand changes = properties.changes\r\n| mv-expand LicenseChanges=changes.['properties.licenseType']\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| where isnotnull(LicenseChanges)\r\n| where tostring(LicenseChanges.newValue) has \"Windows\"\r\n| project VMID=properties.targetResourceId, NewLicense=tostring(LicenseChanges.newValue), DateofChange=todatetime(properties.changeAttributes.timestamp)\r\n",
+ "size": 0,
+ "title": "VM Latest Change Last 7 days",
+ "noDataMessage": "AHB was not enabled in the last 7 days.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "VM Latest Change Last 7 days"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - Get VM vCPU"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Windows Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckAHBWindows\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "sortBy": [
+ {
+ "itemKey": "SubscriptionName",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "sortBy": [
+ {
+ "itemKey": "SubscriptionName",
+ "sortOrder": 1
+ }
+ ],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckAHBWindows",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB per Subscription"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"WindowsAHBEnabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[WindowsAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "noDataMessage": "None of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per AHB Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26130\",\"mergeType\":\"inner\",\"leftTable\":\"WindowsAHBEnabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].Name\",\"mergedName\":\"Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ConsumedCores",
+ "formatter": 0,
+ "formatOptions": {
+ "aggregation": "Sum"
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {},
+ "leftContent": {
+ "columnMatch": "ConsumedCores",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "blue"
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0
+ },
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"AHB Disabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Cores NOT enabled per AHB Priority"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBEnabled",
+ "label": "See VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBDisabled",
+ "label": "See VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ },
+ {
+ "id": "20a00706-a89b-42aa-8dea-9c44c93e8014",
+ "version": "KqlParameterItem/1.0",
+ "name": "LastAHB",
+ "label": "See VMs AHB enabled in the last 7 days",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VM AHB Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Windows VMs without Hybrid Benefit groupped by Subscription.",
+ "style": "info"
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "List of Windows VMs without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"AHB Disabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].VMName\",\"mergedName\":\"VM Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[AHB Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"unknown\"},{\"originalName\":\"[AHB Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[AHB Disabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[AHB Disabled].WindowsId\"},{\"originalName\":\"[AHB Disabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "VMs without AHB",
+ "noDataMessage": "All of your VMs have AHB enabled",
+ "noDataMessageStyle": 3,
+ "exportedParameters": [
+ {
+ "fieldName": "VMIDFull",
+ "parameterName": "WindowsID"
+ },
+ {
+ "fieldName": "VMRG",
+ "parameterName": "ResourceGroup",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "VM Name",
+ "parameterName": "VMName",
+ "parameterType": 1
+ },
+ {
+ "fieldName": "Prioritize AHB?",
+ "parameterName": "AHBPriority",
+ "parameterType": 1
+ }
+ ],
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 7,
+ "formatOptions": {
+ "linkTarget": "ArmAction",
+ "linkLabel": "Apply Hybrid Benefit",
+ "linkIsContextBlade": true,
+ "armActionContext": {
+ "path": "/{WindowsID}?api-version=2023-03-01",
+ "headers": [],
+ "params": [],
+ "body": "{\r\n \"properties\": {\r\n \"licenseType\": \"Windows_Server\"\r\n }\r\n}\r\n\r\n",
+ "httpMethod": "PATCH",
+ "title": "Apply Hybrid Benefit to VM {VMName}",
+ "description": "# Windows Hybrid Benefit Application Information: VM \"{VMName}\"\n\n\n{WindowsID}\n\n**Attention!**\n\nThis action will apply the Windows Hybrid Benefit to the virtual machine with the name **{VMName}**. Please ensure that you are applying the benefit to the correct VM.\n\n**Resource Details:**\n\n- VM Name: {VMName}\n- Resource Group: {ResourceGroup}\n- Prioritize AHB: {AHBPriority}\n\n### Required RBAC Permissions\n\nTo perform this action, you need to have **Contributor** permissions on the Resource Group where the VM is located.\n\nPlease review the information carefully before proceeding with applying the Windows Hybrid Benefit.\n",
+ "actionName": "Applying Hybrid benefit to VM {VMName}",
+ "runLabel": "Apply Hybrid Benefit to VM: \"{VMName}\""
+ }
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ },
+ "tooltipFormat": {
+ "tooltip": "The virtual machines (VMs) with less than 8 cores are categorized as Low Priority, while those with 8 or more cores are classified as High Priority. "
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Name",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "HyperVGenerations",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "vCPUsPerCore",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "VM Name",
+ "label": "VM Name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "QuickFix",
+ "label": "Enable AHB"
+ },
+ {
+ "columnId": "Prioritize AHB?",
+ "label": "AHB Priority"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS Type"
+ },
+ {
+ "columnId": "OsVersion",
+ "label": "OS Version"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "subscriptionId",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "MemoryGB",
+ "label": "Memory"
+ },
+ {
+ "columnId": "MaxNetworkInterfaces",
+ "label": "Max. NICs"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VM+SKU+vCores"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Windows VMs with Hybrid Benefit groupped by Subscription.",
+ "style": "info"
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "AHB By SUbscription"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"WindowsAHBEnabled\",\"rightTable\":\"query - Get VM vCPU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[WindowsAHBEnabled].WindowsId\",\"mergedName\":\"VM Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\",\"mergedName\":\"Resource Group\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMSize\",\"mergedName\":\"VM SKU\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - Get VM vCPU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\",\"mergedName\":\"License Type\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\",\"mergedName\":\"Location\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\",\"mergedName\":\"OS Type\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\",\"mergedName\":\"OS Version\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"},{\"originalName\":\"[WindowsAHBEnabled].VMName\"}]}",
+ "size": 0,
+ "title": "VMs with AHB",
+ "noDataMessage": "None of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "2",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "Subscription Name",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "WindowsId1",
+ "label": "VM ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VM+SKU+vCores-AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26168\",\"mergeType\":\"inner\",\"leftTable\":\"VM Latest Change Last 7 days\",\"rightTable\":\"VM+SKU+vCores-AHB\",\"leftColumn\":\"VMID\",\"rightColumn\":\"VM Name\"}],\"projectRename\":[{\"originalName\":\"[VM Latest Change Last 7 days].VMID\",\"mergedName\":\"VMID\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].NewLicense\",\"mergedName\":\"NewLicense\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].DateofChange\",\"mergedName\":\"DateofChange\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].VM Name\",\"mergedName\":\"VM Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Resource Group\",\"mergedName\":\"Resource Group\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].VM SKU\",\"mergedName\":\"VM SKU\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Prioritize AHB?\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].License Type\",\"mergedName\":\"License Type\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Consumed Cores per VM\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Location\",\"mergedName\":\"Location\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Type\",\"mergedName\":\"OS Type\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Version\",\"mergedName\":\"OS Version\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VM+SKU+vCores-AHB].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Total Cores Enabled last 7 Days",
+ "noDataMessage": "Windows AHB hasn't been enabled in the last 7 days",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "barchart",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LastAHB",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "Total Cores Enabled last 7 Days"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26168\",\"mergeType\":\"inner\",\"leftTable\":\"VM Latest Change Last 7 days\",\"rightTable\":\"VM+SKU+vCores-AHB\",\"leftColumn\":\"VMID\",\"rightColumn\":\"VM Name\"}],\"projectRename\":[{\"originalName\":\"[VM+SKU+vCores-AHB].VM Name\",\"mergedName\":\"VM Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Resource Group\",\"mergedName\":\"Resource Group\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].NewLicense\",\"mergedName\":\"NewLicense\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM Latest Change Last 7 days].DateofChange\",\"mergedName\":\"DateofChange\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].VM SKU\",\"mergedName\":\"VM SKU\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Consumed Cores per VM\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Prioritize AHB?\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].Location\",\"mergedName\":\"Location\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26168\"},{\"originalName\":\"[VM+SKU+vCores-AHB].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VM+SKU+vCores-AHB].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[VM Latest Change Last 7 days].VMID\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Type\"},{\"originalName\":\"[VM+SKU+vCores-AHB].OS Version\"},{\"originalName\":\"[VM+SKU+vCores-AHB].License Type\"}]}",
+ "size": 0,
+ "title": "Total Cores Enabled last 7 Days - Detailed view",
+ "noDataMessage": "No AHB has been enabled in the last 7 days",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "table",
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LastAHB",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "Total Cores Enabled last 7 Days - Details"
+ }
+ ]
+ },
+ "name": "VM"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ },
+ {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ }
+ ],
+ "name": "VM/VMSS-RGFilter"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "0211f413-9f36-4750-9ef2-d382ba30ba6c",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL Server VMs",
+ "subTarget": "SQLVM",
+ "preText": "VM",
+ "style": "link"
+ },
+ {
+ "id": "79e7a97a-1413-41e8-b4c6-ebd1d0a45e2e",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL DB",
+ "subTarget": "SQLDB",
+ "style": "link"
+ },
+ {
+ "id": "1f381e5b-7071-41ce-a354-c2df93445cae",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL Managed Instances",
+ "subTarget": "SQLMI",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 4"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and tostring(properties.['sqlServerLicenseType']) != 'AHUB' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n ) on subscriptionId \r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Compute/virtualmachines'\r\n | project VMName = tolower(name), VMSize = tostring(properties.hardwareProfile.vmSize)\r\n ) on VMName\r\n| order by id asc \r\n| project SQLID,VMName,VMRG, VMLocation, VMSize, SQLVersion, SQLSKU, SQLAgentType, LicenseType, SubscriptionName\r\n| where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID",
+ "size": 0,
+ "title": "SQL VM AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-SQL-AHB-Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and tostring(properties.['sqlServerLicenseType']) == 'AHUB' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n ) on subscriptionId \r\n| join (\r\n resources\r\n | where type =~ 'Microsoft.Compute/virtualmachines'\r\n | project VMName = tolower(name), VMSize = tostring(properties.hardwareProfile.vmSize)\r\n ) on VMName\r\n| order by id asc \r\n| project SQLID,VMName,VMRG, VMLocation, VMSize, SQLVersion, SQLSKU, SQLAgentType, LicenseType, SubscriptionName\r\n| where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID",
+ "size": 0,
+ "title": "SQL VM AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 5,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "Get-SQL-AHB-Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## SQL Virtual Machines Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "SQL Text"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "SQL License Info",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL on VMs with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": "AHB Overview21"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n | where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID\r\n | extend CheckSQLVMAHB = case(\r\n type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines', iif((properties.['sqlServerLicenseType'])\r\n !has 'AHUB', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckSQLVMAHB",
+ "size": 0,
+ "title": "Summary of SQL on VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckSQLVMAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of Resources"
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLVMAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL on VMs with or without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines' and resourceGroup in ({ResourceGroup})\r\n | extend SQLID=id, VMName = name, VMRG = resourceGroup, VMLocation = location, LicenseType = tostring(properties.['sqlServerLicenseType']), OSType=tostring(properties.storageProfile.imageReference.offer), SQLAgentType = tostring(properties.['sqlManagement']), SQLVersion = tostring(properties.['sqlImageOffer']), SQLSKU=tostring(properties.['sqlImageSku'])\r\n | where SQLSKU != \"Developer\" and SQLSKU != \"Express\"\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLID\r\n )\r\n on SQLID\r\n | extend CheckSQLVMAHB = case(\r\n type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines', iif((properties.['sqlServerLicenseType'])\r\n !has 'AHUB', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by CheckSQLVMAHB",
+ "size": 0,
+ "title": "Summary SQL Enabled and Disabled",
+ "noDataMessage": "You don't have any SQL VM",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary SQL Enabled and Disabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL running on Virtual Machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses123"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores to enable SQL AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640e8\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Enabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Consumed Cores per VM",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQL+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640e8\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Enabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMName\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "showPin": false,
+ "name": "Summary SQL+SKU AHB Enabled -"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640b5\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Disabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] +3) & ~3\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "warning",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "sortBy": [],
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "showMetrics": false,
+ "showLegend": true
+ }
+ },
+ "customWidth": "33",
+ "name": " Summary - SQL Cores AHB Disabled "
+ }
+ ]
+ },
+ "name": "SQL Overview RG"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLAVMHUBEnabled",
+ "label": "See SQL VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLVMAHBDisabled",
+ "label": "See SQL VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "value": "Yes"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL AHB Disabled"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640b5\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Disabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID\",\"mergedName\":\"VM Name\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640b5\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLID\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMName\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMRG\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMLocation\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLVersion\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLSKU\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SQLAgentType\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].LicenseType\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].SubscriptionName\"},{\"originalName\":\"[Get-SQL-AHB-Disabled].VMSize\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "warning",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "success",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "VM Name",
+ "label": "Name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "vCPUs",
+ "label": "Number of vCPU"
+ },
+ {
+ "columnId": "Consumed Cores",
+ "label": "Consumed Cores"
+ },
+ {
+ "columnId": "SQLVersion",
+ "label": "SQL Version"
+ },
+ {
+ "columnId": "SQLSKU",
+ "label": "SQL SKU"
+ },
+ {
+ "columnId": "SQLAgentType",
+ "label": "SQL Agent"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLID1",
+ "label": "Resource ID"
+ }
+ ]
+ },
+ "sortBy": []
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLVMAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL+SKU AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"cd7477ac-acd6-4894-b929-53348c7640e8\",\"mergeType\":\"inner\",\"leftTable\":\"API-Get_VM_SKU\",\"rightTable\":\"Get-SQL-AHB-Enabled\",\"leftColumn\":\"Name\",\"rightColumn\":\"VMSize\"}],\"projectRename\":[{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID\",\"mergedName\":\"SQLID\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLVersion\",\"mergedName\":\"SQLVersion\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLSKU\",\"mergedName\":\"SQLSKU\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLAgentType\",\"mergedName\":\"SQLAgentType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"cd7477ac-acd6-4894-b929-53348c7640e8\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].SQLID1\",\"mergedName\":\"SQLID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[Get-SQL-AHB-Enabled].VMName\"}]}",
+ "size": 0,
+ "title": "SQL VM AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "Subscription",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SQLID",
+ "label": "Name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "vCPUs",
+ "label": "Number of vCPU"
+ },
+ {
+ "columnId": "Consumed Cores",
+ "label": "Consumed Cores"
+ },
+ {
+ "columnId": "SQLVersion",
+ "label": "SQL Version"
+ },
+ {
+ "columnId": "SQLSKU",
+ "label": "SQL SKU"
+ },
+ {
+ "columnId": "SQLAgentType",
+ "label": "SQL Agent"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLAVMHUBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL+SKU AHB Enabled"
+ }
+ ]
+ },
+ "name": "SQL Detailed Info"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "SQLVM"
+ },
+ "name": "SQL VM"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "SQL Database",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## SQL Databases Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "SQL Databases AHB"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "e4aa368f-dcf2-44a6-88f9-a395c04eb21f",
+ "cellValue": "SQLType",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL Database",
+ "subTarget": "SQLDatabase",
+ "style": "link"
+ },
+ {
+ "id": "a94e8dc2-34be-4d97-934d-c27e1816c4fe",
+ "cellValue": "SQLType",
+ "linkTarget": "parameter",
+ "linkLabel": "SQL ElasticPool",
+ "subTarget": "SQLElastic",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 8"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "SQLDB"
+ },
+ "name": "text - 0"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and tostring(properties.['licenseType']) == 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])\r\n| extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/databases', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n )\r\n) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, CheckSQLDBAHB,SQLLocation, LicenseType, StorageAccountType, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n",
+ "size": 0,
+ "title": "AHB Disabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLDB AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and tostring(properties.['licenseType']) != 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=sku.name, SKUTier=sku.tier, SQLLocation = location, vCores=tostring(sku.capacity), LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, SQLLocation, LicenseType, StorageAccountType, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n\r\n",
+ "size": 0,
+ "title": "AHB Enabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLDB AHB Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.\r\n\r\nFor Azure SQL Database, Azure Hybrid Benefit is only available when using the provisioned compute tier of the vCore-based purchasing model. Azure Hybrid Benefit doesn't apply to DTU-based purchasing models or the serverless compute tier.",
+ "style": "info"
+ },
+ "name": "Apply to SQL Server 1 to 4 vCPUs "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL Databases with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": " AHB Overview SQL DB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL DB Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n | extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=sku.name, SKUTier=sku.tier, SQLLocation = location, LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/databases', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL DBs with or without AHB per subs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\n resources | where type =~ 'Microsoft.Sql/servers/databases' and name != 'master' and kind contains 'vcore' and kind !contains \"serverless\" and tostring(sku.name) != \"ElasticPool\"\r\n | extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=sku.name, SKUTier=sku.tier, SQLLocation = location, LicenseType = tostring(properties.['licenseType']), StorageAccountType=tostring(properties.['storageAccountType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/databases', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL DBs with or without AHB "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL Databases\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Total number of SQL licenses cores consumed"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Text SQL DB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Consumed Cores per VM",
+ "noDataMessage": "None of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "SQLName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Enabled - per Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Disabled - per Priority"
+ }
+ ]
+ },
+ "name": "SQL DB Info"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBHUBEnabled",
+ "label": "See SQL DBs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBAHBDisabled",
+ "label": "See SQL DBs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL DB Without AHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071ed\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Disabled",
+ "noDataMessage": "All of your SQL DBs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Server Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "StorageAccountType",
+ "label": "Storage Account Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071f9\",\"mergeType\":\"table\",\"leftTable\":\"SQLDB AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].StorageAccountType\",\"mergedName\":\"StorageAccountType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Enabled",
+ "noDataMessage": "None of you SQL DBs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "StorageAccountType",
+ "label": "Storage Account Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBHUBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB AHB Enabled"
+ }
+ ]
+ },
+ "name": "Load SQL DB Detailed Info"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLType",
+ "comparison": "isEqualTo",
+ "value": "SQLDatabase"
+ },
+ "name": "SQLDatabase"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "SQL Elastic Pool"
+ },
+ "name": "text - 0"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and tostring(properties.['licenseType']) == 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n )\r\n) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, CheckSQLDBAHB,SQLLocation, LicenseType, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n",
+ "size": 0,
+ "title": "AHB Disabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLElastic AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n| extend SubscriptionName=name | join (resources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and tostring(properties.['licenseType']) != 'LicenseIncluded' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n| project SQLDBID,SQLName,SQLRG, SKUName, SKUTier, vCores, SQLLocation, LicenseType, CheckSQLDBAHB, SubscriptionName\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n\r\n",
+ "size": 0,
+ "title": "AHB Enabled",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLElastic AHB Enabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.\r\n\r\nFor Azure SQL Database, Azure Hybrid Benefit is only available when using the provisioned compute tier of the vCore-based purchasing model. Azure Hybrid Benefit doesn't apply to DTU-based purchasing models or the serverless compute tier.",
+ "style": "info"
+ },
+ "name": "Apply to SQL Elastic Server 1 to 4 vCPUs "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL Databases with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": " AHB Overview SQL Elastic"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL DB Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL Elastic with or without AHB per subs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources\r\n| where type =~ 'Microsoft.Sql/servers/elasticPools' and kind contains 'vcore' and kind !contains \"serverless\"\r\n| extend SQLDBID=id,SQLName = name, SQLRG = resourceGroup, SKUName=tostring(sku.name), SKUTier=tostring(sku.tier), vCores=tostring(sku.capacity), SQLLocation = location, LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), SQLDBID=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct SQLDBID\r\n )\r\n on SQLDBID\r\n | extend CheckSQLDBAHB = case(\r\n type =~ 'Microsoft.Sql/servers/elasticPools', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not SQL DB\"\r\n )\r\n ) on subscriptionId \r\n| summarize count() by CheckSQLDBAHB",
+ "size": 0,
+ "title": "Summary of SQL Databases with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLDBAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ }
+ },
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL DBs with or without AHB "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL Databases\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Total number of SQL licenses cores consumed"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Text SQL DB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"}]}",
+ "size": 0,
+ "title": "SQL DB Elastic Pools AHB Consumed Cores per VM",
+ "noDataMessage": "None of your SQL DB Elastic Pools have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "SQLName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLElastic+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"}]}",
+ "size": 0,
+ "title": "SQL Elastic AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your SQL DB Elastic Pools have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLElastic+SKU AHB Enabled - per Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your SQL DB have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLDB+SKU AHB Disabled - per Priority"
+ }
+ ]
+ },
+ "name": "SQL Elastic Info"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBHUBEnabled",
+ "label": "See SQL DBs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLDBAHBDisabled",
+ "label": "See SQL DBs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL DB Without AHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071ed\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Disabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLElastic AHB Disabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Disabled",
+ "noDataMessage": "All of your SQL DBs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ },
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Server Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "CheckSQLDBAHB",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071f9\",\"mergeType\":\"table\",\"leftTable\":\"SQLElastic AHB Enabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLDB AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID\",\"mergedName\":\"SQLDBID\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUName\",\"mergedName\":\"SKUName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SKUTier\",\"mergedName\":\"SKUTier\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].CheckSQLDBAHB\",\"mergedName\":\"CheckSQLDBAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLElastic AHB Enabled].SQLDBID1\",\"mergedName\":\"SQLDBID1\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"}]}",
+ "size": 0,
+ "title": "SQL DB AHB Enabled",
+ "noDataMessage": "None of you SQL DBs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "labelSettings": [
+ {
+ "columnId": "SQLDBID",
+ "label": "Name"
+ },
+ {
+ "columnId": "SQLName",
+ "label": "Database Name"
+ },
+ {
+ "columnId": "SQLRG",
+ "label": "Resource Group"
+ },
+ {
+ "columnId": "SKUName",
+ "label": "SKU"
+ },
+ {
+ "columnId": "SKUTier",
+ "label": "SKU Tier"
+ },
+ {
+ "columnId": "vCores",
+ "label": "Number of vCore"
+ },
+ {
+ "columnId": "SQLLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License Type"
+ },
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "SQLDBID1",
+ "label": "Resource ID"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLDBHUBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL DB AHB Enabled"
+ }
+ ]
+ },
+ "name": "Load SQL DB Detailed Info"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLType",
+ "comparison": "isEqualTo",
+ "value": "SQLElastic"
+ },
+ "name": "SQLElasticPool"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "SQLDB"
+ },
+ "name": "SQLDBGroup"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "SQL Managed Instance",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances' and tostring(properties.['licenseType']) == 'LicenseIncluded'\r\n | extend ManagedInstance=id, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n | project ManagedInstance,SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n | where SQLRG in ({ResourceGroup})\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLMIAHBDisabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances' and tostring(properties.['licenseType']) != 'LicenseIncluded'\r\n | extend ManagedInstance=id, SQLName=name, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n | project ManagedInstance, SQLName, SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n | where SQLRG in ({ResourceGroup})\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance\r\n ",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "SQLMIAHBEnabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "# SQL Managed Instances Azure Hybrid Benefit (AHB) Overview\r\n"
+ },
+ "name": "SQL Managed Instances AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Apply to SQL Server 1 to 4 vCPUs exchange: For every 1 core of SQL Server Enterprise Edition, you get 4 vCPUs of SQL Managed Instance or Azure SQL Database general purpose and Hyperscale tiers, or 4 vCPUs of SQL Server Standard edition on Azure VMs.\r\n\r\nThe SQL virtual machines (VMs) with less than 4 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "Apply to SQL Server 1 to 4 vCPUs exchange"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### AHB Overview\r\nSummary of all SQL Databases with and without SQL AHB.",
+ "style": "info"
+ },
+ "name": "SQL Databases with and without SQL AHB."
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load SQL MI Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\"\r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances' \r\n | extend ManagedInstance=id, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n| project ManagedInstance,SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n| summarize count() by SubscriptionName, CheckSQLMIAHB",
+ "size": 0,
+ "title": "Summary of SQL MI with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckSQLMIAHB",
+ "formatter": 1
+ },
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName"
+ },
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ },
+ "showBorder": false
+ },
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "group": "CheckSQLMIAHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL MI with or without AHB per subs"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" \r\n | extend SubscriptionName=name \r\n | join (resources | where type =~ 'Microsoft.Sql/managedInstances'\r\n | extend ManagedInstance=id, SQLRG=resourceGroup, SQLLocation=location, vCores=tostring(sku.capacity),LicenseType = tostring(properties.['licenseType'])\r\n | join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), ManagedInstance=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct ManagedInstance\r\n )\r\n on ManagedInstance\r\n | extend CheckSQLMIAHB = case(\r\n type =~ 'Microsoft.Sql/managedInstances', iif((properties.['licenseType'])\r\n has 'LicenseIncluded', \"AHB Not Enabled\", \"AHB Enabled\"),\r\n\"Not SQL DB\"\r\n ) \r\n ) on subscriptionId \r\n| project ManagedInstance,SQLRG, SQLLocation, CheckSQLMIAHB, vCores, LicenseType, SubscriptionName\r\n| summarize count() by SubscriptionName, CheckSQLMIAHB",
+ "size": 0,
+ "title": "Summary of SQL Managed Instance with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "group": "CheckSQLMIAHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of SQL MI with or without AHB "
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of SQL licenses cores consumed by all SQL Managed Instances.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable SQL Azure Hybrid Benefit\r\nNumber of cores required to enable SQL AHB across the entire environment.\r\n\r\n\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores to enable SQL "
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance1\",\"mergedName\":\"ManagedInstance1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Consumed Cores per VM",
+ "noDataMessage": "None of your SQL MI have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "SQLName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLMI+SKU AHB Enabled - per VM"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance1\",\"mergedName\":\"ManagedInstance1\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLName\",\"mergedName\":\"SQLName\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Consumed Cores per Priority",
+ "noDataMessage": "None of your SQL MI have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLMI+SKU AHB Enabled - per Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071c2\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"4\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"round([\\\"vCPUs\\\"] / 4) * 4\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCores\",\"operator\":\"<\",\"rightValType\":\"static\",\"rightVal\":\"4\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}}]},{\"originalName\":\"[SQLMIAHBDisabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071c2\"},{\"originalName\":\"[SQLMIAHBDisabled].ManagedInstance1\",\"mergedName\":\"ManagedInstance1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instances AHB Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your SQL MI have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "vCores"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Summary SQLMI+SKU AHB Disabled - per Priority"
+ }
+ ]
+ },
+ "name": "SQL MI Info"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLMIAHBEnabled",
+ "label": "See SQL MIs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "SQLMIAHBDisabled",
+ "label": "See SQL MIs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "SQL MI AHB Disabled"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071ed\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[SQLMIAHBDisabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"},{\"originalName\":\"[SQLMIAHBDisabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071ed\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Disabled",
+ "noDataMessage": "All of your SQL MIs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "expandTopLevel": true
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLMIAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL MI Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"f65bea23-bb49-4498-b331-c20c618071f9\",\"mergeType\":\"table\",\"leftTable\":\"SQLMIAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[SQLDB AHB Enabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"unknown\"},{\"originalName\":\"[SQLMIAHBEnabled].ManagedInstance\",\"mergedName\":\"ManagedInstance\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLRG\",\"mergedName\":\"SQLRG\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].SQLLocation\",\"mergedName\":\"SQLLocation\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].CheckSQLMIAHB\",\"mergedName\":\"CheckSQLMIAHB\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].vCores\",\"mergedName\":\"vCores\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"},{\"originalName\":\"[SQLMIAHBEnabled].SubscriptionName\",\"mergedName\":\"SubscriptionName\",\"fromId\":\"f65bea23-bb49-4498-b331-c20c618071f9\"}]}",
+ "size": 0,
+ "title": "SQL Managed Instance AHB Enabled",
+ "noDataMessage": "None of you SQL MIs have AHB enabled.",
+ "showExportToExcel": true,
+ "queryType": 7
+ },
+ "conditionalVisibility": {
+ "parameterName": "SQLMIAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "SQL MI AHB Enabled"
+ }
+ ]
+ },
+ "name": "SQL MI Detailed"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "SQLMI"
+ },
+ "name": "SQL MI"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "SQL"
+ },
+ "name": "SQLAHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Linux Hybrid Benefit",
+ "loadType": "explicit",
+ "loadButtonText": "Load Linux Recommendations",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Linux Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "Linux Text"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "API-Get_VMLinux_SKU"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' and (properties.storageProfile.imageReference.publisher == 'suse' or properties.storageProfile.imageReference.publisher=='RedHat')\r\n| where isnull ((properties.['licenseType']))\r\n| extend LinuxId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.publisher), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n| order by type asc \r\n| project LinuxId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), LinuxId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct LinuxId\r\n )\r\n on LinuxId",
+ "size": 0,
+ "title": "AHB Disabled",
+ "noDataMessage": "None of your Linux VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "LinuxAHBDisabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' and (properties.storageProfile.imageReference.publisher == 'suse' or properties.storageProfile.imageReference.publisher=='RedHat')\r\n| where isnotnull ((properties.['licenseType']))\r\n| extend LinuxId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.publisher), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n| order by type asc \r\n| project LinuxId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), LinuxId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct LinuxId\r\n )\r\n on LinuxId",
+ "size": 0,
+ "title": "AHB Enabled",
+ "noDataMessage": "All of your Linux VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "LinuxAHBRGEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' and (properties.storageProfile.imageReference.publisher == 'suse' or properties.storageProfile.imageReference.publisher=='RedHat')\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend LinuxId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), LinuxId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct LinuxId\r\n )\r\n on LinuxId\r\n| extend CheckAHBLinux = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets',\r\n iff(isnull((properties.['licenseType'])),\r\n \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Linux\"\r\n )\r\n| summarize count() by CheckAHBLinux",
+ "size": 0,
+ "title": "Summary of Linux VMs with or without AHB",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Linux VMs with or without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26130\",\"mergeType\":\"inner\",\"leftTable\":\"LinuxAHBRGEnabled\",\"rightTable\":\"API-Get_VMLinux_SKU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"[\\\"vCPUs\\\"]\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId\",\"mergedName\":\"LinuxId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId1\",\"mergedName\":\"LinuxId1\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "noDataMessage": "None of your Linux VM have AHB enabled",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ConsumedCores",
+ "formatter": 0,
+ "formatOptions": {
+ "aggregation": "Sum"
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {},
+ "leftContent": {
+ "columnMatch": "ConsumedCores",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "blue"
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0
+ },
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Linux Consumed Cores per VM"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "LinuxAHBEnabled",
+ "label": "See Linux VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "4c3ff9fa-d9c8-4d35-94d4-48ba3a1547fd",
+ "version": "KqlParameterItem/1.0",
+ "name": "LinuxAHBDisabled",
+ "label": "See Linux VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": []
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "Linux VMs without AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Linux VMs with Hybrid Benefit groupped by Subscription."
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "Linux VMs with Hybrid Benefit"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\",\"mergeType\":\"inner\",\"leftTable\":\"LinuxAHBRGEnabled\",\"rightTable\":\"API-Get_VMLinux_SKU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId\",\"mergedName\":\"VM ID\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBRGEnabled].LinuxId1\",\"mergedName\":\"LinuxId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[LinuxAHBEnabled].VMName\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[LinuxAHBEnabled].VMSSize\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMName\"},{\"originalName\":\"[LinuxAHBRGEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Linux VMs with AHB",
+ "noDataMessage": "None of your Linux VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "yes"
+ },
+ "name": "Linux-VM+SKU+vCores-AHB"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "List of Linux VMs without Hybrid Benefit groupped by Subscription."
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "LinuxAHBDisabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\",\"mergeType\":\"inner\",\"leftTable\":\"LinuxAHBDisabled\",\"rightTable\":\"API-Get_VMLinux_SKU\",\"leftColumn\":\"VMSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[LinuxAHBDisabled].LinuxId\",\"mergedName\":\"LinuxId\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[API-Get_VMLinux_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"8a27a7d8-5ea8-4408-ac20-2fc4e65ca095\"},{\"originalName\":\"[LinuxAHBDisabled].LinuxId1\",\"mergedName\":\"LinuxId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[LinuxAHBEnabled].VMName\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\"},{\"originalName\":\"[API-Get_VM_SKU].Name\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\"},{\"originalName\":\"[LinuxAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Linux VMs without AHB",
+ "noDataMessage": "None of your Linux VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "showBorder": false,
+ "titleContent": {
+ "columnMatch": "NewLicense",
+ "formatter": 1
+ },
+ "leftContent": {
+ "columnMatch": "vCPUs",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "maximumSignificantDigits": 3,
+ "maximumFractionDigits": 2
+ }
+ }
+ }
+ },
+ "chartSettings": {
+ "xAxis": "VM Name",
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": null,
+ "createOtherGroup": 0,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Consumed Cores per VM",
+ "color": "grayBlue"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "LinuxAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "Linux-VM+SKU+vCores-AHBDisabled"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "LinuxVM"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ }
+ ],
+ "name": "Linux"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "VMSS",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Windows Azure Hybrid Benefit (AHB) Overview - VM Scale Set"
+ },
+ "name": "AHB Overview - VM Scale Set"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "Each two-processor license or each set of 16-core licenses"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' and tostring(properties.virtualMachineProfile.licenseType) == \"Windows_Server\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType), OSVersion = tostring(properties.virtualMachineProfile.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.virtualMachineProfile.licenseType), VMSSize=tostring(sku.name)\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OSVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "LoadVMSSTab",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ }
+ ],
+ "name": "VMSSAHBEnabled-RG"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows'\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) !has 'Windows'\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType), OsVersion = tostring(properties.virtualMachineProfile.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.virtualMachineProfile.licenseType), VMSSize=tostring(sku.name)\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "LoadVMSSTab",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ }
+ ],
+ "name": "VMSSAHBDisabled-RG"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Windows virtual machine"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores to AHB"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "explicit",
+ "loadButtonText": "Load VMSS Info",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\" ([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"unknown\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Cores not enabled per AHB Priority",
+ "noDataMessage": "All of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ },
+ "chartSettings": {
+ "yAxis": [
+ "Consumed Cores per VM"
+ ],
+ "group": "Prioritize AHB?",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Cores NOT enabled per AHB Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"High Priority\\\"\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"\\\"Low Priority\\\"\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\" ([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"},{\"originalName\":\"[WindowsAHBEnabled].WindowsId\"},{\"originalName\":\"[WindowsAHBEnabled].VMRG\"},{\"originalName\":\"[WindowsAHBEnabled].VMLocation\"},{\"originalName\":\"[WindowsAHBEnabled].OSType\"},{\"originalName\":\"[WindowsAHBEnabled].OsVersion\"},{\"originalName\":\"[WindowsAHBEnabled].LicenseType\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "noDataMessage": "None of your VMs have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per AHB Priority"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"d8deb22b-a596-43ee-acc4-180849d26130\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"d8deb22b-a596-43ee-acc4-180849d26130\"},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"unknown\"}]}",
+ "size": 0,
+ "title": "Consumed Cores per VMSS",
+ "showRefreshButton": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "ConsumedCores",
+ "formatter": 0,
+ "formatOptions": {
+ "aggregation": "Sum"
+ }
+ }
+ ]
+ },
+ "tileSettings": {
+ "titleContent": {},
+ "leftContent": {
+ "columnMatch": "ConsumedCores",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "blue"
+ }
+ },
+ "showBorder": false
+ },
+ "graphSettings": {
+ "type": 0
+ },
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "name": "Consumed Cores per VMSS"
+ }
+ ]
+ },
+ "name": "VMSS RG Overview"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "VMSSAHBEnabled",
+ "label": "See VMSS with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "VMSSAHBDisabled",
+ "label": "See VMSS without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VMSS Without AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBEnabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[WindowsAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"Consumed Cores per VM\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"expression\",\"resultVal\":\"([\\\"vCPUs\\\"] + 7) & ~7\"}}]},{\"originalName\":\"[VMSSAHBEnabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].OSVersion\",\"mergedName\":\"OSVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBEnabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[WindowsAHBEnabled].VMSSize\"},{\"originalName\":\"[WindowsAHBEnabled].VMName\"},{\"originalName\":\"[VMSSAHBEnabled].VMSize\"},{\"originalName\":\"[VMSSAHBEnabled].VMName\"},{\"originalName\":\"[VMSSAHBEnabled-Tag].VMName\"},{\"originalName\":\"[VMSSAHBEnabled-Tag].VMSize\"}]}",
+ "size": 0,
+ "title": "VMSS with AHB",
+ "noDataMessage": "None of your VMSS have AHB enabled",
+ "noDataMessageStyle": 4,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "2",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Subscription Name",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMSSAHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VMSS+SKU+vCores-AHB"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"50d79765-aad4-437e-a90b-8cc7865e7081\",\"mergeType\":\"inner\",\"leftTable\":\"VMSSAHBDisabled-RG\",\"rightTable\":\"API-Get_VM_SKU\",\"leftColumn\":\"VMSSize\",\"rightColumn\":\"Name\"}],\"projectRename\":[{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[query - 0].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"unknown\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB?\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"vCPUs\",\"operator\":\">=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}}]},{\"originalName\":\"[VMSSAHBDisabled-RG].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMSSize\",\"mergedName\":\"VMSSize\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].OsVersion\",\"mergedName\":\"OsVersion\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[VMSSAHBDisabled-RG].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].Name\",\"mergedName\":\"Name\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUs\",\"mergedName\":\"vCPUs\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MemoryGB\",\"mergedName\":\"MemoryGB\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].MaxNetworkInterfaces\",\"mergedName\":\"MaxNetworkInterfaces\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].HyperVGenerations\",\"mergedName\":\"HyperVGenerations\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[API-Get_VM_SKU].vCPUsPerCore\",\"mergedName\":\"vCPUsPerCore\",\"fromId\":\"50d79765-aad4-437e-a90b-8cc7865e7081\"},{\"originalName\":\"[query - 0].VMName\"},{\"originalName\":\"[query - 0].VMSSize\"},{\"originalName\":\"[query - Get VM vCPU].Name\"},{\"originalName\":\"[query - Get VM vCPU].MemoryGB\"},{\"originalName\":\"[query - Get VM vCPU].MaxNetworkInterfaces\"},{\"originalName\":\"[query - Get VM vCPU].HyperVGenerations\"},{\"originalName\":\"[query - Get VM vCPU].vCPUsPerCore\"},{\"originalName\":\"[VMSS-AHB-Disabled].VMName\"},{\"originalName\":\"[VMSS-AHB-Disabled-Tag].VMSize\"},{\"originalName\":\"[VMSS-AHB-Disabled-Tag].VMName\"}]}",
+ "size": 0,
+ "title": "VMSS without AHB",
+ "noDataMessage": "All of your VMSS have AHB enabled",
+ "noDataMessageStyle": 3,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "$gen_group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Group",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB?",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "Sev0",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "Sev4",
+ "text": "{0}{1}"
+ }
+ ]
+ },
+ "numberFormat": {
+ "unit": 17,
+ "options": {
+ "style": "decimal"
+ }
+ }
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "subscriptionId"
+ ],
+ "expandTopLevel": true
+ }
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "VMSSAHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "VMSS+SKU+vCores"
+ }
+ ]
+ },
+ "name": "VMSS RG Details"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "VMSS"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "VM"
+ }
+ ],
+ "name": "VMSS-RG"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "selectedRateOptimizationTab",
+ "comparison": "isEqualTo",
+ "value": "AHB"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ }
+ ],
+ "name": "AHB Overview"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "RateOptimization"
+ },
+ "name": "group - RateOptimization group"
+ },
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "6b8c0a46-6867-498b-9a3e-799a2475a11a",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Welcome",
+ "subTarget": "instructions",
+ "style": "link"
+ },
+ {
+ "id": "da748ed1-f329-42d4-962d-9b2339baf7c4",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Resources overview",
+ "subTarget": "resourcesMap",
+ "style": "link"
+ },
+ {
+ "id": "a4b4de18-b90e-4212-86a2-ea5fabc4f40c",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Security recommendations",
+ "subTarget": "securityRecommendations",
+ "style": "link"
+ },
+ {
+ "id": "a18f24d2-3320-4c53-a86d-db32c920c8f7",
+ "cellValue": "selectedOverviewTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Reliability recommendations",
+ "subTarget": "reliabilityRecommendations",
+ "style": "link"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ "name": "tabs - overview tabs"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "6a9ccf8c-9f3e-4ee0-b45b-f511401f8656",
+ "version": "KqlParameterItem/1.0",
+ "name": "mapSubscriptions",
+ "label": "Subscriptions",
+ "type": 6,
+ "multiSelect": true,
+ "quote": "'",
+ "delimiter": ",",
+ "typeSettings": {
+ "additionalResourceOptions": [
+ "value::all"
+ ],
+ "includeAll": false
+ },
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "defaultValue": "value::all",
+ "value": [
+ "value::all"
+ ]
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isNotEqualTo",
+ "value": "instructions"
+ }
+ ],
+ "name": "parameters - OverviewSubscriptions"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type == \"microsoft.advisor/recommendations\"\r\n| where tostring (properties.category) has \"Security\"\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=tostring(properties.impact),Recommendation=tostring(properties.shortDescription.problem),subscriptionId",
+ "size": 0,
+ "title": "Azure Advisor security recommendations",
+ "noDataMessage": "You are following all of our security recommendations for the selected subscriptions.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{mapSubscriptions}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Impact",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High",
+ "representation": "red",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low",
+ "representation": "blue",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "gray",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Impact"
+ ]
+ }
+ }
+ },
+ "name": "query - advisorSecurityRecommendations"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "securityRecommendations"
+ }
+ ],
+ "name": "group - securityRecommendations"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "# Welcome to the cost optimization workbook"
+ },
+ "name": "Welcome"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Reference: [Microsoft Azure Well-Architected Framework - cost optimization pillar](https://learn.microsoft.com/azure/architecture/framework/cost/overview)",
+ "style": "upsell"
+ },
+ "name": "Reference"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "This workbook aims to offer a comprehensive overview of your Azure environment's resource usage, aligning with the WAF Cost Optimization pillar. It identifies recommendations to optimize efficiency, providing guidance on potential opportunities. Please note that the workbook serves as guidance to highlight optimization opportunities, and the extent of cost reduction depends on their implementation.\r\n\r\n## Overview of the cost optimization pillar\r\n\r\n* The cost optimization pillar provides principles for balancing business goals with technology needs to create a cost-effective workload while avoiding capital-intensive solutions.The workbook emphasizes the importance of reducing waste and improving operational efficiencies.\r\n\r\n* To assess your workload based on the principles outlined in the [Microsoft Azure Well-Architected Framework](https://learn.microsoft.com/azure/architecture/framework/), reference the [Microsoft Azure Well-Architected Review](https://learn.microsoft.com/assessments/?id=azure-architecture-review&mode=pre-assessment&session=20dc50e4-5b71-4f38-bc49-51cc1d9f205c) tool.\r\n\r\n\r\n\r\n\r\n"
+ },
+ "name": "objective"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Indicates an implemented recommendation that can result in a environment that is following the Cost Optimization & Cost Governance principles.",
+ "style": "success"
+ },
+ "customWidth": "50",
+ "name": "Greenlight",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Prerequisites\r\n\r\nThis workbook requires the following least-privileged (minimum) roles on your Subscriptions:\r\n\r\n * **Reader** : allows you to import the workbook without saving it and view all of the workbook tabs.\r\n * **Workbook Contributor** : allows you to import and save the workbook\r\n\r\nThis workbook includes \"Quick Fix\" actions within certain queries. The permissions necessary to execute these actions may vary and are documented for each specific action.\r\n\r\n\r\n"
+ },
+ "name": "Prerequisites"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Feedback\r\n\r\n [ Submit feedback here ](https://aka.ms/advisor_cost_wb_feedback) on your experience with workbooks at any time.\r\n \r\n\r\n \r\n [Submit any issues ](https://aka.ms/costworkbookfeedback) with the workbook template to GitHub. "
+ },
+ "name": "text - 5"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "instructions"
+ }
+ ],
+ "name": "Welcome"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "summarize count() by location",
+ "size": 2,
+ "title": "Resource distribution per region",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{mapSubscriptions}"
+ ],
+ "visualization": "map",
+ "mapSettings": {
+ "locInfo": "AzureLoc",
+ "locInfoColumn": "location",
+ "sizeSettings": "count_",
+ "sizeAggregation": "Sum",
+ "labelSettings": "location",
+ "legendMetric": "count_",
+ "legendAggregation": "Sum",
+ "itemColorSettings": {
+ "nodeColorField": "count_",
+ "colorAggregation": "Sum",
+ "type": "heatmap",
+ "heatmapPalette": "greenRed"
+ }
+ }
+ },
+ "name": "query - resourcesMap"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "resourcesMap"
+ },
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ }
+ ],
+ "name": "group - resourceOverview"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "advisorresources\r\n| where type == \"microsoft.advisor/recommendations\"\r\n| where tostring (properties.category) has \"HighAvailability\"\r\n| project AffectedResource=tostring(properties.resourceMetadata.resourceId),Impact=tostring(properties.impact),Recommendation=tostring(properties.shortDescription.problem),subscriptionId",
+ "size": 0,
+ "title": "Azure Advisor reliability recommendations",
+ "noDataMessage": "You are following all of our reliability recommendations for the selected subscriptions.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{mapSubscriptions}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "Impact",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "colors",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "High",
+ "representation": "red",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Medium",
+ "representation": "orange",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "Low",
+ "representation": "blue",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "gray",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "resourceGroup",
+ "formatter": 14,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ],
+ "filter": true,
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "Impact"
+ ]
+ }
+ }
+ },
+ "name": "query - advisorReliabilityRecommendations"
+ }
+ ]
+ },
+ "conditionalVisibilities": [
+ {
+ "parameterName": "SelectedTab",
+ "comparison": "isEqualTo",
+ "value": "Welcome"
+ },
+ {
+ "parameterName": "selectedOverviewTab",
+ "comparison": "isEqualTo",
+ "value": "reliabilityRecommendations"
+ }
+ ],
+ "name": "group - reliabilityRecommendations"
+ }
+ ],
+ "fallbackResourceIds": [
+ "Azure Monitor"
+ ],
+ "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
+ },
+ "version": "",
+ "workbookJson": "[string(variables('$fxv#0'))]",
+ "workbookId": "0b2",
+ "telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
+ "finOpsToolkitVersion": "0.8",
+ "resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
+ },
+ "resources": [
+ {
+ "condition": "[parameters('enableDefaultTelemetry')]",
+ "type": "Microsoft.Resources/deployments",
+ "apiVersion": "2022-09-01",
+ "name": "[format('pid-{0}-{1}', variables('telemetryId'), uniqueString(deployment().name, parameters('location')))]",
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_generator": {
+ "name": "FinOps toolkit",
+ "version": "[variables('finOpsToolkitVersion')]"
+ }
+ },
+ "resources": []
+ }
+ }
+ },
+ {
+ "type": "Microsoft.Insights/workbooks",
+ "apiVersion": "2022-04-01",
+ "name": "[guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))]",
+ "location": "[parameters('location')]",
+ "tags": "[variables('resourceTags')]",
+ "kind": "shared",
+ "properties": {
+ "category": "workbook",
+ "description": "[parameters('description')]",
+ "displayName": "[parameters('displayName')]",
+ "serializedData": "[variables('workbookJson')]",
+ "sourceId": "Azure Monitor",
+ "version": "[variables('version')]"
+ }
+ }
+ ],
+ "outputs": {
+ "workbookId": {
+ "type": "string",
+ "metadata": {
+ "description": "The resource ID of the workbook."
+ },
+ "value": "[resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))]"
+ },
+ "workbookUrl": {
+ "type": "string",
+ "metadata": {
+ "description": "Link to the workbook in the Azure portal."
+ },
+ "value": "[format('{0}/#view/AppInsightsExtension/UsageNotebookBlade/ComponentId/Azure%20Monitor/ConfigurationId/{1}/Type/{2}/WorkbookTemplateName/{3}', environment().portal, uriComponent(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName')))), reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').category, uriComponent(reference(resourceId('Microsoft.Insights/workbooks', guid(resourceGroup().id, 'Microsoft.Insights/workbooks', parameters('displayName'))), '2022-04-01').displayName))]"
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/deploy/optimization-workbook-0.8.ui.json b/docs/deploy/optimization-workbook-0.8.ui.json
new file mode 100644
index 000000000..63512825c
--- /dev/null
+++ b/docs/deploy/optimization-workbook-0.8.ui.json
@@ -0,0 +1,52 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
+ "handler": "Microsoft.Azure.CreateUIDef",
+ "version": "0.1.2-preview",
+ "parameters": {
+ "config": {
+ "basics": {
+ "description": "The Cost optimization workbook provides an overview of the cost posture of your Azure environment. [Learn more](https://aka.ms/finops/toolkit)",
+ "location": {
+ "label": "Location",
+ "resourceTypes": ["Microsoft.Insights/workbooks"]
+ }
+ }
+ },
+ "resourceTypes": ["Microsoft.Insights/workbooks"],
+ "basics": [
+ {
+ "name": "displayName",
+ "type": "Microsoft.Common.TextBox",
+ "label": "Name",
+ "defaultValue": "Cost optimization",
+ "toolTip": "Name of the workbook.",
+ "constraints": {
+ "required": true,
+ "regex": "^.{1,250}$",
+ "validationMessage": "Name cannot be longer than 250 characters."
+ },
+ "visible": true
+ }
+ ],
+ "steps": [
+ {
+ "name": "tags",
+ "label": "Tags",
+ "elements": [
+ {
+ "name": "tagsByResource",
+ "label": "Tags",
+ "toolTip": "Tags to apply.",
+ "type": "Microsoft.Common.TagsByResource",
+ "resources": ["Microsoft.Insights/workbooks"]
+ }
+ ]
+ }
+ ],
+ "outputs": {
+ "displayName": "[basics('displayName')]",
+ "location": "[location()]",
+ "tags": "[steps('tags').tagsByResource]"
+ }
+ }
+}
diff --git a/docs/deploy/optimization-workbook-latest.json b/docs/deploy/optimization-workbook-latest.json
index 0c383199b..72ae03059 100644
--- a/docs/deploy/optimization-workbook-latest.json
+++ b/docs/deploy/optimization-workbook-latest.json
@@ -4,8 +4,8 @@
"metadata": {
"_generator": {
"name": "bicep",
- "version": "0.24.24.22086",
- "templateHash": "7858422852674045208"
+ "version": "0.33.93.31351",
+ "templateHash": "10544991197071991923"
}
},
"parameters": {
@@ -3762,6 +3762,7 @@
"query": "recoveryservicesresources\r\n| where type =~ 'microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems'\r\n| extend vaultId = tostring(properties.vaultId),resourceId = tostring(properties.sourceResourceId),idleBackup= datetime_diff('day', now(), todatetime(properties.lastBackupTime)) > 90, resourceType=tostring(properties.workloadType), protectionState=tostring(properties.protectionState),lastBackupTime=tostring(properties.lastBackupTime), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),lastBackupDate=todatetime(properties.lastBackupTime)\r\n| where idleBackup != 0\r\n| project resourceId,vaultId,idleBackup,lastBackupDate,resourceType,protectionState,lastBackupTime,location,resourceGroup,subscriptionId\r\n| join kind = inner(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | extend vaultId = id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | project vaultId\r\n )\r\n on vaultId\r\n | project-away vaultId1",
"size": 0,
"title": "Idle backups",
+ "showExportToExcel": true,
"queryType": 1,
"resourceType": "microsoft.resourcegraph/resources",
"crossComponentResources": [
@@ -4446,7 +4447,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "resources\r\n|Β whereΒ typeΒ ==Β 'microsoft.compute/snapshots'\r\n|Β whereΒ resourceGroupΒ inΒ ({ResourceGroup})\r\n|Β extendΒ StorageSkuΒ =Β tostring(sku.tier),Β resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),diskSize=tostring(properties.diskSizeGB)\r\n|Β whereΒ StorageSkuΒ ==Β \"Premium\"\r\n|Β projectΒ id,name,StorageSku,diskSize,location,resourceGroup,subscriptionId\r\n|Β joinΒ kindΒ =Β innerunique(\r\nΒ Β Β Β resources\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β replace('{}',Β 'null',Β tostring(tags))\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β parse_json(replaced_tags)\r\nΒ Β Β Β |Β mv-expandΒ replaced_tags\r\nΒ Β Β Β |Β extendΒ tagNameΒ =Β tostring(bag_keys(replaced_tags)[0])\r\nΒ Β Β Β |Β extendΒ tagValueΒ =Β tostring(replaced_tags['{TagName}'])\r\nΒ Β Β Β |Β whereΒ tagNameΒ hasΒ '{TagName}'Β andΒ tagValueΒ hasΒ '{TagValue}'\r\nΒ Β Β Β |Β distinctΒ id\r\nΒ Β Β Β )\r\nΒ Β Β Β onΒ id\r\n",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend StorageSku = tostring(sku.tier), resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup),diskSize=tostring(properties.diskSizeGB)\r\n| where StorageSku == \"Premium\"\r\n| project id,name,StorageSku,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
"size": 0,
"title": "Snapshots using premium storage",
"noDataMessage": "No snapshots are using Premium storage",
@@ -4525,7 +4526,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "resources\r\n|Β whereΒ typeΒ ==Β 'microsoft.compute/snapshots'\r\n|Β whereΒ resourceGroupΒ inΒ ({ResourceGroup})\r\n|Β extendΒ parentDiskΒ =Β properties.creationData.sourceResourceId,Β diskSize=tostring(properties.diskSizeGB),resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n|Β projectΒ id,parentDisk,diskSize,location,resourceGroup,subscriptionId\r\n|Β joinΒ kindΒ =Β innerunique(\r\nΒ Β Β Β resources\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β replace('{}',Β 'null',Β tostring(tags))\r\nΒ Β Β Β |Β extendΒ replaced_tagsΒ =Β parse_json(replaced_tags)\r\nΒ Β Β Β |Β mv-expandΒ replaced_tags\r\nΒ Β Β Β |Β extendΒ tagNameΒ =Β tostring(bag_keys(replaced_tags)[0])\r\nΒ Β Β Β |Β extendΒ tagValueΒ =Β tostring(replaced_tags['{TagName}'])\r\nΒ Β Β Β |Β whereΒ tagNameΒ hasΒ '{TagName}'Β andΒ tagValueΒ hasΒ '{TagValue}'\r\nΒ Β Β Β |Β distinctΒ id\r\nΒ Β Β Β )\r\nΒ Β Β Β onΒ id\r\n",
+ "query": "resources\r\n| where type == 'microsoft.compute/snapshots'\r\n| where resourceGroup in ({ResourceGroup})\r\n| extend parentDisk = properties.creationData.sourceResourceId, diskSize=tostring(properties.diskSizeGB),resourceGroup=strcat('/subscriptions/',subscriptionId,'/resourceGroups/',resourceGroup)\r\n| project id,parentDisk,diskSize,location,resourceGroup,subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}'])\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct id\r\n )\r\n on id\r\n",
"size": 0,
"title": "All Managed Disks snapshots",
"noDataMessage": "No snapshots found",
@@ -4574,7 +4575,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "resources\r\n|Β whereΒ typeΒ ==Β 'microsoft.compute/disks'\r\n|Β projectΒ id\r\n",
+ "query": "resources\r\n| where type == 'microsoft.compute/disks'\r\n| project id\r\n",
"size": 0,
"title": "All managed disks",
"queryType": 1,
@@ -6596,6 +6597,22 @@
"linkLabel": "VM Scale Set",
"subTarget": "VMSS",
"style": "link"
+ },
+ {
+ "id": "be820ada-a0f4-4c51-b17b-3e506edd1410",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Custom Images",
+ "subTarget": "CustomImages",
+ "style": "link"
+ },
+ {
+ "id": "1dda3cc4-59ba-4758-9c51-d6c9fab18647",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Azure Arc",
+ "subTarget": "arc",
+ "style": "link"
}
]
},
@@ -6611,188 +6628,1252 @@
"content": {
"version": "NotebookGroup/1.0",
"groupType": "editable",
- "title": "Virtual Machines",
- "loadType": "always",
"items": [
{
- "type": 12,
+ "type": 3,
"content": {
- "version": "NotebookGroup/1.0",
- "groupType": "editable",
- "loadType": "always",
- "items": [
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
- "size": 0,
- "title": "AHB Disabled",
- "noDataMessage": "All of your VMs have AHB enabled.",
- "noDataMessageStyle": 3,
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ],
- "gridSettings": {
- "formatters": [
- {
- "columnMatch": "subscriptionId",
- "formatter": 15,
- "formatOptions": {
- "linkTarget": null,
- "showIcon": true
- }
- }
- ]
- }
- },
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
- },
- "name": "AHB Disabled"
- },
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.['licenseType']) has \"Windows\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
- "size": 0,
- "title": "AHB Enabled",
- "noDataMessage": "None of your VMs have AHB enabled.",
- "noDataMessageStyle": 4,
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ],
- "gridSettings": {
- "formatters": [
- {
- "columnMatch": "VMRG",
- "formatter": 0,
- "tooltipFormat": {
- "tooltip": "test"
- }
- },
- {
- "columnMatch": "subscriptionId",
- "formatter": 15,
- "formatOptions": {
- "linkTarget": null,
- "showIcon": true
- }
- }
- ]
- }
- },
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
- },
- "name": "WindowsAHBEnabled"
- },
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "resourcechanges\r\n| where properties.changeType == \"Update\" and properties.targetResourceType == \"microsoft.compute/virtualmachines\"\r\n| mv-expand changes = properties.changes\r\n| mv-expand LicenseChanges=changes.['properties.licenseType']\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| where isnotnull(LicenseChanges)\r\n| where tostring(LicenseChanges.newValue) has \"Windows\"\r\n| project VMID=properties.targetResourceId, NewLicense=tostring(LicenseChanges.newValue), DateofChange=todatetime(properties.changeAttributes.timestamp)\r\n",
- "size": 0,
- "title": "VM Latest Change Last 7 days",
- "noDataMessage": "AHB was not enabled in the last 7 days.",
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ]
- },
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "CustomImageAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType != \"Windows\"\r\n| extend ActualCores = toint(extract(\".[A-Z]([0-9]+)\", 1, tostring(properties.hardwareProfile.vmSize)))\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| where tostring(properties.['licenseType']) has 'Windows'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.osDisk.osType), VMSize=tostring (properties.hardwareProfile.vmSize), ActualCores, LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, ActualCores,VMLocation,OSType, LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "True"
+ },
+ "name": "CustomImageAHBDisabled"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Custom Images - Windows Azure Hybrid Benefit (AHB) Overview\r\n#### Note: This tab contains information only about Custom Images where the OS is Windows."
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors-CustomImages",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name, SubId=id\r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows, SubId, SubscriptionName\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "SubId",
+ "formatter": 5
},
- "name": "VM Latest Change Last 7 days"
+ {
+ "columnMatch": "SubscriptionName",
+ "formatter": 5
+ }
+ ],
+ "hierarchySettings": {
+ "treeType": 1,
+ "groupBy": [
+ "SubscriptionName"
+ ],
+ "finalBy": "SubscriptionName"
},
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
- "size": 0,
- "title": "Get VM vCPU",
- "exportParameterName": "ResourceSKU",
- "showExportToExcel": true,
- "queryType": 12,
- "gridSettings": {
- "rowLimit": 5000
- }
+ "labelSettings": [
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
},
- "conditionalVisibility": {
- "parameterName": "AlwaysHidden",
- "comparison": "isEqualTo",
- "value": "true"
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
},
- "name": "query - Get VM vCPU"
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
+ },
+ "sortBy": [],
+ "tileSettings": {
+ "titleContent": {
+ "columnMatch": "CheckAHBWindows",
+ "formatter": 1
},
- {
- "type": 1,
- "content": {
- "json": "## Windows Azure Hybrid Benefit (AHB) Overview"
- },
- "name": "AHB Overview"
+ "subtitleContent": {
+ "columnMatch": "SubscriptionName",
+ "formatter": 1
},
- {
- "type": 1,
- "content": {
- "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
- "style": "info"
- },
- "name": "NUmber of Processors",
- "styleSettings": {
- "margin": "10px",
- "showBorder": true
+ "leftContent": {
+ "columnMatch": "count_",
+ "formatter": 12,
+ "formatOptions": {
+ "palette": "auto"
}
},
- {
- "type": 3,
- "content": {
- "version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckAHBWindows\r\n",
- "size": 0,
- "title": "Summary of Windows VMs with or without AHB per Subscription",
- "showRefreshButton": true,
- "showExportToExcel": true,
- "queryType": 1,
- "resourceType": "microsoft.resourcegraph/resources",
- "crossComponentResources": [
- "{Subscription}"
- ],
- "visualization": "table",
- "gridSettings": {
- "sortBy": [
- {
- "itemKey": "SubscriptionName",
- "sortOrder": 1
- }
- ],
- "labelSettings": [
- {
- "columnId": "SubscriptionName",
- "label": "Subscription Name"
- },
- {
- "columnId": "CheckAHBWindows",
- "label": "Is AHB enabled?"
- },
- {
- "columnId": "count_",
- "label": "Number of resources"
- }
- ]
+ "showBorder": false,
+ "size": "auto"
+ },
+ "chartSettings": {
+ "xAxis": "SubscriptionName"
+ }
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB per Subscription - Custom Images"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type has \"microsoft.compute/virtualmachines\" or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where properties.storageProfile.osDisk.osType == \"Windows\"\r\n| extend OS=properties.storageProfile.imageReference.id\r\n| where isnotnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart"
+ },
+ "customWidth": "50",
+ "name": "Summary of Windows VMs with or without AHB-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Consumed Licenses\r\nTotal number of Windows licenses cores consumed by all Windows virtual machines.\r\n",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Consumed Licenses-CustomImages"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "### Number of required Cores to enable Windows Azure Hybrid Benefit\r\nNumber of cores required to enable AHB across the entire environment.",
+ "style": "info"
+ },
+ "customWidth": "50",
+ "name": "Number of required Cores-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per AHB Priority",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "Prioritize AHB",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "33",
+ "showPin": false,
+ "name": "ConsumedCoresPerAhubpriority-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBEnabled\"}],\"projectRename\":[{\"originalName\":\"[CustomImageAHBEnabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBEnabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]}]}",
+ "size": 0,
+ "title": "Consumed Cores per VM",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "30",
+ "showPin": false,
+ "name": "ConsumedCoresPerVM-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\",\"mergeType\":\"table\",\"leftTable\":\"CustomImageAHBDisabled\"}],\"projectRename\":[{\"originalName\":\"[Added column]\",\"mergedName\":\"Prioritize AHB\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"static\",\"resultVal\":\"Low Priority\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"static\",\"resultVal\":\"High Priority\"}}]},{\"originalName\":\"[Added column]\",\"mergedName\":\"ConsumedCores\",\"fromId\":null,\"isNewItem\":true,\"newItemData\":[{\"criteriaContext\":{\"leftOperand\":\"ActualCores\",\"operator\":\"<=\",\"rightValType\":\"static\",\"rightVal\":\"8\",\"resultValType\":\"expression\",\"resultVal\":\"8\"}},{\"criteriaContext\":{\"operator\":\"Default\",\"rightValType\":\"column\",\"resultValType\":\"column\",\"resultVal\":\"ActualCores\"}}]},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"},{\"originalName\":\"[CustomImageAHBDisabled].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02ac\"}]}",
+ "size": 0,
+ "title": "Required CPU cores for AHB activation on remaining VMs",
+ "noDataMessage": "All VMs within the current scope have AHB enabled",
+ "noDataMessageStyle": 3,
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "ConsumedCores"
+ ],
+ "group": "VMName",
+ "createOtherGroup": null
+ }
+ },
+ "customWidth": "36",
+ "showPin": false,
+ "name": "CoresNotEnabledperAHBPriority-CustomImages"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "ae5e8765-47ef-46a6-803b-6b7124c098d2",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBEnabled",
+ "label": "See VMs with AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
+ "version": "KqlParameterItem/1.0",
+ "name": "AHBDisabled",
+ "label": "See VMs without AHB",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "VM AHB Enabled - CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"ConsumedCoresPerAhubpriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[ConsumedCoresPerAhubpriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBEnabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBEnabeld-CustomImages"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"Merge/1.0\",\"merges\":[{\"id\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\",\"mergeType\":\"table\",\"leftTable\":\"CoresNotEnabledperAHBPriority-CustomImages\"}],\"projectRename\":[{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId\",\"mergedName\":\"WindowsId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMName\",\"mergedName\":\"VMName\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMRG\",\"mergedName\":\"VMRG\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMSize\",\"mergedName\":\"VMSize\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ActualCores\",\"mergedName\":\"ActualCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].ConsumedCores\",\"mergedName\":\"ConsumedCores\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].Prioritize AHB\",\"mergedName\":\"Prioritize AHB\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMLocation\",\"mergedName\":\"VMLocation\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].OSType\",\"mergedName\":\"OSType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].LicenseType\",\"mergedName\":\"LicenseType\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].subscriptionId\",\"mergedName\":\"subscriptionId\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].QuickFix\",\"mergedName\":\"QuickFix\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].VMIDFull\",\"mergedName\":\"VMIDFull\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"},{\"originalName\":\"[CoresNotEnabledperAHBPriority-CustomImages].WindowsId1\",\"mergedName\":\"WindowsId1\",\"fromId\":\"0b494d5e-27b1-4cf6-bcd5-3e4e813a02e8\"}]}",
+ "size": 0,
+ "title": "VMs with Azure Hybrid Benefit not enabled",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 7,
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "WindowsId",
+ "formatter": 13,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ },
+ {
+ "columnMatch": "Prioritize AHB",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "Low Priority",
+ "representation": "2",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "High Priority",
+ "representation": "success",
+ "text": "{0}{1}"
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": "{0}{1}"
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "QuickFix",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "VMIDFull",
+ "formatter": 5
+ },
+ {
+ "columnMatch": "WindowsId1",
+ "formatter": 5
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "WindowsId",
+ "label": "ResourceId"
+ },
+ {
+ "columnId": "VMName",
+ "label": "VM name"
+ },
+ {
+ "columnId": "VMRG",
+ "label": "Resource group"
+ },
+ {
+ "columnId": "VMSize",
+ "label": "SKU"
+ },
+ {
+ "columnId": "ActualCores",
+ "label": "Number of cores"
+ },
+ {
+ "columnId": "ConsumedCores",
+ "label": "Consumed cores"
+ },
+ {
+ "columnId": "Prioritize AHB",
+ "label": "AHB priority"
+ },
+ {
+ "columnId": "VMLocation",
+ "label": "Location"
+ },
+ {
+ "columnId": "OSType",
+ "label": "OS"
+ },
+ {
+ "columnId": "LicenseType",
+ "label": "License"
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AHBDisabled",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "showPin": false,
+ "name": "VmsAHBDisabled-CustomImages"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "CustomImages"
+ },
+ "name": "CustomImages"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "items": [
+ {
+ "type": 11,
+ "content": {
+ "version": "LinkItem/1.0",
+ "style": "tabs",
+ "links": [
+ {
+ "id": "3f12a4b6-b18d-4191-8c1c-6045a7edcb6b",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server ESU licenses",
+ "subTarget": "windowsEsu",
+ "style": "link"
+ },
+ {
+ "id": "0ca197b7-6f96-4def-9be4-dc26bb09538a",
+ "cellValue": "SelectedSubTab",
+ "linkTarget": "parameter",
+ "linkLabel": "Windows Server Management enabled by Azure Arc",
+ "subTarget": "arcAHB",
+ "style": "link"
+ }
+ ]
+ },
+ "name": "links - 1"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server ESU licenses",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| project name, status, operatingSystem, esuStatus\r\n| summarize count() by esuStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not enabled",
+ "color": "red"
+ },
+ {
+ "seriesName": "Enabled",
+ "color": "green"
+ },
+ {
+ "seriesName": "Enabled by Volume License",
+ "color": "greenDarkDark"
+ },
+ {
+ "seriesName": "License deactivated",
+ "color": "yellow"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Review Your Current License Usage\r\n\r\nTo review your current license usage, go to the [Azure Arc](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/usageOverview) resource blade.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ },
+ {
+ "id": "e24ddae0-37c5-46a7-b52f-b307baaa6f51",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleLicenses",
+ "label": "View eligible licenses?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ }
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Windows Server 2012 or 2012 R2 machines running Arc agent version below 1.34 are ineligible for Extended Security Updates (ESUs). Upgrade to the latest version of the Azure Arc agent to allow enabling ESU on these machines.\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ 'microsoft.hybridcompute/machines'\r\n| extend esuEligibility = properties.licenseProfile.esuProfile.esuEligibility\r\n| where esuEligibility =~ \"Eligible\"\r\n| extend agentVersion = tostring(properties.agentVersion)\r\n| extend parsedAgentVersion = parse_version(agentVersion)\r\n| where parsedAgentVersion >= parse_version(\"1.34\")\r\n| extend machineId = tolower(id)\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n) on $left.machineId == $right.machineId\r\n| join kind=leftouter (\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/licenses\"\r\n | extend licenseId = tolower(id)\r\n) on licenseId\r\n| extend status = case(\r\n properties.status =~ 'Connected', 'Connected',\r\n properties.status =~ 'Disconnected', 'Offline',\r\n properties.status =~ 'Error', 'Error',\r\n properties.status =~ 'Expired', 'Expired',\r\n 'Unknown')\r\n| extend operatingSystem = properties.osSku\r\n| extend esuStatus = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), 'Enabled',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', 'Enabled by Volume License',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'License deactivated',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', 'Not enabled',\r\n 'Unknown'\r\n)\r\n| extend esuStatusIcon = case(\r\n (properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Activated'), '8',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Active', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'Assigned' and properties2.licenseDetails.state =~ 'Deactivated' and properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '9',\r\n properties.licenseProfile.esuProfile.licenseAssignmentState =~ 'NotAssigned' or properties.licenseProfile.esuProfile.esuKeyState =~ 'Inactive', '7',\r\n '91'\r\n)\r\n| project name, status, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags, esuStatus, esuStatusIcon, agentVersion\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesEsu','Microsoft.HybridCompute/machines'))\r\n| project name,esuStatus,esuStatusIcon,operatingSystem,resourceGroup,subscriptionDisplayName,status,type,id,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "windowsEsu"
+ },
+ "name": "group-Esu"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Windows Server Management enabled by Azure Arc",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "## Benefits of Windows Server Management with Azure Arc\r\n\r\nWindows Server Management enabled by Azure Arc offers customers with Windows Server licenses that have active Software Assurances or Windows Server licenses that are active subscription licenses a few benefits, including access to Azure Update Management, Azure Change Tracking and Inventory and Windwos best practices assessment. FOr the full list of benefits, visit [Windows Server Management enabled by Azure Arc.](https://learn.microsoft.com/azure/azure-arc/servers/windows-server-management-overview?tabs=portal)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "text - 5"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| summarize count() by benefitsStatus",
+ "size": 0,
+ "title": "Coverage Summary",
+ "showRefreshButton": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "piechart",
+ "chartSettings": {
+ "yAxis": [
+ "count_"
+ ],
+ "showLegend": true,
+ "seriesLabelSettings": [
+ {
+ "seriesName": "Not activated",
+ "color": "red"
+ },
+ {
+ "seriesName": "Activated",
+ "color": "green"
+ },
+ {
+ "seriesName": "Activated via Pay-as-you-go",
+ "color": "greenDarkDark"
+ }
+ ]
+ }
+ },
+ "name": "coverageSummary"
+ },
+ {
+ "type": 9,
+ "content": {
+ "version": "KqlParameterItem/1.0",
+ "parameters": [
+ {
+ "id": "16791a28-f78e-4b26-a2e9-a9fbbda915df",
+ "version": "KqlParameterItem/1.0",
+ "name": "eligibleResources",
+ "label": "View eligible resources?",
+ "type": 2,
+ "isRequired": true,
+ "typeSettings": {
+ "additionalResourceOptions": [],
+ "showDefault": false
+ },
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
+ "timeContext": {
+ "durationMs": 86400000
+ },
+ "value": "Yes"
+ }
+ ],
+ "style": "pills",
+ "queryType": 0,
+ "resourceType": "microsoft.operationalinsights/workspaces"
+ },
+ "name": "parameters - 5"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible Resources",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "To enable Windows Server Management with Azure Arc, visit the [Arc service blade.](https://ms.portal.azure.com/#view/Microsoft_Azure_ArcCenterUX/ArcCenterMenuBlade/~/softwareAssurance)\r\n\r\n",
+ "style": "info"
+ },
+ "name": "txtEligibleAHBResources"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/machines\" and isempty(kind)\r\n| extend status = properties.status\r\n| extend operatingSystem = properties.osSku\r\n| where properties.osType =~ 'windows'\r\n| extend licenseProfile = properties.licenseProfile\r\n| extend licenseStatus = tostring(licenseProfile.licenseStatus)\r\n| extend licenseChannel = tostring(licenseProfile.licenseChannel)\r\n| extend productSubscriptionStatus = tostring(licenseProfile.productProfile.subscriptionStatus)\r\n| extend softwareAssurance = licenseProfile.softwareAssurance\r\n| extend softwareAssuranceCustomer = licenseProfile.softwareAssurance.softwareAssuranceCustomer\r\n| extend benefitsStatus = case(\r\n softwareAssuranceCustomer == true, \"Activated\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"Activated via Pay-as-you-go\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"Not activated\",\r\n \"Not activated\")\r\n| extend benefitsStatusIcon = case(\r\n softwareAssuranceCustomer == true, \"8\",\r\n softwareAssuranceCustomer == true, \"8\",\r\n (licenseStatus =~ \"Licensed\" and licenseChannel =~ \"PGS:TB\") or productSubscriptionStatus =~ \"Enabled\", \"8\",\r\n isnull(softwareAssurance) or isnull(softwareAssuranceCustomer) or softwareAssuranceCustomer == false, \"7\",\r\n \"7\")\r\n| project name, status, benefitsStatus, benefitsStatusIcon, resourceGroup, subscriptionId, operatingSystem, id, type, location, kind, tags\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| where (type in~ ('Microsoft.HybridCompute/machinesSoftwareAssurance','Microsoft.HybridCompute/machines'))\r\n| project name,benefitsStatus,benefitsStatusIcon,status,resourceGroup,operatingSystem,id,type,kind,location,subscriptionId\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible resources",
+ "noDataMessage": "There are no eligible resources.",
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "benefitsStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "3",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ },
+ {
+ "columnMatch": "esuStatusIcon",
+ "formatter": 18,
+ "formatOptions": {
+ "thresholdsOptions": "icons",
+ "thresholdsGrid": [
+ {
+ "operator": "==",
+ "thresholdValue": "7",
+ "representation": "4",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "9",
+ "representation": "warning",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "8",
+ "representation": "success",
+ "text": ""
+ },
+ {
+ "operator": "==",
+ "thresholdValue": "91",
+ "representation": "unknown",
+ "text": "{0}{1}"
+ },
+ {
+ "sourceColumn": "esuStatus",
+ "operator": "Default",
+ "thresholdValue": null,
+ "representation": "unknown",
+ "text": ""
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arcAHBResources"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleResources",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleResources"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Eligible licenses",
+ "items": [
+ {
+ "type": 1,
+ "content": {
+ "json": "Keep in mind, subscription read permissions are required to give accurate core count and usage information for your ESU licenses. Physical core based licenses are subject to different licensing guidelines and are excluded from this view.[Learn more.](https://learn.microsoft.com/azure/azure-arc/servers/license-extended-security-updates)",
+ "style": "info"
+ },
+ "name": "txtLearnMoreLicense"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "// Run query to see results.\r\nresources\r\n| where type =~ \"microsoft.hybridcompute/licenses\"\r\n| extend sku = properties.licenseDetails.edition\r\n| extend totalCores = properties.licenseDetails.processors\r\n| extend coreType = case(\r\n properties.licenseDetails.type =~ 'vCore','Virtual core',\r\n properties.licenseDetails.type =~ 'pCore','Physical core',\r\n 'Unknown'\r\n)\r\n| extend statusIcon = case(\r\n properties.licenseDetails.state =~ 'Activated', '8',\r\n properties.licenseDetails.state =~ 'Deactivated', '7',\r\n '91'\r\n)\r\n| extend status = case(\r\n properties.licenseDetails.state =~ 'Activated', 'Activated',\r\n properties.licenseDetails.state =~ 'Deactivated','Deactivated',\r\n 'Unknown'\r\n)\r\n| extend licenseId = tolower(tostring(id)) // Depending on what is stored in license profile, might have to get the immutableId instead\r\n| join kind=leftouter(\r\n resources\r\n | where type =~ \"microsoft.hybridcompute/machines/licenseProfiles\"\r\n | extend machineId = tolower(tostring(trim_end(@\"\\/\\w+\\/(\\w|\\.)+\", id)))\r\n | extend licenseId = tolower(tostring(properties.esuProfile.assignedLicense))\r\n | summarize resources = count() by licenseId\r\n) on licenseId // Get count of license profile per license, a license profile is created for each machine that is assigned a license\r\n| extend resources = iff(isnull(resources), 0, resources)\r\n| project id, name, type, location, subscriptionId, resourceGroup, kind, tags, extendedLocation, sku, totalCores, coreType, status, statusIcon, resources\r\n| extend subscriptionDisplayName=case(subscriptionId =~ 'e75c95f3-27b4-410f-a40e-2b9153a807dd','AEther Dev',subscriptionId =~ '823ca539-d44d-43ee-8dc8-023fd4f27396','AIOps_FailureSimulation_DevTest',subscriptionId =~ 'b2a328a7-ffff-4c09-b643-a4758cf170bc','AISC-DEV-02',subscriptionId =~ 'eef8b6d5-94da-4b36-9327-a662f2674efb','AISC-EngSys-01',subscriptionId =~ 'e0fd569c-e34a-4249-8c24-e8d723c7f054','AML - Responsible AI R&D',subscriptionId =~ 'f1d79e73-f8e3-4b10-bfdb-4207ca0723ed','AML Infra - Engineering System',subscriptionId =~ 'dad45786-32e5-4ef3-b90e-8e0838fbadb6','AnE.ExP.NonProduction',subscriptionId =~ '017ad81c-b730-4564-9109-9b763243a9a6','Anomaly Real Time-DevTest',subscriptionId =~ 'e686ef8c-d35d-4e9b-92f8-caaaa7948c0a','Applied Sciences Group Dev',subscriptionId =~ '6e967edb-425b-4a33-ae98-f1d2c509dda3','Arc enabled Infrastructure - Demo',subscriptionId =~ '710c6ed8-d8d9-4c51-b100-dc4d9e10dd18','ARC-ESU-TESTING-03',subscriptionId =~ '2145a411-d149-4010-84d4-40fe8a55db44','ARM Test Environment',subscriptionId =~ 'e2a8a7b3-cb7a-4930-9c79-2b0eb7bf843c','ASZ_Lab_Hardware_Dev_1',subscriptionId =~ '4c33a6bb-d566-4d0b-8951-00b55a91fba8','AzPIESecurity-DEV-Apple',subscriptionId =~ 'b65b516b-415b-4c68-a254-bfa7411275f8','Azure CloudES CDP ER - Test',subscriptionId =~ '6785ea1f-ac40-4244-a9ce-94b12fd832ca','Azure Migrate Demo Subscription',subscriptionId =~ '8c3c936a-c09b-4de3-830b-3f5f244d72e9','Azure Migrate Program Management Team',subscriptionId =~ '432a7068-99ae-4975-ad38-d96b71172cdf','Azure Profiler - Testing',subscriptionId =~ 'caffe3c0-acbd-4d01-af76-a45f421bfb64','Azure_Base_LivesiteArmory_test',subscriptionId =~ 'a1920ebd-59b7-4f19-af9f-5e80599e88e4','Babel',subscriptionId =~ 'b43a6159-1bea-4fa2-9407-e875fdc0ff55','BAP IA EU Schrems (P)',subscriptionId =~ 'ae71ef11-a03f-4b4f-a0e6-ef144727c711','Bing MM Measurement',subscriptionId =~ '8ef80208-601f-4c83-802e-751d211745f9','CloudAnalytics_Prod1',subscriptionId =~ 'f7b4a5ce-d3bd-4a03-84fe-8bcad772c8c1','Cog Services Computer Vision',subscriptionId =~ '38dbd059-bd26-4172-af17-bcc5a00744de','Core-ES-STREAM-DeXDI',subscriptionId =~ '87e8a61c-4832-4cfe-8b72-c12554f2309a','Cosmos_C&E_Azure_Azure Resource Manager_100424',subscriptionId =~ '8c4b5b03-3b24-4ed0-91f5-a703cd91b412','Cosmos_C&E_Azure_AzureEngineeringSystems_100200',subscriptionId =~ 'b988efc7-1bc8-4a73-b4a2-5ad864580250','Cosmos_C&E_DPG_Big Data_100036',subscriptionId =~ '6121bf73-2dc9-47ac-8b6a-c6ae4b88ef39','Cost Management PM',subscriptionId =~ '44074499-ad9f-45b9-9b0b-f594f8736a45','CSX-WSD-CFE-TNT-QPP',subscriptionId =~ '3cd01953-be46-4f9b-a4e0-26f19f428765','CSX-WSD-CFE-TNT-TOOLKITHUB',subscriptionId =~ '60214a3c-65a2-46f8-8b32-f959f2454106','Data Pillar Security Tooling',subscriptionId =~ 'f7c445af-a4de-4264-9e87-3196d6bc384d','Efficiency Pack Services (MSIT)',subscriptionId =~ '86f010b8-6473-4cb9-90c1-671c74faa4ee','emilyzhu dev subscription',subscriptionId =~ 'f3326bfd-5406-4136-a835-f64ccbfd9050','FTK @ MS',subscriptionId =~ 'd2c9544f-4329-4642-b73d-020e7fef844f','HPCScrub1',subscriptionId =~ 'bac420ed-c6fc-4a05-8ac1-8c0c52da1d6e','IDEAs MS Reporting',subscriptionId =~ '3cd95ff9-ac62-4b5c-8240-0cd046687ea0','Internal App Insights Resources for Perflens',subscriptionId =~ 'a386d5ea-ea90-441a-8263-d816368c84a1','IOT_PLATFORM_UPX_TEST',subscriptionId =~ '6a0ab98c-24d4-4131-8cd7-0a78bfce58f5','ITSM Integration - Production - New',subscriptionId =~ '13723929-6644-4060-a50a-cc38ebc5e8b1','LinuxMdsd Test',subscriptionId =~ '98b02a69-28a5-4ee7-a622-cd69c7a59c4e','Marvel Intelligence Model Training Subscription',subscriptionId =~ '1278a874-89fc-418c-b6b9-ac763b000415','Microsoft Azure Internal Consumption (nbrady)',subscriptionId =~ '29de2cfc-f00a-43bb-bdc8-3108795bd282','MSFT-Modern Device-Modern Mgmt-Imaging00',subscriptionId =~ '54b875cc-a81a-4914-8bfd-1a36bc7ddf4d','MSFT-WindowsVirtualDesktop-01',subscriptionId =~ '4dc2cd39-7a89-43d8-bebe-8bb501359891','Observability_AzMon_Grafana_Dev',subscriptionId =~ 'a471d615-ff98-4e80-b375-a19543d4691e','ODC-OneBox-Resources',subscriptionId =~ '1163fbbe-27e7-4b0f-8466-195fe5417043','Python_AI_Tools_PM_Team_Sub (jbinder)',subscriptionId =~ '3905431d-c062-4c17-8fd9-c51f89f334c4','Pytorch Build',subscriptionId =~ '3f577935-3138-4d07-86b3-75651b696483','Responsible & OpenAi Research',subscriptionId =~ '0f301386-8979-4981-acca-973d553078e7','Scope Team Test Subscription',subscriptionId =~ '1b0a5c20-7373-41a2-8fec-7364cceb7bbf','Services Hub Demo Open',subscriptionId =~ 'e72e5254-f265-4e95-9bd2-9ee8e7329051','Speech Services - DEV - SDK (carbon)',subscriptionId =~ 'a1c3dc6b-8630-4bb7-a29e-4ed4407c329b','Speech Services - EXP2',subscriptionId =~ '736af2bf-9fcb-4145-a19b-5b30b2b8949d','Trey International UK',subscriptionId =~ '51f73f67-1f29-4120-863e-dd315f743fc1','Trey Partner Lab 2',subscriptionId =~ '9ec51cfd-5ca7-4d76-8101-dd0a4abc5674','Trey Research Corporate',subscriptionId =~ '73c0021f-a37d-433f-8baa-7450cb54eea6','Trey Research Finance',subscriptionId =~ 'ed570627-0265-4620-bb42-bae06bcfa914','Trey Research IT',subscriptionId =~ '64e355d7-997c-491d-b0c1-8414dccfcf42','Trey Research R&D Playground',subscriptionId =~ '586f1d47-9dd9-43d5-b196-6e28f8405ff8','Trey Research R&D Production',subscriptionId =~ '9ec1d932-0f3f-486c-acc6-e7d78b358f9b','TScience',subscriptionId =~ '79f57c16-00fe-48da-87d4-5192e86cd047','TScienceGPU',subscriptionId =~ 'bac044cf-49e1-4843-8dda-1ce9662606c8','UI Fabric',subscriptionId =~ '6760347d-9ffe-41a9-ba11-c139dcea5ce6','xt-teams-migration-dev',subscriptionId =~ '45f9252d-e27e-4ed8-ab4e-dc5054de13fa','Contoso IT - Retail - Prod',subscriptionId)\r\n| where (type !~ ('dell.storage/filesystems'))\r\n| where (type !~ ('arizeai.observabilityeval/organizations'))\r\n| where (type !~ ('lambdatest.hyperexecute/organizations'))\r\n| where (type !~ ('pinecone.vectordb/organizations'))\r\n| where (type !~ ('microsoft.weightsandbiases/instances'))\r\n| where (type !~ ('purestorage.block/storagepools/avsstoragecontainers'))\r\n| where (type !~ ('purestorage.block/reservations'))\r\n| where (type !~ ('purestorage.block/storagepools'))\r\n| where (type !~ ('solarwinds.observability/organizations'))\r\n| where (type !~ ('splitio.experimentation/experimentationworkspaces'))\r\n| where (type !~ ('microsoft.agfoodplatform/farmbeats'))\r\n| where (type !~ ('microsoft.appsecurity/policies'))\r\n| where (type !~ ('microsoft.arc/all'))\r\n| where (type !~ ('microsoft.arc/allfairfax'))\r\n| where (type !~ ('microsoft.cdn/profiles/customdomains'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups/origins'))\r\n| where (type !~ ('microsoft.cdn/profiles/origingroups'))\r\n| where (type !~ ('microsoft.cdn/profiles/afdendpoints/routes'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets/rules'))\r\n| where (type !~ ('microsoft.cdn/profiles/rulesets'))\r\n| where (type !~ ('microsoft.cdn/profiles/secrets'))\r\n| where (type !~ ('microsoft.cdn/profiles/securitypolicies'))\r\n| where (type !~ ('microsoft.chaos/privateaccesses'))\r\n| where (type !~ ('microsoft.sovereign/transparencylogs'))\r\n| where (type !~ ('microsoft.sovereign/landingzoneconfigurations'))\r\n| where (type !~ ('microsoft.hardwaresecuritymodules/cloudhsmclusters'))\r\n| where (type !~ ('microsoft.compute/computefleetinstances'))\r\n| where (type !~ ('microsoft.compute/standbypoolinstance'))\r\n| where (type !~ ('microsoft.compute/virtualmachineflexinstances'))\r\n| where (type !~ ('microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/extensions'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/namespaces'))\r\n| where (type !~ ('microsoft.kubernetes/connectedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.containerservice/managedclusters/microsoft.kubernetesconfiguration/fluxconfigurations'))\r\n| where (type !~ ('microsoft.portalservices/extensions/deployments'))\r\n| where (type !~ ('microsoft.portalservices/extensions'))\r\n| where (type !~ ('microsoft.portalservices/extensions/slots'))\r\n| where (type !~ ('microsoft.portalservices/extensions/versions'))\r\n| where (type !~ ('microsoft.datacollaboration/workspaces'))\r\n| where (type !~ ('microsoft.deviceregistry/devices'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/activedeployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/agents'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deployments'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/deviceclasses'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts/updates'))\r\n| where (type !~ ('microsoft.deviceupdate/updateaccounts'))\r\n| where (type !~ ('private.devtunnels/tunnelplans'))\r\n| where (type !~ ('private.easm/workspaces'))\r\n| where (type !~ ('microsoft.edgeorder/virtual_orderitems'))\r\n| where (type !~ ('microsoft.workloads/epicvirtualinstances'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources/provisioningpolicies'))\r\n| where (type !~ ('microsoft.fairfieldgardens/provisioningresources'))\r\n| where (type !~ ('microsoft.healthmodel/healthmodels'))\r\n| where (type !~ ('microsoft.hybridcompute/arcserverwithwac'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessovereign'))\r\n| where (type !~ ('microsoft.hybridcompute/machinesesu'))\r\n| where (type !~ ('microsoft.hybridcompute/machinespaygo'))\r\n| where (type !~ ('microsoft.hybridcompute/machinessoftwareassurance'))\r\n| where (type !~ ('microsoft.network/virtualhubs')) or ((kind =~ ('routeserver')))\r\n| where (type !~ ('microsoft.network/networkvirtualappliances'))\r\n| where (type !~ ('microsoft.devhub/iacprofiles'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/files'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/filerequests'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/licenses'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/connectors'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/sharedstorages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/storages'))\r\n| where (type !~ ('microsoft.modsimworkbench/workbenches/chambers/workloads'))\r\n| where (type !~ ('microsoft.insights/diagnosticsettings'))\r\n| where not((type =~ ('microsoft.network/serviceendpointpolicies')) and ((kind =~ ('internal'))))\r\n| where (type !~ ('microsoft.resources/resourcegraphvisualizer'))\r\n| where (type !~ ('microsoft.iotoperationsmq/mq'))\r\n| where (type !~ ('microsoft.orbital/cloudaccessrouters'))\r\n| where (type !~ ('microsoft.orbital/terminals'))\r\n| where (type !~ ('microsoft.orbital/sdwancontrollers'))\r\n| where (type !~ ('microsoft.orbital/geocatalogs'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/modeling'))\r\n| where (type !~ ('microsoft.recommendationsservice/accounts/serviceendpoints'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesbvtd2/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd/vaults'))\r\n| where (type !~ ('microsoft.recoveryservicesintd2/vaults'))\r\n| where (type !~ ('microsoft.resources/deletedresources'))\r\n| where (type !~ ('microsoft.deploymentmanager/rollouts'))\r\n| where (type !~ ('microsoft.features/featureprovidernamespaces/featureconfigurations'))\r\n| where (type !~ ('microsoft.saashub/cloudservices/hidden'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/customrollouts'))\r\n| where (type !~ ('microsoft.providerhub/providerregistrations/defaultrollouts'))\r\n| where (type !~ ('microsoft.edge/configurations'))\r\n| where not((type =~ ('microsoft.synapse/workspaces/sqlpools')) and ((kind =~ ('v3'))))\r\n| where (type !~ ('microsoft.mission/approvals'))\r\n| where (type !~ ('microsoft.mission/catalogs'))\r\n| where (type !~ ('microsoft.mission/communities'))\r\n| where (type !~ ('microsoft.mission/communities/communityendpoints'))\r\n| where (type !~ ('microsoft.mission/enclaveconnections'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/enclaveendpoints'))\r\n| where (type !~ ('microsoft.mission/communities/transithubs'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves'))\r\n| where (type !~ ('microsoft.mission/virtualenclaves/workloads'))\r\n| where (type !~ ('microsoft.workloads/insights'))\r\n| where (type !~ ('microsoft.hanaonazure/sapmonitors'))\r\n| where (type !~ ('microsoft.cloudhealth/healthmodels'))\r\n| where (type !~ ('microsoft.connectedcache/enterprisemcccustomers/enterprisemcccachenodes'))\r\n| where not((type =~ ('microsoft.sql/servers/databases')) and ((kind in~ ('system','v2.0,system','v12.0,system','v12.0,system,serverless','v12.0,user,datawarehouse,gen2,analytics'))))\r\n| where not((type =~ ('microsoft.sql/servers')) and ((kind =~ ('v12.0,analytics'))))\r\n| project name,sku,totalCores,coreType,status,statusIcon,resources,id,resourceGroup,subscriptionDisplayName,type,kind,location,subscriptionId,tags\r\n| sort by (tolower(tostring(name))) asc",
+ "size": 0,
+ "title": "Eligible licenses",
+ "noDataMessage": "There are no eligible licenses.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "arclicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "eligibleLicenses",
+ "comparison": "isEqualTo",
+ "value": "Yes"
+ },
+ "name": "group-eligibleLicenses"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arcAHB"
+ },
+ "name": "group-ahbArc"
+ }
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "SelectedSubTab",
+ "comparison": "isEqualTo",
+ "value": "arc"
+ },
+ "name": "Arc"
+ },
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "title": "Virtual Machines",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 12,
+ "content": {
+ "version": "NotebookGroup/1.0",
+ "groupType": "editable",
+ "loadType": "always",
+ "items": [
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) !has 'Windows' and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'\r\n| extend WindowsId=id, VMIDFull=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name), QuickFix=id\r\n ) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId, QuickFix, VMIDFull\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Disabled",
+ "noDataMessage": "All of your VMs have AHB enabled.",
+ "noDataMessageStyle": 3,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "AHB Disabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| where tostring(properties.['licenseType']) has \"Windows\"\r\n| extend WindowsId=id, VMName=name, VMLocation=location, VMRG=resourceGroup, OSType=tostring(properties.storageProfile.imageReference.offer), OsVersion = tostring(properties.storageProfile.imageReference.sku), VMSize=tostring (properties.hardwareProfile.vmSize), LicenseType = tostring(properties.['licenseType']), VMSSize=tostring(sku.name)\r\n) on subscriptionId \r\n| order by type asc \r\n| project WindowsId,VMName,VMRG,VMSize, VMSSize, VMLocation,OSType, OsVersion,LicenseType, subscriptionId\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId",
+ "size": 0,
+ "title": "AHB Enabled",
+ "noDataMessage": "None of your VMs have AHB enabled.",
+ "noDataMessageStyle": 4,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "gridSettings": {
+ "formatters": [
+ {
+ "columnMatch": "VMRG",
+ "formatter": 0,
+ "tooltipFormat": {
+ "tooltip": "test"
+ }
+ },
+ {
+ "columnMatch": "subscriptionId",
+ "formatter": 15,
+ "formatOptions": {
+ "linkTarget": null,
+ "showIcon": true
+ }
+ }
+ ]
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "WindowsAHBEnabled"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "resourcechanges\r\n| where properties.changeType == \"Update\" and properties.targetResourceType == \"microsoft.compute/virtualmachines\"\r\n| mv-expand changes = properties.changes\r\n| mv-expand LicenseChanges=changes.['properties.licenseType']\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| where isnotnull(LicenseChanges)\r\n| where tostring(LicenseChanges.newValue) has \"Windows\"\r\n| project VMID=properties.targetResourceId, NewLicense=tostring(LicenseChanges.newValue), DateofChange=todatetime(properties.changeAttributes.timestamp)\r\n",
+ "size": 0,
+ "title": "VM Latest Change Last 7 days",
+ "noDataMessage": "AHB was not enabled in the last 7 days.",
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ]
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "VM Latest Change Last 7 days"
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "{\"version\":\"ARMEndpoint/1.0\",\"data\":null,\"headers\":[],\"method\":\"GET\",\"path\":\"/subscriptions/{SingleSubHidden}/providers/Microsoft.Compute/skus?$filter=location eq '{Location}'\",\"urlParams\":[{\"key\":\"api-version\",\"value\":\"2021-07-01\"}],\"batchDisabled\":false,\"transformers\":[{\"type\":\"jsonpath\",\"settings\":{\"tablePath\":\"$.*[?(@.resourceType=='virtualMachines')]\",\"columns\":[{\"path\":\"name\",\"columnid\":\"Name\"},{\"path\":\"capabilities[?(@.name=='vCPUs')].value\",\"columnid\":\"vCPUs\"},{\"path\":\"capabilities[?(@.name=='MemoryGB')].value\",\"columnid\":\"MemoryGB\"},{\"path\":\"capabilities[?(@.name=='MaxNetworkInterfaces')].value\",\"columnid\":\"MaxNetworkInterfaces\"},{\"path\":\"capabilities[?(@.name=='HyperVGenerations')].value\",\"columnid\":\"HyperVGenerations\"},{\"path\":\"capabilities[?(@.name=='vCPUsPerCore')].value\",\"columnid\":\"vCPUsPerCore\"}]}}]}",
+ "size": 0,
+ "title": "Get VM vCPU",
+ "exportParameterName": "ResourceSKU",
+ "showExportToExcel": true,
+ "queryType": 12,
+ "gridSettings": {
+ "rowLimit": 5000
+ }
+ },
+ "conditionalVisibility": {
+ "parameterName": "AlwaysHidden",
+ "comparison": "isEqualTo",
+ "value": "true"
+ },
+ "name": "query - Get VM vCPU"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "## Windows Azure Hybrid Benefit (AHB) Overview"
+ },
+ "name": "AHB Overview"
+ },
+ {
+ "type": 1,
+ "content": {
+ "json": "Each two-processor license or each set of 16-core licenses, either Datacenter or Standard editions, are entitled to two instances of up to 8 cores, or one instance of up to 16 cores.\r\n\r\nThe virtual machines (VMs) with less than 8 cores are categorized as **Low Priority**, while those with 8 or more cores are classified as **High Priority**. In situations where there are insufficient Azure Hybrid benefit licenses to cover all the VMs in the environment, it is recommended to prioritize the High Priority VMs.",
+ "style": "info"
+ },
+ "name": "NUmber of Processors",
+ "styleSettings": {
+ "margin": "10px",
+ "showBorder": true
+ }
+ },
+ {
+ "type": 3,
+ "content": {
+ "version": "KqlItem/1.0",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by SubscriptionName, CheckAHBWindows\r\n",
+ "size": 0,
+ "title": "Summary of Windows VMs with or without AHB per Subscription",
+ "showRefreshButton": true,
+ "showExportToExcel": true,
+ "queryType": 1,
+ "resourceType": "microsoft.resourcegraph/resources",
+ "crossComponentResources": [
+ "{Subscription}"
+ ],
+ "visualization": "table",
+ "gridSettings": {
+ "sortBy": [
+ {
+ "itemKey": "SubscriptionName",
+ "sortOrder": 1
+ }
+ ],
+ "labelSettings": [
+ {
+ "columnId": "SubscriptionName",
+ "label": "Subscription Name"
+ },
+ {
+ "columnId": "CheckAHBWindows",
+ "label": "Is AHB enabled?"
+ },
+ {
+ "columnId": "count_",
+ "label": "Number of resources"
+ }
+ ]
},
"sortBy": [
{
@@ -6830,7 +7911,7 @@
"type": 3,
"content": {
"version": "KqlItem/1.0",
- "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where type =~ 'microsoft.compute/virtualmachines'\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
+ "query": "ResourceContainers | where type =~ 'Microsoft.Resources/subscriptions' | where tostring (properties.subscriptionPolicies.quotaId) !has \"MSDNDevTest_2014-09-01\" | extend SubscriptionName=name \r\n| join (\r\nresources \r\n| where resourceGroup in ({ResourceGroup})\r\n| where tostring(properties.storageProfile.imageReference.publisher ) == \"MicrosoftWindowsServer\" or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows' or tostring(properties.storageProfile.imageReference.publisher ) == \"microsoftsqlserver\"\r\n| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'\r\n| extend OS=properties.storageProfile.imageReference.id \r\n| where isnull(OS)\r\n| extend WindowsId=id\r\n| join kind = innerunique(\r\n resources\r\n | extend replaced_tags = replace('{}', 'null', tostring(tags))\r\n | extend replaced_tags = parse_json(replaced_tags)\r\n | mv-expand replaced_tags\r\n | extend tagName = tostring(bag_keys(replaced_tags)[0])\r\n | extend tagValue = tostring(replaced_tags['{TagName}']), WindowsId=id\r\n | where tagName has '{TagName}' and tagValue has '{TagValue}'\r\n | distinct WindowsId\r\n )\r\n on WindowsId\r\n| extend LicenseType = tostring(properties.['licenseType'])\r\n| extend CheckAHBWindows = case(\r\n type == 'microsoft.compute/virtualmachines' or type =~ 'microsoft.compute/virtualMachineScaleSets', iif((properties.['licenseType'])\r\n !has 'Windows' and (properties.virtualMachineProfile.['licenseType']) !has 'Windows' , \"AHB Not Enabled\", \"AHB Enabled\"),\r\n \"Not Windows\"\r\n )\r\n) on subscriptionId \r\n| summarize count() by CheckAHBWindows",
"size": 0,
"title": "Summary of Windows VMs with or without AHB",
"showRefreshButton": true,
@@ -7035,8 +8116,7 @@
"jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
"timeContext": {
"durationMs": 86400000
- },
- "value": "Yes"
+ }
},
{
"id": "f1ac5e53-253c-4afb-8bc5-b1ba2efea3eb",
@@ -7049,8 +8129,7 @@
"additionalResourceOptions": [],
"showDefault": false
},
- "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n",
- "value": "Yes"
+ "jsonData": "[\r\n {\"value\":\"Yes\"},\r\n {\"value\":\"No\", \"selected\":true}\r\n]\r\n\r\n"
},
{
"id": "20a00706-a89b-42aa-8dea-9c44c93e8014",
@@ -11385,7 +12464,7 @@
"workbookJson": "[string(variables('$fxv#0'))]",
"workbookId": "0b2",
"telemetryId": "[format('00f120b5-2007-6120-0000-{0}30126b006', variables('workbookId'))]",
- "finOpsToolkitVersion": "0.7",
+ "finOpsToolkitVersion": "0.8",
"resourceTags": "[if(contains(parameters('tags'), 'ftk-tool'), parameters('tags'), union(parameters('tags'), createObject('ftk-version', variables('finOpsToolkitVersion'), 'ftk-tool', format('{0} workbook', parameters('displayName')))))]"
},
"resources": [
diff --git a/package-lock.json b/package-lock.json
index 5b4abe23a..68f010699 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ftk",
- "version": "0.8.0-dev",
+ "version": "0.8.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "ftk",
- "version": "0.8.0-dev",
+ "version": "0.8.0",
"license": "MIT",
"devDependencies": {
"all-contributors-cli": "^6.26.1"
diff --git a/package.json b/package.json
index fb1312cbe..d33825063 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ftk",
- "version": "0.8.0-dev",
+ "version": "0.8.0",
"description": "Starter kits, scripts, and advanced solutions to accelerate your FinOps journey in the Microsoft Cloud.",
"main": "index.js",
"directories": {
diff --git a/src/optimization-engine/ftkver.txt b/src/optimization-engine/ftkver.txt
index 12f2e5f06..ce609caf8 100644
--- a/src/optimization-engine/ftkver.txt
+++ b/src/optimization-engine/ftkver.txt
@@ -1 +1 @@
-0.8-dev
\ No newline at end of file
+0.8
\ No newline at end of file
diff --git a/src/power-bi/kql/CostSummary.Report/report.json b/src/power-bi/kql/CostSummary.Report/report.json
index 6b3a8aba0..a309680f2 100644
--- a/src/power-bi/kql/CostSummary.Report/report.json
+++ b/src/power-bi/kql/CostSummary.Report/report.json
@@ -116,3998 +116,3998 @@
"displayName": "Tags example",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "6244831b8b6043fa9620",
"ordinal": 12,
"visualContainers": [
{
"config": "{\"name\":\"0aa33012c01022b591c3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.CostSummary/featureName/TagsExample'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0dd39acf28907ee960c9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Tags example\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"This page uses a custom list of promoted tags. Edit the CostDetails query to customize tag columns.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"101cc345b514cc6b04e9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"141441c65beb663cabc0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":0,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
+ "x": 216.0,
"y": 7.52,
- "z": 0.00
+ "z": 0.0
},
{
"config": "{\"name\":\"2083e51b4ab2097b0a07\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3069360d76ee1216c4e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"34cbd89224248c01b86e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5655c6fa452921c62967\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"604712e3decc046d78a7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"6e42d84adb934512a9e5\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"66ba501fb01d48129eb6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6e42d84adb934512a9e5\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"675c0c9285eaa9c1c39d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"6828500d6753b18757bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":8,\"z\":3000,\"width\":280,\"height\":376,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"pieChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.tag_CostCenter\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_CostCenter\"},\"Name\":\"CostDetails.tag_CostCenter\",\"NativeReferenceName\":\"tag_CostCenter\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'BottomCenter'\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 376.00,
- "width": 280.00,
- "x": 696.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 376.0,
+ "width": 280.0,
+ "x": 696.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"6e42d84adb934512a9e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"74a6b5c70e3200d88958\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":6000,\"width\":472.00000000000006,\"height\":320,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"azureMap\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.RegionName\",\"active\":true}],\"Series\":[{\"queryRef\":\"CostDetails.tag_CostCenter\"}],\"Size\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionName\"},\"Name\":\"CostDetails.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_CostCenter\"},\"Name\":\"CostDetails.tag_CostCenter\",\"NativeReferenceName\":\"First tag_CostCenter\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"mapControls\":[{\"properties\":{\"defaultStyle\":{\"expr\":{\"Literal\":{\"Value\":\"'road'\"}}},\"showStylePicker\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showNavigationControls\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showSelectionControl\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"bubbleLayer\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"bubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}},\"minBubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}},\"maxRadius\":{\"expr\":{\"Literal\":{\"Value\":\"21L\"}}},\"bubbleStrokeWidth\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"autoStrokeColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"layerPosition\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 472.00,
- "x": 216.00,
- "y": 392.00,
- "z": 6000.00
+ "height": 320.0,
+ "width": 472.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"764de0a150c30bee9d95\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"79bffa05636ae0c0cc5c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6e42d84adb934512a9e5\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"79d34d869ebc5b85878a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"8123c6d020d9612bb0ab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"8318cb60a6c80712ae80\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"881df9f7bc6a16eb2ce8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"9a51bcd76059cc069e7e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":472.00000000000006,\"height\":376,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.tag_CostCenter\",\"active\":true},{\"queryRef\":\"CostDetails.tag_Project\",\"active\":true},{\"queryRef\":\"CostDetails.tag_Department\"}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"},{\"queryRef\":\"Divide(Sum(CostDetails.EffectiveCost), ScopedEval(Sum(CostDetails.EffectiveCost), [Role.Columns]))\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"},{\"queryRef\":\"SparklineData(Sum(CostDetails.EffectiveCost)_[CostDetails.ChargePeriodStart])\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_CostCenter\"},\"Name\":\"CostDetails.tag_CostCenter\",\"NativeReferenceName\":\"tag_CostCenter\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_Project\"},\"Name\":\"CostDetails.tag_Project\",\"NativeReferenceName\":\"tag_Project\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_Department\"},\"Name\":\"CostDetails.tag_Department\",\"NativeReferenceName\":\"tag_Department\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"Scope\":[{\"RoleRef\":{\"Role\":\"Columns\"}}]}},\"Operator\":3},\"Name\":\"Divide(Sum(CostDetails.EffectiveCost), ScopedEval(Sum(CostDetails.EffectiveCost), [Role.Columns]))\",\"NativeReferenceName\":\"Percent\"},{\"SparklineData\":{\"Measure\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}},\"Groupings\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}]},\"Name\":\"SparklineData(Sum(CostDetails.EffectiveCost)_[CostDetails.ChargePeriodStart])\",\"NativeReferenceName\":\"EffectiveCost by ChargePeriodStart\"}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"CostDetails.tag_CostCenter\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"tag_CostCenter\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.tag_Project\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.tag_Department\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'SubACM'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"'ACM-PM'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"'1234'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"null\"}}],\"isToggled\":true}]}}],\"columnProperties\":{\"Divide(Sum(CostDetails.EffectiveCost), ScopedEval(Sum(CostDetails.EffectiveCost), [Role.Columns]))\":{\"displayName\":\"Percent\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"117.38805142969727D\"}}}},\"selector\":{\"metadata\":\"SparklineData(Sum(CostDetails.EffectiveCost)_[CostDetails.ChargePeriodStart])\"}}]}}}",
"filters": "[]",
- "height": 376.00,
- "width": 472.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 376.0,
+ "width": 472.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"9d2b2b61ea4069e38e01\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"a005b8bdd44bed5b100c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":983.9999999999999,\"y\":8,\"z\":2000,\"width\":280,\"height\":376,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"CostDetails.tag_CostCenter\",\"active\":true}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Details\":[{\"queryRef\":\"CostDetails.tag_Project\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_CostCenter\"},\"Name\":\"CostDetails.tag_CostCenter\",\"NativeReferenceName\":\"tag_CostCenter\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_Project\"},\"Name\":\"CostDetails.tag_Project\",\"NativeReferenceName\":\"tag_Project\"}]},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 376.00,
- "width": 280.00,
- "x": 984.00,
- "y": 8.00,
- "z": 2000.00
+ "height": 376.0,
+ "width": 280.0,
+ "x": 984.0,
+ "y": 8.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"a15ba83a70c3eceb5283\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"a72ce15ba61517603d04\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6e42d84adb934512a9e5\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b08ac750552114c2c103\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#tags-example'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"b34467eb70c3bd7907e8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c1af4a4887682d4ce818\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":392,\"z\":5000,\"width\":568,\"height\":320,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.tag_CostCenter\"}],\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"tag_CostCenter\"},\"Name\":\"CostDetails.tag_CostCenter\",\"NativeReferenceName\":\"tag_CostCenter\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 568.00,
- "x": 696.00,
- "y": 392.00,
- "z": 5000.00
+ "height": 320.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 392.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"cab2cd2c22035b55643c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6e42d84adb934512a9e5\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"cbfacc7d7698cee6883e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"cef91d832809cc11e001\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"d4b1f49a38ad9d50e0d6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"d7ffb0a546c8532199b5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e3e091619eee36b0d0da\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"f22c62fee7980ab87d04\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"8123c6d020d9612bb0ab\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"f7968b9b282d7b88b49d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"fb054820616d3e418425\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"141441c65beb663cabc0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Subscriptions",
"displayOption": 1,
"filters": "[{\"name\":\"03de859739f61a767fea\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountId\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountId\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection0f19b4db8a9820050c88",
"ordinal": 4,
"visualContainers": [
{
"config": "{\"name\":\"0a50134d2676f5632af3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3bb8ab2f398d21d99e52\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"1447309226e059d8c349\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"1d758eab6f1c2265e916\",\"layouts\":[{\"id\":0,\"position\":{\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"width\":88,\"height\":704,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"1f6117aa419c82063d07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.x_ReportingDate\",\"active\":true}],\"Series\":[{\"queryRef\":\"CostDetails.SubAccountNameUnique\"}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountNameUnique\"},\"Name\":\"CostDetails.SubAccountNameUnique\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"CostDetails.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"CostDetails.SubAccountNameUnique\":{\"displayName\":\"Subscription\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"21830c7ef837178e6466\",\"layouts\":[{\"id\":0,\"position\":{\"x\":960.0876708841058,\"y\":0,\"z\":0,\"width\":88,\"height\":704,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"3a46ebebfaab1baf2ac7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":5500,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#subscriptions'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 5500.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 5500.0
},
{
"config": "{\"name\":\"3a74aff269fd6973e21c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"width\":1048,\"height\":88,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"3bb8ab2f398d21d99e52\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"47af921ab20c92983753\",\"layouts\":[{\"id\":0,\"position\":{\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"width\":88,\"height\":704,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"4ba115d6c471c44589e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"},{\"queryRef\":\"CostDetails.ResourceName\"}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Columns\":[{\"queryRef\":\"CostDetails.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource Group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\",\"NativeReferenceName\":\"Resource\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"CostDetails.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ResourceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Cost Management Research'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'ahbtest'\"}}],\"isToggled\":true}]}]}}],\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource Group\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"},\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ChargeMonth\":{\"displayName\":\"Month\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"rowHeaders\":[{\"properties\":{}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"580d75c6042afa18b7ff\",\"layouts\":[{\"id\":0,\"position\":{\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"width\":88,\"height\":704,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"5fb30d515f8d755e2b25\",\"layouts\":[{\"id\":0,\"position\":{\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"width\":88,\"height\":704,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"616bd33994674a74cf77\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":17000,\"width\":1048,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"6389a314bf8e0d81ba46\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"3bb8ab2f398d21d99e52\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"70b5310836bdbdf9d11a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Subscriptions'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"75eddab3c2e055068078\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":96,\"z\":16000,\"width\":1048,\"height\":88,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"7610025db6d284249b08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"width\":88,\"height\":704,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"77a21b5f9d8dc5fa65f8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Subscriptions\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Break down your cost by subscription to facilitate chargeback.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"7e79272e37b7a1045d1c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3bb8ab2f398d21d99e52\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"7f2b541cef8cdc039348\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3bb8ab2f398d21d99e52\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"809c6719f0731d277356\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":15000,\"width\":1048,\"height\":88,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"8254cdf05124268541d3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"8ba63ca38828b8763eea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"946038d2e65ab309d867\",\"layouts\":[{\"id\":0,\"position\":{\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"width\":88,\"height\":704,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"accf9fb7357da069d605\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"bd42a687103bfac57870\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":576,\"z\":11000,\"width\":1048,\"height\":88,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"c143628ac0e24cc34543\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"width\":1048,\"height\":88,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"c4391abf678047e46e5f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"cbf8961b431cb723f1c1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":96,\"y\":0,\"z\":9000,\"width\":88,\"height\":704,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"df079e34bbf080b40e0c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216,\"y\":8,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
- "y": 8.00,
- "z": 1000.00
+ "x": 216.0,
+ "y": 8.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"eab15083ff7600063df6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":14000,\"width\":1048,\"height\":88,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"ee8a7bfb5fda2195638d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":10000,\"width\":88,\"height\":704,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"f30a39be5f952c21d59b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3bb8ab2f398d21d99e52\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"f36ac34badbb2012ef22\",\"layouts\":[{\"id\":0,\"position\":{\"x\":192,\"y\":0,\"z\":8000,\"width\":88,\"height\":704,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"f82a052d18454ba62984\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"accf9fb7357da069d605\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"fb1577b7515049679ca2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"fe0265d9a128edb36912\",\"layouts\":[{\"id\":0,\"position\":{\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"width\":88,\"height\":704,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"df079e34bbf080b40e0c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{\"objects\":{\"outspacePane\":[{\"properties\":{\"width\":{\"expr\":{\"Literal\":{\"Value\":\"204L\"}}}}}]}}",
"displayName": "Regions",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection186ada557ce8442407cd",
"ordinal": 7,
"visualContainers": [
{
"config": "{\"name\":\"0e1ef3c8a884e2624f74\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#regions'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"10795441505bc4e2e8b6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Regions\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review usage across regions.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"25487b2e6418748a2478\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2d415b2faad840429d5f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
+ "x": 216.0,
"y": 7.52,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"2d9de45197717775f880\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"3c45c00a7f89db243975\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"acbc4a9b989598f3e99e\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"3c7bd62496c8de34cad5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"405ddec1b966eeb20b27\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":3000,\"width\":472.00000000000006,\"height\":704,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"azureMap\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.RegionName\",\"active\":true}],\"Size\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionName\"},\"Name\":\"CostDetails.RegionName\",\"NativeReferenceName\":\"Region\"}]},\"columnProperties\":{\"CostDetails.RegionName\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"mapControls\":[{\"properties\":{\"defaultStyle\":{\"expr\":{\"Literal\":{\"Value\":\"'road'\"}}},\"showStylePicker\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showNavigationControls\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showSelectionControl\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"bubbleLayer\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"bubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}},\"minBubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}},\"maxRadius\":{\"expr\":{\"Literal\":{\"Value\":\"21L\"}}},\"bubbleStrokeWidth\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"autoStrokeColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"layerPosition\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Map'\"}}}}}]}}}",
"filters": "[]",
- "height": 704.00,
- "width": 472.00,
- "x": 792.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 704.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"472f3d8c40abdc72acf7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"609d3fa5c6b800b4715a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"73548d644550e42dd8c2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"8301118931dae3c18edf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"acbc4a9b989598f3e99e\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"8ae9f75a138566998577\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"951fe907566874f3be43\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"973038330087631c28c0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"98aa5f6129a355b36d0c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"98cd745ed082a94cf649\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"9a5ac0af4f6e8d3f5a84\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"9f45a41bf00e2dff2e79\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"a2ec63b58afcbe8f87ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"a4cb7f11fdfc9be2efb3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"acbc4a9b989598f3e99e\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"ab9dabe1f2870d92a7e8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"acbc4a9b989598f3e99e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"b4a216893b97b366a655\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"acbc4a9b989598f3e99e\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b9fb53d9fe7381c6a007\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Regions'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"bb7594b8216a1004428f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"c27bd04bda0e1422e067\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c868266634e9ea3122d7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"c90f43ad618c3332cdde\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"c90f43ad618c3332cdde\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ce6747f829786ba0c3c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"d0e854a6e405014192e6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":4000,\"width\":568,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.RegionName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionName\"},\"Name\":\"CostDetails.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"CostDetails.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.RegionName\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 568.00,
- "x": 216.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"d2c2d00be8d3f0acffad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"d68bed5034799d04c9e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":568,\"height\":320,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.RegionName\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"},{\"queryRef\":\"CostDetails.ResourceName\"}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Columns\":[{\"queryRef\":\"CostDetails.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionName\"},\"Name\":\"CostDetails.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"CostDetails.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\",\"NativeReferenceName\":\"Resource\"}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"CostDetails.RegionName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ResourceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"},\"CostDetails.RegionName\":{\"displayName\":\"Region\"},\"CostDetails.x_ChargeMonth\":{\"displayName\":\"Month\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 568.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e2f68e968448dd1e4d8d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"acbc4a9b989598f3e99e\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"e5b721ca9883fe518801\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e6118d6adf59fb832e20\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"e88feb3e6bf407d0532c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"f2de4f3d31f0fb82edf9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"2d415b2faad840429d5f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Purchases",
"displayOption": 1,
"filters": "[{\"name\":\"Filter419536217304ab765166\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Purchase'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection1cf2d1f5b35f16310482",
"ordinal": 9,
"visualContainers": [
{
"config": "{\"name\":\"01aabac56e33dca78bb4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"0f4676337006ccc438d8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"42664394c5dc4dd008d6\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"1752b0efb24ece0477b2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"20943dab7b20eca25a3b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"2bc0aae755b0c239d93a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"2bc23137093aeb3cb19d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"35454dc725ff0f29efb6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3bba199882fc10cd39cf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"3fe728bad83abc1f8b3d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"42664394c5dc4dd008d6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"509a017f9ae935550b83\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"50f054559c7175e7717c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"6362d0fe8858b13ea67e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"65dc04c6001fd0b5b189\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"6c84ba9f4e1a6a57e238\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"7272d0bb850c6684baf0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"7719d7435baeefe4bb67\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Purchases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"7781dd961ce99aeb0a3b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#purchases'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"7a01f294ba749fd36651\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":3250,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\"},{\"queryRef\":\"CostDetails.PublisherName\"},{\"queryRef\":\"CostDetails.x_SkuDescription\"},{\"queryRef\":\"CostDetails.CommitmentDiscountType\"},{\"queryRef\":\"CostDetails.ChargeFrequency\"},{\"queryRef\":\"CostDetails.ChargeClass\"},{\"queryRef\":\"Sum(CostDetails.PricingQuantity)\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"Billed cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PublisherName\"},\"Name\":\"CostDetails.PublisherName\",\"NativeReferenceName\":\"Publisher\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"CostDetails.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeClass\"},\"Name\":\"CostDetails.ChargeClass\",\"NativeReferenceName\":\"ChargeClass\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.PricingQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeFrequency\"},\"Name\":\"CostDetails.ChargeFrequency\",\"NativeReferenceName\":\"Frequency\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"Date\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment type\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Sum(CostDetails.BilledCost)\":{\"displayName\":\"Billed cost\"},\"CostDetails.PublisherName\":{\"displayName\":\"Publisher\"},\"CostDetails.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(CostDetails.PricingQuantity)\":{\"displayName\":\"Quantity\"},\"CostDetails.ChargeFrequency\":{\"displayName\":\"Frequency\"},\"CostDetails.ChargePeriodStart\":{\"displayName\":\"Date\"},\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Commitment type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"grid\":[{\"properties\":{\"gridHorizontal\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"100.01519756838906D\"}}}},\"selector\":{\"metadata\":\"CostDetails.PublisherName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"407.47841221272733D\"}}}},\"selector\":{\"metadata\":\"CostDetails.x_SkuDescription\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 3250.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 3250.0
},
{
"config": "{\"name\":\"84a97e1134531d6a0f78\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"42664394c5dc4dd008d6\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"86ca6cd0f53c17cb2cdf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8db56d4b8f03664bd1d4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"9ede966aad97636ebc4f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.83810176118737,\"y\":8.087324571173982,\"z\":3000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 216.84,
"y": 8.09,
- "z": 3000.00
+ "z": 3000.0
},
{
"config": "{\"name\":\"beb36bac298e07156bb1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"cd830d431797c6354e4f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"42664394c5dc4dd008d6\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"d0c31d3a107ba942c0e4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3500,\"width\":1048,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.BilledCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.x_SkuDescription\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"Billed cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"CostDetails.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"Sum(CostDetails.BilledCost)\":{\"displayName\":\"Billed cost\"},\"CostDetails.x_SkuDescription\":{\"displayName\":\"SKU\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3500.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3500.0
},
{
"config": "{\"name\":\"dab9e6edd92820f6d750\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"dac6c87d6b9202e376fe\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"dbef7ac4a9198f5ed431\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"dcf2335a2219e18798b4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"42664394c5dc4dd008d6\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"dd4f55ead0f8bc051f1d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2026}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Billed cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"df9b3064993f175b6c03\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"edbc124cb019e50a239d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"9ede966aad97636ebc4f\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"f8e6f115b4a3321448c4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Purchases\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review and track your one-time and recurring purchases.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"50f054559c7175e7717c\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"fe1608a6bd96aa0df618\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"42664394c5dc4dd008d6\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Prices",
"displayOption": 1,
"filters": "[{\"name\":\"e06e2d6b17d51fc13fca\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"b7e5c5da5b27fee6d1e4\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unused'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection27adbc5b658c5d02bd16",
"ordinal": 10,
"visualContainers": [
{
"config": "{\"name\":\"0491515d7f3d7859d742\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"04d5103eb74f944f0696\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"9b25242fcec3ba17d48b\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"08c9e2e10c17d72326e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":983.9999999999999,\"y\":104,\"z\":2000,\"width\":280,\"height\":608,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"clusteredBarChart\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(CostDetails.ConsumedQuantity)\"}],\"Category\":[{\"queryRef\":\"CostDetails.x_SkuMeterName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterName\"},\"Name\":\"CostDetails.x_SkuMeterName\",\"NativeReferenceName\":\"x_SkuMeterName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ConsumedQuantity)\",\"NativeReferenceName\":\"ConsumedQuantity\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Most used'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 608.00,
- "width": 280.00,
- "x": 984.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 608.0,
+ "width": 280.0,
+ "x": 984.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0e53b8fa09696548483d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"9b25242fcec3ba17d48b\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"115e0f275cffe483d2bf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"1ea94a43ff6c45a2d632\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"26c06d1474c95589b5c2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
+ "x": 216.0,
"y": 7.52,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"3975408ce2ba7a1d55ba\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Prices\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review the prices of services used and purchased across your account.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"4199f41e0248c5cc4e66\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"46f7ea66e1536575cb95\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"5193da836872cbb6c037\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"57b79358c05476d7e5f3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"5bc69d7e695a458eae3f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"6f0b3362f1b1935c9c3b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"716de8a3202adcaaa59b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"75a9806e8f92c1896ba7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"9b25242fcec3ba17d48b\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7da6945c3c5745cac799\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"8141854d0e332ece37d4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"82ee16620a8d5590e9e2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":760,\"height\":608,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.x_SkuDescription\"},{\"queryRef\":\"CostDetails.CommitmentDiscountType\"},{\"queryRef\":\"CostDetails.x_SkuTermLabel\"},{\"queryRef\":\"Sum(CostDetails.ListUnitPrice)\"},{\"queryRef\":\"Sum(CostDetails.ContractedUnitPrice)\"},{\"queryRef\":\"CostDetails.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(CostDetails.ConsumedQuantity)\"},{\"queryRef\":\"CostDetails.ConsumedUnit\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"CostDetails.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"Effective\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(CostDetails.ListUnitPrice)\",\"NativeReferenceName\":\"List\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"CostDetails.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"CostDetails.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(CostDetails.ContractedUnitPrice)\",\"NativeReferenceName\":\"Contracted\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedUnit\"},\"Name\":\"CostDetails.ConsumedUnit\",\"NativeReferenceName\":\"Unit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Commitment\"},\"CostDetails.x_EffectiveUnitPrice\":{\"displayName\":\"Effective\"},\"Sum(CostDetails.ListUnitPrice)\":{\"displayName\":\"List\"},\"CostDetails.x_SkuTermLabel\":{\"displayName\":\"Term\"},\"CostDetails.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(CostDetails.ContractedUnitPrice)\":{\"displayName\":\"Contracted\"},\"Sum(CostDetails.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"CostDetails.ConsumedUnit\":{\"displayName\":\"Unit\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Cost\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"65.83913379737045D\"}}}},\"selector\":{\"metadata\":\"Sum(CostDetails.ListUnitPrice)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"208.62690723349726D\"}}}},\"selector\":{\"metadata\":\"CostDetails.x_SkuDescription\"}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 608.00,
- "width": 760.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 608.0,
+ "width": 760.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"8b1392fede3e1bea8d2b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"9b25242fcec3ba17d48b\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"8b811fde0ea89770812a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"8e513512e2f1317496ba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"9b25242fcec3ba17d48b\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"9b25242fcec3ba17d48b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"a7b496332b304518afdc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"aa76d517677fcdf81f16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Prices'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"abf679ec0642fa836286\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"b2b9ae063b0710a3bc7c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b68f7a204f262a4e075d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b69e6c9b97eaa082f1c3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c279378607ca0ed19bfa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"c8d1afb427030de57423\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"cd6a087ac8b19ccf6531\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"e0b2f54225d8fc763d79\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"ede95f9c6ac0e3f74135\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#prices'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"0491515d7f3d7859d742\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"f6db8153bc5e6580a071\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"fd339f60fc007d205e8b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"26c06d1474c95589b5c2\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{\"visibility\":1}",
"displayName": "DQ",
"displayOption": 2,
"filters": "[]",
- "height": 2720.00,
+ "height": 2720.0,
"name": "ReportSection2dfa477010097d27d2cc",
"ordinal": 11,
"visualContainers": [
{
"config": "{\"name\":\"072c21c0a28e75a621a2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":903.9437500191466,\"z\":13000,\"width\":1264,\"height\":272,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargeCategory\"},{\"queryRef\":\"CostDetails.ChargeClass\"},{\"queryRef\":\"CostDetails.PricingCategory\"},{\"queryRef\":\"CostDetails.ServiceCategory\"},{\"queryRef\":\"CostDetails.ServiceName\"},{\"queryRef\":\"CostDetails.ResourceType\"},{\"queryRef\":\"CostDetails.x_SkuMeterName\"},{\"queryRef\":\"Sum(CostDetails.ListCost)\"},{\"queryRef\":\"Sum(CostDetails.ContractedCost)\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ListCost)\",\"NativeReferenceName\":\"ListCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"CostDetails.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"},\"Name\":\"CostDetails.PricingCategory\",\"NativeReferenceName\":\"PricingCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeClass\"},\"Name\":\"CostDetails.ChargeClass\",\"NativeReferenceName\":\"ChargeClass\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterName\"},\"Name\":\"CostDetails.x_SkuMeterName\",\"NativeReferenceName\":\"x_SkuMeterName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"ServiceCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"ServiceName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceType\"},\"Name\":\"CostDetails.ResourceType\",\"NativeReferenceName\":\"ResourceType\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Missing descriptions'\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter2c7fb2402abc39e0063c\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeDescription\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeDescription\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"isHiddenInViewMode\":false}]",
- "height": 272.00,
- "width": 1264.00,
- "x": 8.00,
+ "height": 272.0,
+ "width": 1264.0,
+ "x": 8.0,
"y": 903.94,
- "z": 13000.00
+ "z": 13000.0
},
{
"config": "{\"name\":\"3504840db022b9e41e28\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":623.9437500191466,\"z\":6000,\"width\":1264,\"height\":272,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargeDescription\"},{\"queryRef\":\"Sum(CostDetails.ListCost)\"},{\"queryRef\":\"Sum(CostDetails.ContractedCost)\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeDescription\"},\"Name\":\"CostDetails.ChargeDescription\",\"NativeReferenceName\":\"ChargeDescription\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"889.3484175956339D\"}}}},\"selector\":{\"metadata\":\"CostDetails.ChargeDescription\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Most used descriptions'\"}}}}}]}}}",
"filters": "[]",
- "height": 272.00,
- "width": 1264.00,
- "x": 8.00,
+ "height": 272.0,
+ "width": 1264.0,
+ "x": 8.0,
"y": 623.94,
- "z": 6000.00
+ "z": 6000.0
},
{
"config": "{\"name\":\"36994d417075d4129ca0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":287.1637480168865,\"z\":1000,\"width\":256,\"height\":152,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.PricingCategory\",\"active\":true},{\"queryRef\":\"CostDetails.x_PricingSubcategory\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountCategory\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"},\"Name\":\"CostDetails.PricingCategory\",\"NativeReferenceName\":\"PricingCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingSubcategory\"},\"Name\":\"CostDetails.x_PricingSubcategory\",\"NativeReferenceName\":\"x_PricingSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountCategory\"},\"Name\":\"CostDetails.CommitmentDiscountCategory\",\"NativeReferenceName\":\"CommitmentDiscountCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"CommitmentDiscountType\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.PricingCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_PricingSubcategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'On-Demand'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Standard'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"null\"}}],\"isToggled\":true}]}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Commitment Discount'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Committed Usage'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Usage'\"}}],\"isToggled\":true}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Committed Spend'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Spend'\"}}],\"isToggled\":true}]}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"null\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"null\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"null\"}}],\"isToggled\":true}]}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Standard'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Standard'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Usage'\"}}],\"isToggled\":true}]}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Committed'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Committed Spend'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Spend'\"}}],\"isToggled\":true}]}]}]}}],\"columnProperties\":{\"CostDetails.ResourceName\":{},\"Sum(FOCUS.AmortizedCost)\":{},\"Sum(FOCUS.BilledCost)\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{}}],\"header\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Pricing'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 152.00,
- "width": 256.00,
- "x": 0.00,
+ "height": 152.0,
+ "width": 256.0,
+ "x": 0.0,
"y": 287.16,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"4dfe0630a84706444045\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":175.16374801688642,\"z\":0,\"width\":256,\"height\":112,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargeCategory\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"CostDetails.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ChargeCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}}],\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Usage'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Purchase'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Adjustment'\"}}],\"isToggled\":true}]}}],\"columnProperties\":{\"CostDetails.ResourceName\":{},\"Sum(FOCUS.AmortizedCost)\":{},\"Sum(FOCUS.BilledCost)\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{}}],\"header\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charges'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 112.00,
- "width": 256.00,
- "x": 0.00,
+ "height": 112.0,
+ "width": 256.0,
+ "x": 0.0,
"y": 175.16,
- "z": 0.00
+ "z": 0.0
},
{
"config": "{\"name\":\"554139a804906702de75\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":439.1637480168864,\"z\":8000,\"width\":256,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountStatus\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"CostDetails.CommitmentDiscountStatus\",\"NativeReferenceName\":\"CommitmentDiscountStatus\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountStatus\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ResourceName\":{},\"Sum(FOCUS.AmortizedCost)\":{},\"Sum(FOCUS.BilledCost)\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{}}],\"header\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount status'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 256.00,
- "x": 0.00,
+ "height": 88.0,
+ "width": 256.0,
+ "x": 0.0,
"y": 439.16,
- "z": 8000.00
+ "z": 8000.0
},
{
"config": "{\"name\":\"6eb9ebc5ae01b9000216\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":535.9437500191466,\"z\":12000,\"width\":1280,\"height\":80,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Charge descriptions\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Summarizes charge descriptions used across all charges to identify gaps. If you have any feedback, \"},{\"value\":\"please \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"create an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/idea\"},{\"value\":\" so we can address it in a future release.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]}]}}]},\"vcObjects\":{\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}}}}]}}}",
"filters": "[]",
- "height": 80.00,
- "width": 1280.00,
- "x": 0.00,
+ "height": 80.0,
+ "width": 1280.0,
+ "x": 0.0,
"y": 535.94,
- "z": 12000.00
+ "z": 12000.0
},
{
"config": "{\"name\":\"84039deb2d05c120e69e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":1191.9437500191466,\"z\":11000,\"width\":1280,\"height\":80,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Missing rounding errors\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"We are investigating in issue where rounding errors are not being included in the data. We do not yet know what is causing it but this table shows when rounding errors have been reported.\"}]}]}}]},\"vcObjects\":{\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FFAAAA'\"}}}}}}}]}}}",
"filters": "[]",
- "height": 80.00,
- "width": 1280.00,
- "x": 0.00,
+ "height": 80.0,
+ "width": 1280.0,
+ "x": 0.0,
"y": 1191.94,
- "z": 11000.00
+ "z": 11000.0
},
{
"config": "{\"name\":\"8524521f0453a0dd03ce\",\"layouts\":[{\"id\":0,\"position\":{\"x\":16,\"y\":1287.9437500191466,\"z\":9000,\"width\":360,\"height\":200,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingPeriodStart\"},{\"queryRef\":\"CostDetails.ChargePeriod\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingPeriodStart\"},\"Name\":\"CostDetails.BillingPeriodStart\",\"NativeReferenceName\":\"BillingPeriodStart\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriod\"},\"Name\":\"CostDetails.ChargePeriod\",\"NativeReferenceName\":\"ChargePeriod\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingPeriodStart\"}}}]},\"drillFilterOtherVisuals\":true}}",
"filters": "[]",
- "height": 200.00,
- "width": 360.00,
- "x": 16.00,
+ "height": 200.0,
+ "width": 360.0,
+ "x": 16.0,
"y": 1287.94,
- "z": 9000.00
+ "z": 9000.0
},
{
"config": "{\"name\":\"85f3b8e47e600d4b009a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":4000,\"width\":1280,\"height\":48,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#0078D4'\"}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Data quality'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"15L\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"14D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI'', wf_segoe-ui_normal, helvetica, arial, sans-serif'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"radius\":{\"expr\":{\"Literal\":{\"Value\":\"30D\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 48.00,
- "width": 1280.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 48.0,
+ "width": 1280.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"8a30286565ca7a01650d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":768,\"y\":175.16374801688642,\"z\":2000,\"width\":256,\"height\":352,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.RegionName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionName\"},\"Name\":\"CostDetails.RegionName\",\"NativeReferenceName\":\"RegionName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.RegionName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ResourceName\":{},\"Sum(FOCUS.AmortizedCost)\":{},\"Sum(FOCUS.BilledCost)\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 352.00,
- "width": 256.00,
- "x": 768.00,
+ "height": 352.0,
+ "width": 256.0,
+ "x": 768.0,
"y": 175.16,
- "z": 2000.00
+ "z": 2000.0
},
{
"config": "{\"name\":\"929b11e50b6edd333abb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":256,\"y\":175.16374801688642,\"z\":3000,\"width\":256,\"height\":352,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"ServiceCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"ServiceName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}}],\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'AI and Machine Learning'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Azure Machine Learning'\"}}],\"isToggled\":true}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Analytics'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Azure Synapse Analytics'\"}}],\"isToggled\":true},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Microsoft Fabric'\"}}],\"isToggled\":true}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Compute'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}],\"isToggled\":true}]},{\"identityValues\":[{\"Literal\":{\"Value\":\"'Other'\"}}],\"isToggled\":true}]}}],\"columnProperties\":{\"CostDetails.ResourceName\":{},\"Sum(FOCUS.AmortizedCost)\":{},\"Sum(FOCUS.BilledCost)\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{}}],\"header\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Services'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 352.00,
- "width": 256.00,
- "x": 256.00,
+ "height": 352.0,
+ "width": 256.0,
+ "x": 256.0,
"y": 175.16,
- "z": 3000.00
+ "z": 3000.0
},
{
"config": "{\"name\":\"a2471f6e8787e490185d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":48,\"z\":10000,\"width\":1280,\"height\":112,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Normalization validation\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"The following columns are modified as part of the FOCUS transforms from native actual/amortized schemas and can be used to identify if there are any unexpected values. If you notice anything that does not look correct, like a ServiceName that is incorrect or a ServiceCategory that is \\\"Other\\\", please \"},{\"value\":\"create an issue in GitHub\",\"textStyle\":{},\"url\":\"https://aka.ms/ftk/idea\"},{\"value\":\". If you need this to be resolved immediately, please file a support request on Cost Management.\"}]}]}}]},\"vcObjects\":{\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}}}}]}}}",
"filters": "[]",
- "height": 112.00,
- "width": 1280.00,
- "x": 0.00,
- "y": 48.00,
- "z": 10000.00
+ "height": 112.0,
+ "width": 1280.0,
+ "x": 0.0,
+ "y": 48.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"b63247217b5ee85790b9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1024,\"y\":175.16374801688642,\"z\":5000,\"width\":256,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargeFrequency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeFrequency\"},\"Name\":\"CostDetails.ChargeFrequency\",\"NativeReferenceName\":\"ChargeFrequency\"}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 256.00,
- "x": 1024.00,
+ "height": 88.0,
+ "width": 256.0,
+ "x": 1024.0,
"y": 175.16,
- "z": 5000.00
+ "z": 5000.0
},
{
"config": "{\"name\":\"bbdd2190d3f1f1dbad01\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":2128,\"z\":19000,\"width\":1264,\"height\":216,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\"},{\"queryRef\":\"CostDetails.ChargeCategory\"},{\"queryRef\":\"CostDetails.ChargeClass\"},{\"queryRef\":\"CostDetails.PricingCategory\"},{\"queryRef\":\"CostDetails.ChargeDescription\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"},{\"queryRef\":\"Sum(CostDetails.ContractedCost)\"},{\"queryRef\":\"Sum(CostDetails.PricingQuantity)\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"CostDetails.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"},\"Name\":\"Sum(CostDetails.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeDescription\"},\"Name\":\"CostDetails.ChargeDescription\",\"NativeReferenceName\":\"ChargeDescription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingQuantity\"},\"Name\":\"Sum(CostDetails.PricingQuantity)\",\"NativeReferenceName\":\"PricingQuantity1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":5},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"Count of ChargePeriodStart\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"},\"Name\":\"CostDetails.PricingCategory\",\"NativeReferenceName\":\"PricingCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeClass\"},\"Name\":\"CostDetails.ChargeClass\",\"NativeReferenceName\":\"ChargeClass\"}]},\"columnProperties\":{\"CostDetails.ChargePeriodStart\":{\"displayName\":\"Row count\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Columns that share the same unique values (should only be 1)'\"}}}}}]}}}",
"filters": "[]",
- "height": 216.00,
- "width": 1264.00,
- "x": 8.00,
- "y": 2128.00,
- "z": 19000.00
+ "height": 216.0,
+ "width": 1264.0,
+ "x": 8.0,
+ "y": 2128.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"c4024c5e9940182e5000\",\"layouts\":[{\"id\":0,\"position\":{\"x\":376,\"y\":1287.9437500191466,\"z\":14000,\"width\":632,\"height\":200,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingPeriod\"},{\"queryRef\":\"CostDetails.ChargeCategory\"},{\"queryRef\":\"CostDetails.x_SkuMeterName\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"},{\"queryRef\":\"CostDetails.ChargePeriodStart\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"CostDetails.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingPeriod\"},\"Name\":\"CostDetails.BillingPeriod\",\"NativeReferenceName\":\"BillingPeriod\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterName\"},\"Name\":\"CostDetails.x_SkuMeterName\",\"NativeReferenceName\":\"x_SkuMeterName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"drillFilterOtherVisuals\":true}}",
"filters": "[{\"name\":\"Filter20ab716479a155a5401d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Adjustment'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{},\"isHiddenInViewMode\":false}]",
- "height": 200.00,
- "width": 632.00,
- "x": 376.00,
+ "height": 200.0,
+ "width": 632.0,
+ "x": 376.0,
"y": 1287.94,
- "z": 14000.00
+ "z": 14000.0
},
{
"config": "{\"name\":\"ca9d6ef5117c152fdd27\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":1624,\"z\":16000,\"width\":1264,\"height\":496,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CountNonNull(CostDetails.ChargePeriodStart)\"},{\"queryRef\":\"CostDetails.BillingAccountId\"},{\"queryRef\":\"CostDetails.ChargeClass\"},{\"queryRef\":\"CostDetails.ChargePeriodStart\"},{\"queryRef\":\"CostDetails.CommitmentDiscountId\"},{\"queryRef\":\"CostDetails.RegionId\"},{\"queryRef\":\"CostDetails.ResourceId\"},{\"queryRef\":\"CostDetails.SkuPriceId\"},{\"queryRef\":\"CostDetails.Tags\"},{\"queryRef\":\"CostDetails.x_AccountOwnerId\"},{\"queryRef\":\"CostDetails.x_CostCenter\"},{\"queryRef\":\"CostDetails.x_InvoiceSectionId\"},{\"queryRef\":\"CostDetails.x_SkuDetails\"},{\"queryRef\":\"CostDetails.x_SkuMeterId\"},{\"queryRef\":\"CostDetails.x_SkuOfferId\"},{\"queryRef\":\"CostDetails.x_SkuPartNumber\"},{\"queryRef\":\"CostDetails.x_CostAllocationRuleName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingAccountId\"},\"Name\":\"CostDetails.BillingAccountId\",\"NativeReferenceName\":\"BillingAccountId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountId\"},\"Name\":\"CostDetails.CommitmentDiscountId\",\"NativeReferenceName\":\"CommitmentDiscountId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionId\"},\"Name\":\"CostDetails.RegionId\",\"NativeReferenceName\":\"RegionId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"},\"Name\":\"CostDetails.ResourceId\",\"NativeReferenceName\":\"ResourceId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SkuPriceId\"},\"Name\":\"CostDetails.SkuPriceId\",\"NativeReferenceName\":\"SkuPriceId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Tags\"},\"Name\":\"CostDetails.Tags\",\"NativeReferenceName\":\"Tags\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_AccountOwnerId\"},\"Name\":\"CostDetails.x_AccountOwnerId\",\"NativeReferenceName\":\"x_AccountOwnerId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostCenter\"},\"Name\":\"CostDetails.x_CostCenter\",\"NativeReferenceName\":\"x_CostCenter\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_InvoiceSectionId\"},\"Name\":\"CostDetails.x_InvoiceSectionId\",\"NativeReferenceName\":\"x_InvoiceSectionId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDetails\"},\"Name\":\"CostDetails.x_SkuDetails\",\"NativeReferenceName\":\"x_SkuDetails\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterId\"},\"Name\":\"CostDetails.x_SkuMeterId\",\"NativeReferenceName\":\"x_SkuMeterId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuOfferId\"},\"Name\":\"CostDetails.x_SkuOfferId\",\"NativeReferenceName\":\"x_SkuOfferId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuPartNumber\"},\"Name\":\"CostDetails.x_SkuPartNumber\",\"NativeReferenceName\":\"x_SkuPartNumber\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":5},\"Name\":\"CountNonNull(CostDetails.ChargePeriodStart)\",\"NativeReferenceName\":\"Row count\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"},\"Name\":\"CostDetails.x_CostAllocationRuleName\",\"NativeReferenceName\":\"x_CostAllocationRuleName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeClass\"},\"Name\":\"CostDetails.ChargeClass\",\"NativeReferenceName\":\"ChargeClass\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":5}}}]},\"columnProperties\":{\"CountNonNull(CostDetails.ChargePeriodStart)\":{\"displayName\":\"Row count\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"136.26255725521855D\"}}}},\"selector\":{\"metadata\":\"CostDetails.BillingAccountId\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"133.7086092715232D\"}}}},\"selector\":{\"metadata\":\"CostDetails.ResourceId\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"117.39735099337747D\"}}}},\"selector\":{\"metadata\":\"CostDetails.Tags\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Columns that determine uniqueness'\"}}}}}]}}}",
"filters": "[{\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":5}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}},\"Function\":5}},\"Right\":{\"Literal\":{\"Value\":\"1L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]",
- "height": 496.00,
- "width": 1264.00,
- "x": 8.00,
- "y": 1624.00,
- "z": 16000.00
+ "height": 496.0,
+ "width": 1264.0,
+ "x": 8.0,
+ "y": 1624.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"e010cf1e55512d22ff66\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":2360,\"z\":18000,\"width\":1280,\"height\":128,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Billing vs. pricing currency\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Cost Management shows prices in the pricing currency while FOCUS shows prices in the billing currency. This is not a problem, but is important to note when comparing prices across datasets. Use the table below to identify when this happens. We are not doing the math to avoid bloating the Power BI data size. If you would like to include a custom column, use the following formula as a template:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"x_ListUnitPriceInPricingCurrency = ListUnitPrice / x_BillingExchangeRate\"}]}]}}]},\"vcObjects\":{\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}}}}]}}}",
"filters": "[]",
- "height": 128.00,
- "width": 1280.00,
- "x": 0.00,
- "y": 2360.00,
- "z": 18000.00
+ "height": 128.0,
+ "width": 1280.0,
+ "x": 0.0,
+ "y": 2360.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"e57d2ca488802e2d01cf\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":2496,\"z\":17000,\"width\":1264,\"height\":216,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SkuPriceId\"},{\"queryRef\":\"CostDetails.BillingCurrency\"},{\"queryRef\":\"CostDetails.x_PricingCurrency\"},{\"queryRef\":\"CostDetails.x_BillingExchangeRate\"},{\"queryRef\":\"Sum(CostDetails.ListUnitPrice)\"},{\"queryRef\":\"Sum(CostDetails.ContractedUnitPrice)\"},{\"queryRef\":\"CostDetails.x_BilledUnitPrice\"},{\"queryRef\":\"CostDetails.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(CostDetails.BilledCost)\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"BillingCurrency\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_PricingCurrency\"},\"Name\":\"CostDetails.x_PricingCurrency\",\"NativeReferenceName\":\"x_PricingCurrency\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SkuPriceId\"},\"Name\":\"CostDetails.SkuPriceId\",\"NativeReferenceName\":\"SkuPriceId\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BilledUnitPrice\"},\"Name\":\"CostDetails.x_BilledUnitPrice\",\"NativeReferenceName\":\"x_BilledUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"CostDetails.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"x_EffectiveUnitPrice\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ContractedUnitPrice)\",\"NativeReferenceName\":\"ContractedUnitPrice\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ListUnitPrice)\",\"NativeReferenceName\":\"ListUnitPrice\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BillingExchangeRate\"},\"Name\":\"CostDetails.x_BillingExchangeRate\",\"NativeReferenceName\":\"x_BillingExchangeRate\"}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Columns that share the same unique values (should only be 1)'\"}}}}}]}}}",
"filters": "[{\"name\":\"276dc21d4e706b4051c9\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SkuPriceId\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SkuPriceId\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_BillingExchangeRate\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_BillingExchangeRate\"}},\"Right\":{\"Literal\":{\"Value\":\"1L\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false}]",
- "height": 216.00,
- "width": 1264.00,
- "x": 8.00,
- "y": 2496.00,
- "z": 17000.00
+ "height": 216.0,
+ "width": 1264.0,
+ "x": 8.0,
+ "y": 2496.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"f90750eb703bc173a6d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":1504,\"z\":15000,\"width\":1280,\"height\":112,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Generating a unique ID\",\"textStyle\":{\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]},{\"textRuns\":[{\"value\":\"Cost Management introduced an internal change to deliver data faster. When this happened, they started including more than one record for a single charge in a day. For most scenarios, this will not impact anyone. If you are using the documented columns necessary to generate a unique ID, then you will find that rows are not unique. The tables below indicate which rows are not uniquely identifiable. If this is an issue for you, please file a support request on Cost Management to raise awareness of the importance of this scenario for you.\"}]}]}}]},\"vcObjects\":{\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"15D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FFFFAA'\"}}}}}}}]}}}",
"filters": "[]",
- "height": 112.00,
- "width": 1280.00,
- "x": 0.00,
- "y": 1504.00,
- "z": 15000.00
+ "height": 112.0,
+ "width": 1280.0,
+ "x": 0.0,
+ "y": 1504.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"fd038561262cbc75a805\",\"layouts\":[{\"id\":0,\"position\":{\"x\":512,\"y\":175.16374801688642,\"z\":7000,\"width\":256,\"height\":352,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ResourceType\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceType\"},\"Name\":\"CostDetails.ResourceType\",\"NativeReferenceName\":\"ResourceType\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ResourceType\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ResourceName\":{},\"Sum(FOCUS.AmortizedCost)\":{},\"Sum(FOCUS.BilledCost)\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Basic'\"}}}}}],\"general\":[{\"properties\":{}}],\"header\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource types'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 352.00,
- "width": 256.00,
- "x": 512.00,
+ "height": 352.0,
+ "width": 256.0,
+ "x": 512.0,
"y": 175.16,
- "z": 7000.00
+ "z": 7000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Resource groups",
"displayOption": 1,
"filters": "[{\"name\":\"40c0487781c19a8aef52\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection3867a4b32e66201e7c9d",
"ordinal": 5,
"visualContainers": [
{
"config": "{\"name\":\"049bcc68cb4e69d42ce9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"06b57ff7414b443e48e6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"CostDetails.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1115916ef8e3db2ec4f8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"19fde731bb6ba9b45501\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"2669a57875e895c2e9d7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"27322ca87dc50541a4dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"2734acba37d163e73dd8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/ResourceGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2a6301c348bdf183f22e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"2d989a16d711ffc51de5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6cb8136cd9515f5c33eb\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"308edacd61728800a176\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
+ "x": 216.0,
"y": 7.52,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"30a2f02aee5a616f309b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6cb8136cd9515f5c33eb\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"3ef3bf1bbfb924215834\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"4b581d07476939ec0442\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6cb8136cd9515f5c33eb\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"507e48b7c5ebc168cbe9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"55ec9324c8e67d83baca\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"597f50e488766f676aee\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"6057f1ff52b6cd4022bc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":296,\"z\":2000,\"width\":1048,\"height\":416,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.x_ResourceGroupName\",\"active\":true},{\"queryRef\":\"CostDetails.ResourceName\"},{\"queryRef\":\"CostDetails.x_SkuDescription\"}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Columns\":[{\"queryRef\":\"CostDetails.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"CostDetails.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\",\"NativeReferenceName\":\"Resource\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"CostDetails.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ResourceName\"],\"isCollapsed\":true},{\"queryRefs\":[\"CostDetails.x_SkuDescription\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.x_SkuDescription\":{\"displayName\":\"SKU\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"},\"CostDetails.x_ChargeMonth\":{\"displayName\":\"Month\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 416.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 2000.00
+ "height": 416.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"60baf80517c1835c3db5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"617a00e70c9c681cd380\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"6a48167930797b37e2f6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6cb8136cd9515f5c33eb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6d6421f8407b9749a157\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"7bcfab8d1814c9ae7dd3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"80f0ec0b215dbc8adbb5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"8303a654da0a3d36a495\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8b657c987d889e8c4e53\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"907e461fb4555ee2b49b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"a153dab6f1e076b2111a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"a45b911d2b457fd6789f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"6cb8136cd9515f5c33eb\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"b3feeb82a6d956de37bb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"b487be6109a16f11a465\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"b8ed2da3c7e60a49590c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Resource groups\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Break down your cost by resource group to facilitate chargeback.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"baf985ba413b8c79c6f4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":5500,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#resource-groups'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"3ef3bf1bbfb924215834\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 5500.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 5500.0
},
{
"config": "{\"name\":\"c1eb8811da443d60b495\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"d270b80a870db96f38d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"308edacd61728800a176\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"d381490df216852e44fd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6cb8136cd9515f5c33eb\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"fa2876949d8789ede01a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Inventory",
"displayOption": 1,
"filters": "[{\"name\":\"Filter4a58504216335deb079d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},{\"name\":\"77a4c665f30876441b96\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Usage'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection7cfbc31c105d95e75492",
"ordinal": 8,
"visualContainers": [
{
"config": "{\"name\":\"0fda0a7c8bf35d260c5b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"1c07211d8403f75b1d2f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2460455209cfe1e6151c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"264715c8b868d9695722\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"2d26de7af930cd5280ea\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"2e50de02506876539757\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"318a72c1a837b37a8925\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"341b7dc249d837c90dd3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"264715c8b868d9695722\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"38dfae36ce3e7839ecad\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4621545fa5096045a03e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"5e886f830fb75d87cb79\",\"layouts\":[{\"id\":0,\"position\":{\"x\":982.5286821705427,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(CostDetails.ResourceType)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ResourceType\"}},\"Function\":2},\"Name\":\"Min(CostDetails.ResourceType)\",\"NativeReferenceName\":\"Count of ResourceType\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ResourceType\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource types'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
+ "height": 88.0,
+ "width": 184.0,
"x": 982.53,
- "y": 8.00,
- "z": 5000.00
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"632404511c856b6e50b4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
+ "x": 216.0,
"y": 7.52,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"6751377b6ee6174486d8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"264715c8b868d9695722\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"75a7cb8c838849c3be32\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"264715c8b868d9695722\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"75bfaff8656d6330d9bd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"264715c8b868d9695722\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"782bdf01e208ffccc100\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"802875f71142fd68f8fe\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"880feec86188bb8ecc00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"8bba1ee5eec21ee9f4f1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"8e7edb0357240e20ba08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":4000,\"width\":1048,\"height\":280,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"lineStackedColumnComboChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.ResourceType\"}],\"Y2\":[{\"queryRef\":\"CountNonNull(CostDetails.ResourceId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceType\"},\"Name\":\"CostDetails.ResourceType\",\"NativeReferenceName\":\"Type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"CountNonNull(CostDetails.ResourceId)\",\"NativeReferenceName\":\"Count of ResourceId1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"CostDetails.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.ResourceType\":{\"displayName\":\"Type\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"9260670c7e93135f4251\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"95061a144f5818d5fa5d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"a01ff11c42ddb4835674\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"a19e2e3dc93c667f7043\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"264715c8b868d9695722\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a7434de9bd67edefbbc9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":392,\"z\":3000,\"width\":472.00000000000006,\"height\":320,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"CostDetails.Service Hierarchy.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.Service Hierarchy.ServiceName\"},{\"queryRef\":\"CostDetails.Service Hierarchy.ResourceType\"}],\"Values\":[{\"queryRef\":\"Count(CostDetails.ResourceId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ServiceCategory\"},\"Name\":\"CostDetails.Service Hierarchy.ServiceCategory\",\"NativeReferenceName\":\"Service Hierarchy ServiceCategory\"},{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ServiceName\"},\"Name\":\"CostDetails.Service Hierarchy.ServiceName\",\"NativeReferenceName\":\"Service Hierarchy ServiceName\"},{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ResourceType\"},\"Name\":\"CostDetails.Service Hierarchy.ResourceType\",\"NativeReferenceName\":\"Service Hierarchy ResourceType\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(CostDetails.ResourceId)\",\"NativeReferenceName\":\"Resources\"}]},\"columnProperties\":{\"CostDetails.ResourceId\":{\"displayName\":\"Count\"},\"Count(CostDetails.ResourceId)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 472.00,
- "x": 792.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"b9b2d12bbb5f5e8a7405\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"bc6b45f5aeb120205d64\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#inventory'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"c2db8d0744af9f6afb85\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c3f964a665cdca4b475c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"c59195105734bb2f2360\",\"layouts\":[{\"id\":0,\"position\":{\"x\":790.5286821705427,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(CostDetails.ResourceId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Min(CostDetails.ResourceId)\",\"NativeReferenceName\":\"Count of ResourceId\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ResourceId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources '\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
+ "height": 88.0,
+ "width": 184.0,
"x": 790.53,
- "y": 8.00,
- "z": 6000.00
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"c9901d5a72d2d313a808\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":568,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.Service Hierarchy.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.Service Hierarchy.ServiceName\"},{\"queryRef\":\"CostDetails.Service Hierarchy.ResourceType\"}],\"Values\":[{\"queryRef\":\"Count(CostDetails.ResourceId)\"},{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"},{\"queryRef\":\"CostDetails.x_EffectiveCostPerResource\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Function\":2},\"Name\":\"Count(CostDetails.ResourceId)\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveCostPerResource\"},\"Name\":\"CostDetails.x_EffectiveCostPerResource\",\"NativeReferenceName\":\"Cost / resource\"},{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ServiceCategory\"},\"Name\":\"CostDetails.Service Hierarchy.ServiceCategory\",\"NativeReferenceName\":\"Service Hierarchy ServiceCategory\"},{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ServiceName\"},\"Name\":\"CostDetails.Service Hierarchy.ServiceName\",\"NativeReferenceName\":\"Service Hierarchy ServiceName\"},{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ResourceType\"},\"Name\":\"CostDetails.Service Hierarchy.ResourceType\",\"NativeReferenceName\":\"Service Hierarchy ResourceType\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Cost\"},\"CostDetails.ResourceId\":{\"displayName\":\"Count\"},\"CostDetails.x_EffectiveCostPerResource\":{\"displayName\":\"Cost / resource\"},\"Sum(CostDetails.x_TotalSavings)\":{\"displayName\":\"Savings\"},\"Count(CostDetails.ResourceId)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"grid\":[{\"properties\":{\"gridHorizontal\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 568.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ce13a3f6960748b34a2a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d5c4cdaabac34ed3df6d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"d956d1613b2b433cea64\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"e8803288d9fedff6a96e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e965b750ea3d55685382\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"f2b5ef79101a3f3fb891\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"f368954597806fae201c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"632404511c856b6e50b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"f4a245878aceb2a8552f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Resource inventory\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Track and gain insight into service usage across your account.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"ff991b44ae4e11b14f21\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Inventory'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"318a72c1a837b37a8925\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Summary",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection85de2b23d730d521bd94",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"0060d2231b62d1f957f9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"width\":1048,\"height\":88,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"0409a9b232621a02c459\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":2500,\"width\":40,\"height\":40,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#services'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"05556d6414c2922aa3c3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d1998000893c01dfb75c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"05dec7ce0130862b7638\",\"layouts\":[{\"id\":0,\"position\":{\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"width\":88,\"height\":704,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"12a034b9e34418300ddc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d1998000893c01dfb75c\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"156c88fa21597731e17e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":960.0876708841058,\"y\":0,\"z\":0,\"width\":88,\"height\":704,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"1986d67f0ce792902f74\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1b7392f5d226466c05cc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":1750,\"width\":192,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 1750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 1750.0
},
{
"config": "{\"name\":\"1fd5379ed21eacc642de\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"234ee7857f6d384af5af\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216,\"y\":8,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
- "y": 8.00,
- "z": 1000.00
+ "x": 216.0,
+ "y": 8.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"23eb0d51db87d85b95e4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":17000,\"width\":1048,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"435f41b971f31d9f8986\",\"layouts\":[{\"id\":0,\"position\":{\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"width\":88,\"height\":704,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"45e584993d916032d337\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"},{\"queryRef\":\"CostDetails.ResourceName\"}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"},{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}],\"Columns\":[{\"queryRef\":\"CostDetails.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\",\"NativeReferenceName\":\"Resource\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"CostDetails.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ResourceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"},\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ChargeMonth\":{\"displayName\":\"Month\"},\"Sum(CostDetails.x_TotalSavings)\":{\"displayName\":\"Savings\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"4bb28ebe050bc0a37c99\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d1998000893c01dfb75c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"4f6625264c8aed2a36b8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":96,\"z\":16000,\"width\":1048,\"height\":88,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"50a2608eecca5dc20b2d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":192,\"y\":0,\"z\":8000,\"width\":88,\"height\":704,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"541b8116b493673b7c06\",\"layouts\":[{\"id\":0,\"position\":{\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"width\":88,\"height\":704,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"744f2bdcce0e77d644f5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"width\":88,\"height\":704,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"76e7d9a5b60afc12b6a9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":10000,\"width\":88,\"height\":704,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"77ff33451be082fc2c49\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":192,\"height\":104,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Summary\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"View your daily cost and savings trends.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"817ae767dc96c041dc09\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":17002}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"96f7c455343b46c19cba\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":1500,\"width\":192,\"height\":32,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 1500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"a5a95763c1d050a36e52\",\"layouts\":[{\"id\":0,\"position\":{\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"width\":88,\"height\":704,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"afbddce42a4ab783dc0b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":96,\"y\":0,\"z\":9000,\"width\":88,\"height\":704,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"b05e38dc6a353dcd888c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"b303294166c24d160ec1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d1998000893c01dfb75c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b6053aa4f341eea69c37\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c2b35524b17d61625a18\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":576,\"z\":11000,\"width\":1048,\"height\":88,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"c52725e29ba41d901523\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"caf5938036a84808c5ab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104.00000000000001,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"stackedAreaChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"CostDetails.EffectiveCostRunningTotal\"},{\"queryRef\":\"CostDetails.x_NegotiatedDiscountSavingsRunningTotal\"},{\"queryRef\":\"CostDetails.x_CommitmentDiscountSavingsRunningTotal\"}],\"Tooltips\":[{\"queryRef\":\"CostDetails.x_TotalSavingsRunningTotal\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCostRunningTotal\"},\"Name\":\"CostDetails.EffectiveCostRunningTotal\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavingsRunningTotal\"},\"Name\":\"CostDetails.x_TotalSavingsRunningTotal\",\"NativeReferenceName\":\"Total savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_NegotiatedDiscountSavingsRunningTotal\"},\"Name\":\"CostDetails.x_NegotiatedDiscountSavingsRunningTotal\",\"NativeReferenceName\":\"Negotiated savings\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavingsRunningTotal\"},\"Name\":\"CostDetails.x_CommitmentDiscountSavingsRunningTotal\",\"NativeReferenceName\":\"Commitment savings\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CostDetails.EffectiveCostRunningTotal\":{\"displayName\":\"Cost\"},\"CostDetails.x_TotalSavingsRunningTotal\":{\"displayName\":\"Total savings\"},\"CostDetails.x_NegotiatedDiscountSavingsRunningTotal\":{\"displayName\":\"Negotiated savings\"},\"CostDetails.x_CommitmentDiscountSavingsRunningTotal\":{\"displayName\":\"Commitment savings\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"reverseStackOrder\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}},\"selector\":{\"metadata\":\"CostDetails.EffectiveCostRunningTotal\"}}],\"layout\":[{\"properties\":{\"seriesOrderReversed\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d1998000893c01dfb75c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":1937,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b6053aa4f341eea69c37\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 1937.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 1937.0
},
{
"config": "{\"name\":\"d537fc29a3a306539204\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":14000,\"width\":1048,\"height\":88,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"db94b91b1f8ab2f4de7d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"width\":88,\"height\":704,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"df072519ea9f33052b34\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"d1998000893c01dfb75c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"f23097c70e670772ba1b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"width\":1048,\"height\":88,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"f3a21edaa6dc0ef2bffe\",\"layouts\":[{\"id\":0,\"position\":{\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"width\":88,\"height\":704,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"fc42e66c88fa486c8cd8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":15000,\"width\":1048,\"height\":88,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"234ee7857f6d384af5af\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Services",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSectionb35903d610c9a37a4dcd",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"0284e70be38d02c4e351\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"CostDetails.Service Hierarchy.ServiceCategory\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"CostDetails.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"HierarchyLevel\":{\"Expression\":{\"Hierarchy\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Hierarchy\":\"Service Hierarchy\"}},\"Level\":\"ServiceCategory\"},\"Name\":\"CostDetails.Service Hierarchy.ServiceCategory\",\"NativeReferenceName\":\"Service Hierarchy ServiceCategory\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"0a3ce03fb99b2b951f9f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":576,\"z\":11000,\"width\":1048,\"height\":88,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"22c4fafbe19074c93b04\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"a99f5c11a6a6120cff26\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"2887a23a0268097bbb22\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Services\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Break down your cost by service.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"28d551d071cbd5908040\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"2e43040a2d4f7f060471\",\"layouts\":[{\"id\":0,\"position\":{\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"width\":88,\"height\":704,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"33812b9d0d8a0933b366\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"387f57e8083d8de64295\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"width\":1048,\"height\":88,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"3db2234746bff2fc5438\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"a99f5c11a6a6120cff26\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"4d8c0392c188ad286d80\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"4d8fb093d05be72449c7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"a99f5c11a6a6120cff26\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"4fb3cedc433030dda7c6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"a99f5c11a6a6120cff26\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4fccb4809498087305e2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"5358e56b7ac187534d2f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"width\":1048,\"height\":88,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"675c22d735988d024659\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216,\"y\":8,\"z\":1000,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
- "y": 8.00,
- "z": 1000.00
+ "x": 216.0,
+ "y": 8.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"6e8ecfeea70c71e30dcc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"},{\"queryRef\":\"CostDetails.ResourceType\"},{\"queryRef\":\"CostDetails.ResourceName\"},{\"queryRef\":\"CostDetails.ChargeDescription\"}],\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"},{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}],\"Columns\":[{\"queryRef\":\"CostDetails.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeDescription\"},\"Name\":\"CostDetails.ChargeDescription\",\"NativeReferenceName\":\"Charge\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\",\"NativeReferenceName\":\"Resource\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"CostDetails.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceType\"},\"Name\":\"CostDetails.ResourceType\",\"NativeReferenceName\":\"Type\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ResourceType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ResourceName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ChargeDescription\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeDescription\"}}],\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Databases'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Azure SQL Database'\"}}],\"isToggled\":true}]}]}}],\"columnProperties\":{\"CostDetails.ChargeDescription\":{\"displayName\":\"Charge\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"},\"CostDetails.ServiceCategory\":{\"displayName\":\"Category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"},\"CostDetails.x_ChargeMonth\":{\"displayName\":\"Month\"},\"Sum(CostDetails.x_TotalSavings)\":{\"displayName\":\"Savings\"},\"CostDetails.ResourceType\":{\"displayName\":\"Type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"70fd497d24eb80786e06\",\"layouts\":[{\"id\":0,\"position\":{\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"width\":88,\"height\":704,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"7f3c3e477bc95d677af4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":15000,\"width\":1048,\"height\":88,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"81715bce8f8b8e89a131\",\"layouts\":[{\"id\":0,\"position\":{\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"width\":88,\"height\":704,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"82b849399e9e70804330\",\"layouts\":[{\"id\":0,\"position\":{\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"width\":88,\"height\":704,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"94fa98dac4d8323155ad\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"9792205b1eff3fd79a28\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"9debe6824ccd458b572c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":10000,\"width\":88,\"height\":704,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"a26306668f5874e5ceb3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"width\":88,\"height\":704,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a99f5c11a6a6120cff26\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"aa83ec1db3fc5e5e880c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":960.0876708841058,\"y\":0,\"z\":0,\"width\":88,\"height\":704,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"aef038a2232741244b5e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"width\":88,\"height\":704,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"bf0acbaff531f678adcb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"a99f5c11a6a6120cff26\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"c557a7a10d28e2615a81\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#services'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"cae861a80aeb50a0ab53\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":14000,\"width\":1048,\"height\":88,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"d87f21ef5f9bb6d2e1f7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"width\":88,\"height\":704,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e2b5b0c92e728837e29e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":192,\"y\":0,\"z\":8000,\"width\":88,\"height\":704,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"e3087e721f64fbc866af\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":17000,\"width\":1048,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"e8006e93baf36cade09d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Services'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ea3eb3fd5e3f144daf83\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"4d8c0392c188ad286d80\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"edc8e920bfa05a918254\",\"layouts\":[{\"id\":0,\"position\":{\"x\":96,\"y\":0,\"z\":9000,\"width\":88,\"height\":704,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"f4d7b7d55018d93a7d03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":96,\"z\":16000,\"width\":1048,\"height\":88,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"675c22d735988d024659\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Charge breakdown",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSectiond60edbb046ba85e7aebe",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"01e3e2f6cb799defc1a3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"7ede0d0cc5df85c84202\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"048086e8c1a9a349af5c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":96,\"z\":16000,\"width\":1048,\"height\":88,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"049606c370953aec0b15\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"7ede0d0cc5df85c84202\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"072bd3c00d09b7e59a45\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216,\"y\":8,\"z\":5000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
- "y": 8.00,
- "z": 5000.00
+ "x": 216.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"08a0453395f59fb72b67\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"7ede0d0cc5df85c84202\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"08d65540e7841073ae81\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/ChargeBreakdown'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0c11e8d7d68435562d86\",\"layouts\":[{\"id\":0,\"position\":{\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"width\":88,\"height\":704,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0d03f6259e280233904d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":10031}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Billed cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"0ea493dcc0a7876230b5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"26db1c59c9033113c499\",\"layouts\":[{\"id\":0,\"position\":{\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"width\":88,\"height\":704,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"2d5b39fccdd2f54e60fd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"width\":88,\"height\":704,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"2e75178e9a26f1809a7a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":960.0876708841058,\"y\":0,\"z\":0,\"width\":88,\"height\":704,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"39764befb836467ce8b0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":192,\"y\":0,\"z\":8000,\"width\":88,\"height\":704,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"3d9a3be4d7673e0975a7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":15000,\"width\":1048,\"height\":88,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"4b3fac55b87621f43bb7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"5485c9b77045e43f1eaa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":10000,\"width\":88,\"height\":704,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"56532f7b380ee4dc9693\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":576,\"z\":11000,\"width\":1048,\"height\":88,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"57874f80ecc75f59e6a8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5afdfb0fea1b611eb31e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":503.99999999999994,\"y\":8,\"z\":3000,\"width\":376,\"height\":184,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"funnel\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(CostDetails.ListCost)\"},{\"queryRef\":\"Sum(CostDetails.ContractedCost)\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ListCost)\",\"NativeReferenceName\":\"List\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(CostDetails.ListCost)\":{\"displayName\":\"List\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"percentBarLabel\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost summary'\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 376.00,
- "x": 504.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 376.0,
+ "x": 504.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5d0d64b2bcd32fdf916f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Charge breakdown\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Break down your costs to identify the top cost contributors.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"6870a77a902ec528b195\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7ede0d0cc5df85c84202\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"859775fda5e8e9f39cd0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":14000,\"width\":1048,\"height\":88,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"85a0fda0595d21c9557c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":96,\"y\":0,\"z\":9000,\"width\":88,\"height\":704,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"85dfcf5f2b352387f50e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"width\":88,\"height\":704,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"8e0a93cf339e927e00c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#charge-breakdown'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"91a221d8d5a317726abe\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"7ede0d0cc5df85c84202\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"ac97ec5f9281ab906ee0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":887.9999999999999,\"y\":8,\"z\":2000,\"width\":376,\"height\":184,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"funnel\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"},{\"queryRef\":\"Sum(CostDetails.x_NegotiatedDiscountSavings)\"},{\"queryRef\":\"Sum(CostDetails.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"Total savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_NegotiatedDiscountSavings)\",\"NativeReferenceName\":\"Negotiated discount\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"Commitment discount\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(CostDetails.x_CommitmentDiscountSavings)\":{\"displayName\":\"Commitment discount\"},\"Sum(CostDetails.x_NegotiatedDiscountSavings)\":{\"displayName\":\"Negotiated discount\"},\"Sum(CostDetails.x_TotalSavings)\":{\"displayName\":\"Total savings\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"percentBarLabel\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings summary'\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 376.00,
- "x": 888.00,
- "y": 8.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 376.0,
+ "x": 888.0,
+ "y": 8.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b19d08d1a24358843530\",\"layouts\":[{\"id\":0,\"position\":{\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"width\":88,\"height\":704,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"b2d7a8e0700267836531\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":200,\"z\":1000,\"width\":1048,\"height\":512,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"decompositionTreeVisual\",\"projections\":{\"ExplainBy\":[{\"queryRef\":\"CostDetails.ChargeCategory\",\"active\":true},{\"queryRef\":\"CostDetails.PricingCategory\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountStatus\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\",\"active\":true},{\"queryRef\":\"CostDetails.x_SkuMeterCategory\",\"active\":true},{\"queryRef\":\"CostDetails.x_SkuMeterSubcategory\",\"active\":true},{\"queryRef\":\"CostDetails.x_SkuMeterName\",\"active\":true},{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true}],\"Analyze\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargeCategory\"},\"Name\":\"CostDetails.ChargeCategory\",\"NativeReferenceName\":\"ChargeCategory1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"},\"Name\":\"CostDetails.PricingCategory\",\"NativeReferenceName\":\"PricingCategory1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"ServiceCategory1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"ServiceName1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterCategory\"},\"Name\":\"CostDetails.x_SkuMeterCategory\",\"NativeReferenceName\":\"x_SkuMeterCategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"SubAccountName1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterSubcategory\"},\"Name\":\"CostDetails.x_SkuMeterSubcategory\",\"NativeReferenceName\":\"x_SkuMeterSubcategory\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuMeterName\"},\"Name\":\"CostDetails.x_SkuMeterName\",\"NativeReferenceName\":\"x_SkuMeterName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"},\"Name\":\"CostDetails.CommitmentDiscountStatus\",\"NativeReferenceName\":\"CommitmentDiscountStatus\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"ExplainBy\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ChargeCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.PricingCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountStatus\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_SkuMeterCategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_SkuMeterSubcategory\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterSubcategory\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_SkuMeterName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterName\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}}],\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Usage'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Standard'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"''\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Compute'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Virtual Machines'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Microsoft Fabric'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Fabric Capacity'\"}}],\"isToggled\":true,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Available Capacity Usage CU'\"}}],\"isToggled\":true}]}]}]}]}]}]}]}]}}],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"tree\":[{\"properties\":{\"effectiveBarsPerLevel\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}}}}],\"insights\":[{\"properties\":{\"isAINode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Usage'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'Other'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'On-Demand'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_PricingSubcategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Analytics'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}},\"Right\":{\"Literal\":{\"Value\":\"'Microsoft Fabric'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_SkuMeterCategory\"}},\"Right\":{\"Literal\":{\"Value\":\"'Microsoft Fabric'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"SubAccountName\"}},\"Right\":{\"Literal\":{\"Value\":\"'FTK Fabric'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceGroupName\"}},\"Right\":{\"Literal\":{\"Value\":\"'Haven'\"}}}}},{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceName\"}},\"Right\":{\"Literal\":{\"Value\":\"'havencapacity'\"}}}}}]}}],\"categoryLabels\":[{\"properties\":{\"categoryLabelFontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"dataLabels\":[{\"properties\":{\"dataLabelFontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"levelHeader\":[{\"properties\":{\"levelTitleFontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"levelSubtitleFontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"dataBars\":[{\"properties\":{\"dataBarWidthPercent\":{\"expr\":{\"Literal\":{\"Value\":\"80L\"}}}}}]}}}",
"filters": "[]",
- "height": 512.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 200.00,
- "z": 1000.00
+ "height": 512.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 200.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"bdebaf4728588ae70878\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"width\":1048,\"height\":88,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"c570e6fb35f7a390ddc0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":17000,\"width\":1048,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"d204a3efa6242c047761\",\"layouts\":[{\"id\":0,\"position\":{\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"width\":88,\"height\":704,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"d4f6a280aebf17ed6e0f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"7ede0d0cc5df85c84202\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"d5f98e12f4d56d52d0e3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"width\":88,\"height\":704,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"f379aac75da2b78c9a09\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"width\":1048,\"height\":88,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"072bd3c00d09b7e59a45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"f86eb8c5213e931edb68\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"4b3fac55b87621f43bb7\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Resources",
"displayOption": 1,
"filters": "[{\"name\":\"c104ef5c610d7bb896b1\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ResourceId\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceId\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":1},{\"name\":\"6ea3cb9d7209e8ea2c0a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceTop1K\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceTop1K\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"true\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSectionef6b9d8f58d421ca021e",
"ordinal": 6,
"visualContainers": [
{
"config": "{\"name\":\"006896a75b8da51c56c9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0ed375607ec992a44109\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ResourceName\"},{\"queryRef\":\"Costs.ResourceType\"},{\"queryRef\":\"CostDetails.RegionName\"},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"},{\"queryRef\":\"CostDetails.SubAccountName\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"},{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"RegionName\"},\"Name\":\"CostDetails.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"Savings\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceType\"},\"Name\":\"Costs.ResourceType\",\"NativeReferenceName\":\"Type\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"},\"CostDetails.RegionName\":{\"displayName\":\"Region\"},\"Sum(CostDetails.x_TotalSavings)\":{\"displayName\":\"Savings\"},\"Costs.ResourceType\":{\"displayName\":\"Type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"212.7999755199902D\"}}}},\"selector\":{\"metadata\":\"CostDetails.ResourceName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"157.69896193771626D\"}}}},\"selector\":{\"metadata\":\"CostDetails.x_ResourceGroupName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"187.24657186570295D\"}}}},\"selector\":{\"metadata\":\"Costs.ResourceType\"}}],\"grid\":[{\"properties\":{\"gridHorizontal\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"aa5edbc4a13759355493\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceTop1K\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1b1854228c6f26d96864\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e08c57813d6faef8268c\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1f16f49f7f87ce96f0a1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":216.00126878372978,\"y\":7.522749379008424,\"z\":1000,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
- "x": 216.00,
+ "x": 216.0,
"y": 7.52,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"28a9a14f5e89f8b0343a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2a7d089257e4f2b9c551\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"2ff953f3191bccfa4e4d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"31a49143bff828d545a2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"3da0512636a7725edb82\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"42493898385680d39302\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#resources'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"43e8b246dc4808b610a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"49f2fa73110731600b32\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"CostDetails.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"e08c57813d6faef8268c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"4a6166677b60f17cbbbd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Resources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Identify the top cost contributors by resource.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"50457bfab50617730357\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104.00000000000001,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"CostDetails.x_ReportingDate\",\"active\":true}],\"Series\":[{\"queryRef\":\"CostDetails.ResourceName\"}],\"Y\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"CostDetails.ResourceName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"CostDetails.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"CostDetails.ResourceName\":{\"displayName\":\"Resource\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Chart'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5eabca3c1d3e35001772\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"623f3bbcb63fbade8294\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.ServiceCategory\",\"active\":true},{\"queryRef\":\"CostDetails.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"CostDetails.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"CostDetails.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.ServiceCategory\":{\"displayName\":\"Service category\"},\"CostDetails.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e08c57813d6faef8268c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"6d67fb11a5ad0ec12e36\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6f412b78f1c9324fc571\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"CostDetails.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"CostDetails.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e08c57813d6faef8268c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"70b5acd4d6b5ef620b03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"8e79198b3c234b7980bb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8eed33566f5b9c59fd04\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"8ef6ef8310a28f6915e1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"95062c8d7f3656184da6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"985534d77ee0441df678\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"989c6398d9184fe3d1bc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"a703eb0390cb483ae8c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"βΉοΈ The page only shows the top 1000 resources. To view all, clear the x_ResourceType1K page filter from the Filters pane.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#000000\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FFF8CE'\"}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Notice'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'Custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E7D98C'\"}}}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 1080.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 1080.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"aa7c7fee8af5d140e6bf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"add70e2ab89731778139\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"b3e48969b67038ddee0f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/Resources'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b9515cda14ee14f9819e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c41429bdda4c3fa4651e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"c8c8243d5a842335e9bd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"d8f31e644b3ef11fcec8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d950f09a670144c1c16f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"e08c57813d6faef8268c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8f31e644b3ef11fcec8\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"e8b3a8f5b5edc81cf94c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"1f16f49f7f87ce96f0a1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"feea7bd73f9b11f58a2b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.SubAccountName\",\"active\":true},{\"queryRef\":\"CostDetails.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"CostDetails.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"CostDetails.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.SubAccountName\":{\"displayName\":\"Subscription\"},\"CostDetails.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e08c57813d6faef8268c\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"ffb915c412983ab74d32\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "c563657f6b3f4fc63ea9",
"visualContainers": [
{
"config": "{\"name\":\"02272826509e4602660a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"06a7c3e90ed262bccb99\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":1000,\"width\":776,\"height\":424,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report uses FinOps hubs with Data Explorer for cost and Azure Resource Graph for resource configuration and recommendation details. If your data is in a storage account and not in Data Explorer, please \"},{\"value\":\"download storage reports\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect to Azure Resource Graph and your Data Explorer cluster:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Deploy FinOps hubs\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you have not deployed FinOps hubs with the Data Explorer cluster option, please do so now. Data Explorer is required for KQL reports. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Once FinOps hubs is deployed, either configure managed exports for your hub instance or manually create new exports in Cost Management to initiate data ingestion. If creating exports manually, remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet β Required to calculate accurate and complete savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Connect to your FinOps hub instance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cluster URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"clusterUri\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"To promote specific tags into dedicated columns, update the Costs query to specify which tags you need to promote:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \"},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" > \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Transform data\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\".\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"In the Queries pane, right-click \"},{\"value\":\"Data Explorer\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Costs\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" and select \"},{\"value\":\"Advanced Editor\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\".\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Update the \"},{\"value\":\"PromotedTags\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" step on line ~5.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"If you have inconsistent casing in tag names, set \"},{\"value\":\"Handle_mixed_case_tags\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" to \"},{\"value\":\"true\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\".\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"If you have extra spaces in some tag names, set \"},{\"value\":\"Trim_spaces_from_tags\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" to \"},{\"value\":\"true\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\".\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"If you experience timeouts or failures with visuals that use promoted tags, try disabling these options. They increase load times significantly.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report uses DirectQuery for cost data, which means that data is refreshed every time you open a page and not from a scheduled refresh process.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to your account, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the desired tables. You can do this by going to \"},{\"value\":\"dataexplorer.azure.com\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://dataexplorer.azure.com/\"},{\"value\":\", connecting to your cluster, and running a \"},{\"value\":\"Costs | limit 100\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" query.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}]}},\"parentGroupName\":\"0ea72185adbf2cf8f4a0\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0ea72185adbf2cf8f4a0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":212.05479452054797,\"y\":111.78082191780823,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
@@ -4115,443 +4115,443 @@
"width": 852.33,
"x": 212.05,
"y": 111.78,
- "z": 11000.00
+ "z": 11000.0
},
{
"config": "{\"name\":\"12be4ee52940709706cd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"16c57f563e98e67b536b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":125,\"width\":96,\"height\":32,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 125.00
+ "y": 488.0,
+ "z": 125.0
},
{
"config": "{\"name\":\"193b16f8c0229af502bc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1c6ae1106e4495e9bee3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"2532e26d3bda6232fdaa\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"296a57712be8d891be68\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"330980de6a26f7e92210\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":6000,\"width\":272,\"height\":368,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 6000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"4885b748772877408783\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"4ad879e1bf2d7748e92e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"53b38783373bb0b71040\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"d6cdb8ede8cf4893d913\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"67f001709c0207952234\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"6bc885e678f8471f8b5d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"e2db4806d2fd5c9d95ea\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"74c29e239e2bf411aa60\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"d6cdb8ede8cf4893d913\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"88f28312a432af922c3e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"8ac8b68f0dbfd67863ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"330980de6a26f7e92210\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8e00d79ffc746643c0f6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"e2db4806d2fd5c9d95ea\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"9b6da2430313a11fbe1a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"a109a5208f1421b7e4de\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"a76a0973476f7531fb0a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":40,\"z\":3000,\"width\":736,\"height\":48,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}]}},\"parentGroupName\":\"0ea72185adbf2cf8f4a0\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"ac8683056a4f6436ab31\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e2db4806d2fd5c9d95ea\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"adad1df4dc74f2f73033\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":8000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Cost summary report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides several summaries of your effective (amortized) and billed costs based on the FinOps Open Cost and Usage Specification (FOCUS). Amortization breaks down reservation and savings plan purchases and allocates costs to the resources that received the benefit. Effective costs will not match your invoice.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting and analy\",\"textStyle\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/understand/reporting\"},{\"value\":\"tics capability\",\"textStyle\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/optimize/rates\"},{\"value\":\" in the FinOps Framework.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/CostSummary\"},{\"value\":\"ο»Ώ\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 8000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"ae3a5001d9fda9800214\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"af31dcf7a0e5abbb4baa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Cost%20summary%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Cost%20summary%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.CostSummary/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b0b2a35779b57f143666\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"b0c972248f8169e395aa\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"b65b40f83e6aadd2dcb8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"}]}]}}]}},\"parentGroupName\":\"d6cdb8ede8cf4893d913\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c1f288a2b56f89b3df0f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"c272ca337973163d0b4f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"330980de6a26f7e92210\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
- "config": "{\"name\":\"c3a5f0c65dfc5c4b04c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"c3a5f0c65dfc5c4b04c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"c530af517a82efec49f6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}]}},\"parentGroupName\":\"0ea72185adbf2cf8f4a0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"cde5a61c7cf321c024d4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"330980de6a26f7e92210\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"d608167b2800cd5f37d9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":784,\"y\":48,\"z\":2000,\"width\":32,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'eea9791fb405ba7e2373'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}]}},\"parentGroupName\":\"0ea72185adbf2cf8f4a0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"d6cdb8ede8cf4893d913\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":7000,\"width\":272,\"height\":368,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 7000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"d7a012d33ea2aa4d8f23\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"330980de6a26f7e92210\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d96fff05c9f42855646e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"dab8ad25bc9d0906c474\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"db0699bd090645927783\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 12000.00
+ "y": 112.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"dba7dfd64abe6112a5e2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"e0fa9dae2344df6f995f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":1000,\"width\":776,\"height\":384,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear \"},{\"value\":\"RangeStart, RangeEnd, Number of Months date \",\"textStyle\":{\"fontSize\":\"12px\"}},{\"value\":\"parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e1fcdb07884fc6a3938c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":9000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Cost summary\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 9000.00
+ "z": 9000.0
},
{
"config": "{\"name\":\"e2a5aa343a32f9d355e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":4000,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"e2cf9ff77352009da63e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'aa5f255533c169d47991'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d6cdb8ede8cf4893d913\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e2db4806d2fd5c9d95ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":5000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 5000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e449d0a11c83ce7aac32\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"e69246791224d7feecb3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"e2db4806d2fd5c9d95ea\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"e82905c8e3d2dd647563\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":500,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 500.00
+ "y": 488.0,
+ "z": 500.0
},
{
"config": "{\"name\":\"eb0ee67d575b54cdf827\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":250,\"width\":96,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 250.00
+ "y": 488.0,
+ "z": 250.0
},
{
"config": "{\"name\":\"eb91a261b0d37e189734\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"ecac7d836cc5a75e3dc7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'58ddce0ac819d194c4fc'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ed31b8c69c8859a6475a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":10000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -4560,38 +4560,38 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 10000.00
+ "z": 10000.0
},
{
"config": "{\"name\":\"f3696b5d0b479208c273\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f92f0508d293dd2ea2a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"b0c972248f8169e395aa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"f9e22e695b45fed368cf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'eea9791fb405ba7e2373'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"db0699bd090645927783\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme5385236195184553.json"
-}
\ No newline at end of file
+}
diff --git a/src/power-bi/kql/DataIngestion.Report/report.json b/src/power-bi/kql/DataIngestion.Report/report.json
index 689e69567..69772c40e 100644
--- a/src/power-bi/kql/DataIngestion.Report/report.json
+++ b/src/power-bi/kql/DataIngestion.Report/report.json
@@ -116,529 +116,529 @@
"displayName": "Errors",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "1c5b3a4a90a6e6dd5add",
"ordinal": 4,
"visualContainers": [
{
"config": "{\"name\":\"0ec101de8e668d99e319\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":200,\"z\":8000,\"width\":1048,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"HubErrors.Updated\",\"active\":true}],\"Series\":[{\"queryRef\":\"HubErrors.ErrorCode\"}],\"Y\":[{\"queryRef\":\"CountNonNull(HubErrors.ErrorCode)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"},\"Name\":\"HubErrors.Updated\",\"NativeReferenceName\":\"Last error\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"},\"Name\":\"HubErrors.ErrorCode\",\"NativeReferenceName\":\"ErrorCode\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"}},\"Function\":5},\"Name\":\"CountNonNull(HubErrors.ErrorCode)\",\"NativeReferenceName\":\"Count\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"}}}]},\"columnProperties\":{\"HubErrors.Updated\":{\"displayName\":\"Last error\"},\"CountNonNull(HubErrors.ErrorCode)\":{\"displayName\":\"Count\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"legend\":[{\"properties\":{\"showGradientLegend\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'RightCenter'\"}}}}}],\"categoryAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 200.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 200.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"1bcf7b72c1717ce098b3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":5000,\"width\":1048,\"height\":224,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubErrors.ErrorCode\"},{\"queryRef\":\"HubErrors.ErrorSeverity\"},{\"queryRef\":\"HubErrors.ErrorMessage\"},{\"queryRef\":\"HubErrors.ErrorMitigation\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"},\"Name\":\"HubErrors.ErrorCode\",\"NativeReferenceName\":\"Error\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorSeverity\"},\"Name\":\"HubErrors.ErrorSeverity\",\"NativeReferenceName\":\"Severity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorMessage\"},\"Name\":\"HubErrors.ErrorMessage\",\"NativeReferenceName\":\"Message\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorMitigation\"},\"Name\":\"HubErrors.ErrorMitigation\",\"NativeReferenceName\":\"Mitigation\"}]},\"columnProperties\":{\"HubData.DatasetVersion\":{\"displayName\":\"Version\"},\"HubData.Month\":{\"displayName\":\"Months\"},\"HubErrors.ErrorCode\":{\"displayName\":\"Error\"},\"HubErrors.ErrorSeverity\":{\"displayName\":\"Severity\"},\"HubErrors.ErrorMessage\":{\"displayName\":\"Message\"},\"HubErrors.ErrorMitigation\":{\"displayName\":\"Mitigation\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"423.4892045470484D\"}}}},\"selector\":{\"metadata\":\"HubErrors.ErrorMessage\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"584.0089849613933D\"}}}},\"selector\":{\"metadata\":\"HubErrors.ErrorMitigation\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Error details'\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 488.00,
- "z": 5000.00
+ "height": 224.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"1e0eaea01f31c2f82fda\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":280,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e4f6aacda8ed74d4e781\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 280.00,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 280.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"1e58260f62282d5007c9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"3281fb4de5330ad7c414\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"35cc415ed8896fcb7248\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"3edec7be2f9009778f45\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"43efcc66ae13c0773325\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"450dee246cf28aa69bfc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":167.99999999999994,\"z\":500,\"width\":200,\"height\":56,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.ExportName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"ExportName\"},\"Name\":\"StorageData.ExportName\",\"NativeReferenceName\":\"ExportName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"StorageData.ExportName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Export'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Export filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e4f6aacda8ed74d4e781\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.00,
- "z": 500.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.0,
+ "z": 500.0
},
{
"config": "{\"name\":\"4b8a8c23a09186c56fa9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"4d2279a27b1c8f1337ba\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"500bb3a79bf6a603cf84\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"5337ccde6b4134a3d970\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":7000,\"width\":1048,\"height\":184,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubErrors.ExportName\"},{\"queryRef\":\"HubErrors.Dataset\"},{\"queryRef\":\"HubErrors.DatasetVersion\"},{\"queryRef\":\"HubErrors.StorageContainer\"},{\"queryRef\":\"HubErrors.StoragePath\"},{\"queryRef\":\"HubErrors.Month\"},{\"queryRef\":\"Sum(HubErrors.DataFiles)\"},{\"queryRef\":\"Sum(HubErrors.SizeInGB)\"},{\"queryRef\":\"HubErrors.Updated\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ExportName\"},\"Name\":\"HubErrors.ExportName\",\"NativeReferenceName\":\"Export\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Dataset\"},\"Name\":\"HubErrors.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"DatasetVersion\"},\"Name\":\"HubErrors.DatasetVersion\",\"NativeReferenceName\":\"Version\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"StorageContainer\"},\"Name\":\"HubErrors.StorageContainer\",\"NativeReferenceName\":\"Container\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"StoragePath\"},\"Name\":\"HubErrors.StoragePath\",\"NativeReferenceName\":\"Path1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"DataFiles\"}},\"Function\":0},\"Name\":\"Sum(HubErrors.DataFiles)\",\"NativeReferenceName\":\"Data files\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubErrors.SizeInGB)\",\"NativeReferenceName\":\"GB\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Month\"}},\"Function\":2},\"Name\":\"HubErrors.Month\",\"NativeReferenceName\":\"Months\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"},\"Name\":\"HubErrors.Updated\",\"NativeReferenceName\":\"Last1\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ExportName\"}}}]},\"columnProperties\":{\"HubErrors.ExportName\":{\"displayName\":\"Export\"},\"HubErrors.DatasetVersion\":{\"displayName\":\"Version\"},\"HubErrors.StorageContainer\":{\"displayName\":\"Container\"},\"HubErrors.StoragePath\":{\"displayName\":\"Path\"},\"HubErrors.Month\":{\"displayName\":\"Months\"},\"Sum(HubErrors.DataFiles)\":{\"displayName\":\"Data files\"},\"Sum(HubErrors.SizeInGB)\":{\"displayName\":\"GB\"},\"HubErrors.Updated\":{\"displayName\":\"Last\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"292.54437091863053D\"}}}},\"selector\":{\"metadata\":\"HubErrors.ExportName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"142.80900208944053D\"}}}},\"selector\":{\"metadata\":\"HubErrors.Dataset\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"79.7063917955459D\"}}}},\"selector\":{\"metadata\":\"HubErrors.DatasetVersion\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"337.76179370956027D\"}}}},\"selector\":{\"metadata\":\"HubErrors.StoragePath\"}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 7000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"5f0b5ef6dd9a8ed50bea\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"6337fe4a9532a0d53032\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"6bfdb017770df745150c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"6c8a649c7160d78dba89\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"7926ba9b115e2bd94222\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Ingestion errors\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review errors across Cost Management exports and FinOps hubs ingestion.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"7f07fae648ab11628ca1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#ingestion'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"8701482ddd4d88dee905\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.DataIngestion/featureName/Errors'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"8ac0ce20b077fbf5b007\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e4f6aacda8ed74d4e781\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"939603821dbe6317ac75\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"HubScopes.Scope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"HubScopes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubScopes.Scope\",\"NativeReferenceName\":\"Scope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"HubScopes.Scope\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub scope'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Scope filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e4f6aacda8ed74d4e781\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"99613899d4d972b9f093\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"9e5bff523339727d274f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"a0628f98c78435f17dbf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"e4f6aacda8ed74d4e781\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"a3bc755f06909120c226\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":223.99999999999994,\"z\":250,\"width\":200,\"height\":56,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.Dataset\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Dataset\"},\"Name\":\"StorageData.Dataset\",\"NativeReferenceName\":\"Dataset\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"StorageData.Dataset\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dataset'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dataset filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"e4f6aacda8ed74d4e781\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.00,
- "z": 250.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.0,
+ "z": 250.0
},
{
"config": "{\"name\":\"b11a4f4d2d0cc7de981f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"c1255ba469488861972a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":9000,\"width\":1048,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Values\":[{\"queryRef\":\"CountNonNull(HubErrors.ErrorCode)\"}],\"Group\":[{\"queryRef\":\"HubErrors.ErrorCode\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"}},\"Function\":5},\"Name\":\"CountNonNull(HubErrors.ErrorCode)\",\"NativeReferenceName\":\"Errors\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"},\"Name\":\"HubErrors.ErrorCode\",\"NativeReferenceName\":\"ErrorCode\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"}},\"Function\":5}}}]},\"columnProperties\":{\"CountNonNull(HubErrors.ErrorCode)\":{\"displayName\":\"Errors\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Errors'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"c1e8ed443d8e3921311f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":17003}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(StorageErrors.ErrorCode)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"ErrorCode\"}},\"Function\":5},\"Name\":\"Min(StorageErrors.ErrorCode)\",\"NativeReferenceName\":\"Count of ErrorCode\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"ErrorCode\"}},\"Function\":5}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Errors'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"ca91a49ab83fcab64c9c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"cf1ecc9969e53831db9c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d54bae802ec607f53030\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d58345cd61a9231e85ec\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"e12ed1ac1b0040988b9d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"e4f6aacda8ed74d4e781\",\"layouts\":[{\"id\":0,\"position\":{\"height\":336,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3edec7be2f9009778f45\"}",
- "height": 336.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 336.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"e53e07bd63ced4f784d5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"f295182473b33d8219a1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"fb9e15a988660a78e1f7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"d54bae802ec607f53030\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection04cb7247170034c13d74",
"visualContainers": [
{
"config": "{\"name\":\"0cc8c81381a8196ed646\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"12657a372a8ee1ed1594\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":2000,\"width\":96,\"height\":32,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 2000.00
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1a76e820f3eb2500fa64\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8857bdf45267712f9344\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2849837682ac6a987c9c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"2a54f471bbf8f7ca1adc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"3745e37cda7ef8da541d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":2}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e60b21ba62d2dcc05d6e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"3f1332ad6bf3804d073a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"46fe5d51531adcf9be11\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":6000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 6000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"4bcce55f0199657f6eba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8857bdf45267712f9344\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"4c835267f7c19385b745\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":17}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"e60b21ba62d2dcc05d6e\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"4d711596c44ae59e5bc6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4dfc693e4ff2c070fb88\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"526e41fa7c5ff6d59d3e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"579fcdfdb61364467f7e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"58d48df55b5e039567da\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":15}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"7ca00df3d211f819d521\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"5f5c390598415307f15a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":4000,\"width\":776,\"height\":384,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear RangeStart, RangeEnd, Number of Months date parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 4000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"65d7024d0abb9cd8a0db\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"683307cfdf6c8e39a222\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6ee03f3167e7cf97c885\",\"layouts\":[{\"id\":0,\"position\":{\"height\":424,\"width\":776,\"x\":40,\"y\":96,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report uses FinOps hubs with Data Explorer for cost and also connects to the FinOps hubs storage account. If your data is in a storage account and not in Data Explorer, please \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"download storage reports\",\"textStyle\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect them to your Data Explorer cluster and storage account:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Deploy FinOps hubs\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you have not deployed FinOps hubs with the Data Explorer cluster option, please do so now. Data Explorer is required for KQL reports. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Once FinOps hubs is deployed, either configure managed exports for your hub instance or manually create new exports in Cost Management to initiate data ingestion. If creating exports manually, remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Connect to your FinOps hub instance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cluster URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"clusterUri\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Storage URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"storageUrlForPowerBI\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report uses DirectQuery for cost data, which means that data is refreshed every time you open a page and not from a scheduled refresh process.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to your account, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the desired tables. You can do this by going to \"},{\"value\":\"https://dataexplorer.azure.com\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://dataexplorer.azure.com/\"},{\"value\":\", connecting to your cluster, and running a \"},{\"value\":\"Costs | limit 100\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" query.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8857bdf45267712f9344\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"700fe17395d06afc1211\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":7000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -647,1329 +647,1329 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 7000.00
+ "z": 7000.0
},
{
"config": "{\"name\":\"74752a04a16cfea37484\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"77767464ab22b5af4a93\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":10}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"7ca00df3d211f819d521\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"7bbbf0aea3b084e66212\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":19}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"a84e637d56ec9be2c2bf\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"7ca00df3d211f819d521\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":2000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 2000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"7e9dd7748cf42d4703cf\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":20}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"7ca00df3d211f819d521\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"7fabd18d76910e32159e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"8715159959a10bc391c8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":12}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"e60b21ba62d2dcc05d6e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"8778aa6c47525b38b927\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"8857bdf45267712f9344\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":10000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
- "x": 216.00,
- "y": 113.00,
- "z": 10000.00
+ "x": 216.0,
+ "y": 113.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"9027f902948a3d6eb45a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":9}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting tips\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"a84e637d56ec9be2c2bf\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"9437d2ef92bfb333cb71\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":1500,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 1500.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"94563316293001a808f4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":5000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'64dfab72d6d824b9938d'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 5000.0
},
{
- "config": "{\"name\":\"9e2ec0b49feca9b9ab4c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":1250,\"width\":240,\"height\":32,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"9e2ec0b49feca9b9ab4c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":1250,\"width\":240,\"height\":32,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 1250.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 1250.0
},
{
"config": "{\"name\":\"a1c60993836f531ac8b4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":4}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'967163473dc98027e3f1'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a84e637d56ec9be2c2bf\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a4d654db2729dd15094a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":6000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Data ingestion\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 6000.00
+ "z": 6000.0
},
{
"config": "{\"name\":\"a84e637d56ec9be2c2bf\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":4000,\"width\":272,\"height\":368,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 4000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"bb15ee4412d09fad49b2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"bb5014c8147b10a950aa\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'64dfab72d6d824b9938d'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8857bdf45267712f9344\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"bfa258d98416fb0ceb6f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c145975e534707b957d0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"c380585b95e4959040c6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":7}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"e60b21ba62d2dcc05d6e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c3a93e70b0f9f3a8daf6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c63639e980df0fddff3d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"c843ea469f73eb67de34\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"d835fca92746a845bf28\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"d8a201262c9a6f0a6522\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.DataIngestion/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"d8e7c177cb7de6856da0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":14}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"a84e637d56ec9be2c2bf\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
- "config": "{\"name\":\"dc427474a7d0394b986f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"dc427474a7d0394b986f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.DataIngestion.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.DataIngestion.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 3000.00
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"dfcdb50c7407da6af0e5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":5}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7ca00df3d211f819d521\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e60b21ba62d2dcc05d6e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":3000,\"width\":272,\"height\":368,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 3000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"ed232b553f0b0a7ea83f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"ed290995e61a2c723555\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":1000,\"width\":96,\"height\":32,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"f3f1baeac787248b3885\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 1000.00
+ "y": 488.0,
+ "z": 1000.0
},
{
- "config": "{\"name\":\"ef66ba9c4ce95d95a5ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":1125,\"width\":88,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'abcb7d23f1555cec5afc'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"ef66ba9c4ce95d95a5ea\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":1125,\"width\":88,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.DataIngestion.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.DataIngestion.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'abcb7d23f1555cec5afc'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 1125.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 1125.0
},
{
"config": "{\"name\":\"f3f1baeac787248b3885\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 12000.00
+ "y": 112.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"faeff1c2227c98739d37\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":5000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Data ingestion report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides details about the data you've ingested into your FinOps hub storage account.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \"},{\"value\":\"Data ingestion capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/understand/ingestion\"},{\"value\":\" in the FinOps Framework.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/DataIngestion\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 5000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"fc8c7e2d7928e7c1986d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"683307cfdf6c8e39a222\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Ingestion",
"displayOption": 1,
"filters": "[{\"name\":\"Filter898f46d67c3786542022\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"StorageContainer\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"StorageContainer\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'ingestion'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection0f19b4db8a9820050c88",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"05ea6a60dcf0d150c22c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":376,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.MonthRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"MonthRange\"},\"Name\":\"StorageData.MonthRange\",\"NativeReferenceName\":\"MonthRange\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"StorageData.MonthRange\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingested months'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 376.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 376.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"0af4b52337422d1bd999\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"0de1c808559285a40f94\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"12752dba9e571aa6093e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"14f7d4f2d05ccf530017\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"17de494c3a7a867f0ddd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"1977e2f6c416ef755da4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1ddce0696c2a565b255f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"2133d05d987e7cce1e55\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"21a5831c0565ac42b853\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"2a5ccb466c270b399461\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"33c9d289f0f43eda5b11\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"441f39535479112f8880\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"HubData.Scope\",\"active\":true},{\"queryRef\":\"HubData.Dataset\"}],\"Values\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"},{\"queryRef\":\"Min(HubData.Updated)\"}],\"Columns\":[{\"queryRef\":\"HubData.Month\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubData.Scope\",\"NativeReferenceName\":\"Scope1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Dataset\"},\"Name\":\"HubData.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Updated\"}},\"Function\":4},\"Name\":\"Min(HubData.Updated)\",\"NativeReferenceName\":\"Updated\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"HubData.Scope\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Scope\"}}],\"isPinned\":true},{\"queryRefs\":[\"HubData.Dataset\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Min(HubData.Updated)\":{\"displayName\":\"Updated\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingestion files'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4dbcc87f4c496341bee5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"55473ddd162121465903\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":104,\"z\":4000,\"width\":184,\"height\":280,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"pieChart\",\"projections\":{\"Category\":[{\"queryRef\":\"HubData.Dataset\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"}],\"Tooltips\":[{\"queryRef\":\"Min(HubData.Scope)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Dataset\"},\"Name\":\"HubData.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Scope\"}},\"Function\":2},\"Name\":\"Min(HubData.Scope)\",\"NativeReferenceName\":\"Scopes\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Min(HubData.Scope)\":{\"displayName\":\"Scopes\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dataset size'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 184.00,
- "x": 1080.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.0,
+ "width": 184.0,
+ "x": 1080.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"5802ae4dcee30e0bde3f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"6a9c2e7f5353e9e70314\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"6da27783e66d3dc1bea6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"6dd570bf6e235b5c19ac\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6f31578b42a6a6ced171\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":2000,\"width\":856,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"}],\"Category\":[{\"queryRef\":\"HubData.Month\",\"active\":true}],\"Series\":[{\"queryRef\":\"HubData.Scope\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubData.Scope\",\"NativeReferenceName\":\"Scope\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"}}}]},\"columnProperties\":{\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingested data'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 856.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 280.0,
+ "width": 856.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"75368c13d77ed3d467bf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"81c6b6d0b2a2db73aa9e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2500,\"width\":200,\"height\":56,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.Month\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"},\"Name\":\"StorageData.Month\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"syncGroup\":{\"groupName\":\"Month\",\"fieldChanges\":true,\"filterChanges\":true},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported dates'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Date filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"ef789d2d99d15d68b383\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"967315e4824e2d782f6e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(HubSettings.Version)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"h\",\"Entity\":\"HubSettings\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Version\"}},\"Function\":3},\"Name\":\"Min(HubSettings.Version)\",\"NativeReferenceName\":\"First Version\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub version'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"a30f7398b90761058865\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.DataIngestion/featureName/Ingestion'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"a8781eb87d7fad56baed\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"add2863891c4fb4efd4f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Ingestion\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review data ingested into the FinOps hub storage account across scopes.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"af0a48231fb8d642e013\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56.75061878605793,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"HubScopes.Scope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"HubScopes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubScopes.Scope\",\"NativeReferenceName\":\"Scope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"HubScopes.Scope\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub scope'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Scope filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"ef789d2d99d15d68b383\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 56.75,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"afc37fa6f933bcef33c4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"c6c85fa47ab3dc983e5a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"cf4e8ab57016e668fb4d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"d4061e89ae046c946d8a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#ingestion'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e4e6b2c683c79df94d61\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":111.94938421815982,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"ef789d2d99d15d68b383\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 111.95,
- "z": 0.00
+ "z": 0.0
},
{
"config": "{\"name\":\"ef789d2d99d15d68b383\",\"layouts\":[{\"id\":0,\"position\":{\"height\":167.94938421815982,\"width\":200,\"x\":0,\"y\":104,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\"}",
"height": 167.95,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"efc3c9ab8bd8e81ddad5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"6dd570bf6e235b5c19ac\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"ffc0514d8f007df34684\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1977e2f6c416ef755da4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Hubs",
"displayOption": 1,
"filters": "[{\"name\":\"Filter0f705334ebcbcee40b30\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ToolkitTool\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ToolkitTool\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'FinOps hubs'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection85de2b23d730d521bd94",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"093c4a9c1f7cfefcde30\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0ecee9df9c14c53328c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"16c29f09f797be120f0f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":407.7929541589751,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
+ "height": 88.0,
+ "width": 184.0,
"x": 407.79,
- "y": 8.00,
- "z": 4000.00
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"1728a61f69f25b88dc13\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1ff112a4df381544e12f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"22f7895ecdcbd89aa303\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2440d5aa91a51819a77f\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"2fab7efe958add339c49\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"Costs.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6d59093a0414fb4599a4\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"41423a52e32a7e90f6b6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":2500,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#finops-hubs'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"42d91ea15462829a0118\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"4381f289cb5f86016c25\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"489068c8338169a3333f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":1500,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.DataIngestion/featureName/FinOpsHubs'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 1500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"54b1d3d319eafeb67fc5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6d59093a0414fb4599a4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"63eb9dac8b9da81167e7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"66470b4d669eb4744b5b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ServiceCategory\",\"active\":true},{\"queryRef\":\"Costs.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"Costs.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.ServiceCategory\":{\"displayName\":\"Service category\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6d59093a0414fb4599a4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"673629fe8219c64c6335\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"6a02a4b33a0912ec0cbb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"6a8d60324ba620a361cc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.x_ResourceParentName\",\"active\":true},{\"queryRef\":\"Costs.ServiceName\"},{\"queryRef\":\"Costs.ResourceName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Columns\":[{\"queryRef\":\"Costs.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceParentName\"},\"Name\":\"Costs.x_ResourceParentName\",\"NativeReferenceName\":\"Hub\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"ResourceName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"Costs.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.x_ResourceParentName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceParentName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.ServiceName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.ResourceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'ftk-brettwil-hub'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Azure Data Factory v2'\"}}],\"isToggled\":true}]}]}}],\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.x_ResourceParentName\":{\"displayName\":\"Hub\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"},\"Costs.ResourceName\":{\"displayName\":\"Resource\"},\"Costs.x_ChargeMonth\":{\"displayName\":\"Month\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"212.67862782571547D\"}}}},\"selector\":{\"metadata\":\"Costs.ResourceName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"230.24255480992463D\"}}}},\"selector\":{\"metadata\":\"Costs.x_ResourceParentName\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"6d59093a0414fb4599a4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":1937,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 1937.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 1937.0
},
{
"config": "{\"name\":\"726659d9bd45a3827b16\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"6d59093a0414fb4599a4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"7770fda573f412e6ec62\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":1750,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 1750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 1750.0
},
{
"config": "{\"name\":\"7df804c9b1a8e5e584fa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"89a486dbc39047d5102c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8bc680926353c56f7f47\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8bebda8cb858c1356152\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"6d59093a0414fb4599a4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"9002c3aefb70475d6f3a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"9379f97a2dfa9236c40b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps hubs\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review the cost of your FinOps hubs infrastructure.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"7df804c9b1a8e5e584fa\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"944f151f470b183dc8ba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c3bc073ed0aaa7733076\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":1048,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Costs.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"def939bc00385b21da78\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"df287da2c68edec66101\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e34c9cad1f8fab5a4c32\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"e384f203de4cde5d658b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"e7aa99b5700b42739c6d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"e9a2ba4effae11cdfa02\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"e9ead650f4033b35cbef\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"f1099808099305d0ecaf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"8bc680926353c56f7f47\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Exports",
"displayOption": 1,
"filters": "[{\"name\":\"Filterfebaca3cd39e7141e0b2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"StorageContainer\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"StorageContainer\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'msexports'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSectionb35903d610c9a37a4dcd",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"09b489166730787145ed\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.DataIngestion/featureName/Exports'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"13baedcdd3567b471b0e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":10000,\"width\":376,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.MonthRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"MonthRange\"},\"Name\":\"StorageData.MonthRange\",\"NativeReferenceName\":\"MonthRange\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"StorageData.MonthRange\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported months'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 376.00,
- "x": 216.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 376.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"1824ba609d8de87f845d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2500,\"width\":200,\"height\":56,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.Month\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"},\"Name\":\"StorageData.Month\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"syncGroup\":{\"groupName\":\"Month\",\"fieldChanges\":true,\"filterChanges\":true},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported dates'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Date filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"4c8f53da6b541a5975f4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"1aa8145a9037d8fd98e8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"1da4b19314d900d4413c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review exported data across scopes and identify ingestion failures.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"2001c8339b646cd80e1f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":111.19876543210194,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"4c8f53da6b541a5975f4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 111.20,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 111.2,
+ "z": 0.0
},
{
"config": "{\"name\":\"48eee05492973775ca8c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(HubSettings.Version)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"h\",\"Entity\":\"HubSettings\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Version\"}},\"Function\":3},\"Name\":\"Min(HubSettings.Version)\",\"NativeReferenceName\":\"First Version\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub version'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"4c8f53da6b541a5975f4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":104,\"z\":4000,\"width\":200,\"height\":167.19876543210194,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\"}",
- "height": 167.20,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 167.2,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"4e3dae108da21881a216\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"55096e9ceb14da326dab\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"5a0f87a2247f790dd7e2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"5f1f7bf579be9d88be98\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"723371fb7c7b9e678344\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"7d2ac9a3b90c00d0b6f5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"7e78734e9ddb10bf66dd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"832ec39cb8273d71d2d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":500,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 500.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 500.0
},
{
"config": "{\"name\":\"8cb0c410601c78983fd7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#exports'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"94401df680aa90ff2e3e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"95f843ad7e0f84083259\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"9cc0deef68e077507592\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"a401f3c51210c5f41020\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"a62017b851ed14c735e0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"HubScopes.Scope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"HubScopes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubScopes.Scope\",\"NativeReferenceName\":\"Scope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"HubScopes.Scope\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub scope'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Scope filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"4c8f53da6b541a5975f4\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ab9b6d9a6f24016fd098\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"ae23383ad7f202efb4dd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"b2782a75901c6a2efcf3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"832ec39cb8273d71d2d5\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b6fb9c8cd27a9253c2ca\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"ccaa38b0d906600d07c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":392,\"z\":1750,\"width\":184,\"height\":320,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubData.Month\"},{\"queryRef\":\"HubData.UpdatedRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"UpdatedRange\"},\"Name\":\"HubData.UpdatedRange\",\"NativeReferenceName\":\"Export runs\"}]},\"columnProperties\":{\"HubExports.MonthRange\":{\"displayName\":\"Exported months\"},\"HubData.UpdatedRange\":{\"displayName\":\"Export runs\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported data'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 184.00,
- "x": 504.00,
- "y": 392.00,
- "z": 1750.00
+ "height": 320.0,
+ "width": 184.0,
+ "x": 504.0,
+ "y": 392.0,
+ "z": 1750.0
},
{
"config": "{\"name\":\"cd9edac69c309601451d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":7500,\"width\":1048,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"HubData.Updated\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"}],\"Series\":[{\"queryRef\":\"HubData.ExportName\"}],\"Tooltips\":[{\"queryRef\":\"Sum(StorageData.AllFiles)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"},\"Name\":\"HubData.Updated\",\"NativeReferenceName\":\"Updated\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"Size (GB)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ExportName\"},\"Name\":\"HubData.ExportName\",\"NativeReferenceName\":\"Export\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"AllFiles\"}},\"Function\":0},\"Name\":\"Sum(StorageData.AllFiles)\",\"NativeReferenceName\":\"File count\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"}}}]},\"columnProperties\":{\"HubData.ExportName\":{\"displayName\":\"Export\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"Size (GB)\"},\"Sum(StorageData.AllFiles)\":{\"displayName\":\"File count\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"detailContentType\":{\"expr\":{\"Literal\":{\"Value\":\"'Percent of total'\"}}},\"detailLabelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'RightCenter'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Export runs'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 7500.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 7500.0
},
{
"config": "{\"name\":\"d91901c284e3a9419589\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"dbb34ccad86806a677ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ddae0d2cec787a36cac1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":392,\"z\":1125,\"width\":568,\"height\":320,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubData.ExportName\"},{\"queryRef\":\"HubData.Month\"},{\"queryRef\":\"Sum(HubData.ConfigFiles)\"},{\"queryRef\":\"HubData.Dataset\"},{\"queryRef\":\"Sum(HubData.ConfigFiles)\"},{\"queryRef\":\"HubData.Updated\"},{\"queryRef\":\"Sum(HubData.SizeInGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"ExportName\"},\"Name\":\"HubData.ExportName\",\"NativeReferenceName\":\"Export\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Dataset\"},\"Name\":\"HubData.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"ConfigFiles\"}},\"Function\":0},\"Name\":\"Sum(HubData.ConfigFiles)\",\"NativeReferenceName\":\"Failed runs\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Updated\"}},\"Function\":4},\"Name\":\"HubData.Updated\",\"NativeReferenceName\":\"Last\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Updated\"}},\"Function\":4}}}]},\"columnProperties\":{\"HubData.ExportName\":{\"displayName\":\"Export\"},\"Sum(HubData.ConfigFiles)\":{\"displayName\":\"Failed runs\"},\"HubData.Updated\":{\"displayName\":\"Last\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"79.7653075183143D\"}}}},\"selector\":{\"metadata\":\"HubData.Dataset\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.22539967803107D\"}}}},\"selector\":{\"metadata\":\"HubData.ExportName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"75.77285422253676D\"}}}},\"selector\":{\"metadata\":\"Sum(HubData.ConfigFiles)\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingestion failures'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter84fc43e13670e02004ee\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Dataset\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter5364d8e90b8ea49b7603\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"ExportName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter3b0422957ed15ba87588\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"ConfigFiles\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filterb7a052e759ce22a6d286\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Month\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filter32e06cd5169ba024cebc\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Scope\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filtereb948cd516b01e1be684\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Updated\"}},\"Function\":4}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter1903c6d9257bb77a87c6\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"SizeInGB\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"name\":\"Filter60b68703bd3a7c710c15\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"DataFiles\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"DataFiles\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":7},{\"name\":\"Filterf914cae502870e3e0a92\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"AllFiles\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":8}]",
- "height": 320.00,
- "width": 568.00,
- "x": 696.00,
- "y": 392.00,
- "z": 1125.00
+ "height": 320.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 392.0,
+ "z": 1125.0
},
{
"config": "{\"name\":\"deb64b861cb49a7739da\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"eb6203da4fe1f45f8da9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"ee44654f17e9e3b6fccf\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"eeaae3f1388f898c4187\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"55096e9ceb14da326dab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f5b0912479c943607d15\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":3000,\"width\":280,\"height\":320,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubData.Scope\"},{\"queryRef\":\"HubData.MonthRange\"},{\"queryRef\":\"SparklineData(Sum(HubData.ConfigFiles)_[HubData.Month])\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubData.Scope\",\"NativeReferenceName\":\"Scope1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"MonthRange\"},\"Name\":\"HubData.MonthRange\",\"NativeReferenceName\":\"Months\"},{\"SparklineData\":{\"Measure\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"ConfigFiles\"}},\"Function\":0}},\"Groupings\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"}}]},\"Name\":\"SparklineData(Sum(HubData.ConfigFiles)_[HubData.Month])\",\"NativeReferenceName\":\"Exports\"}]},\"columnProperties\":{\"HubData.MonthRange\":{\"displayName\":\"Months\"},\"SparklineData(Sum(HubData.ConfigFiles)_[HubData.Month])\":{\"displayName\":\"Exports\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"271.0858680888317D\"}}}},\"selector\":{\"metadata\":\"HubData.Scope\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Monitored scopes'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"Filterd95a24070c888c009bdb\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Scope\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 320.00,
- "width": 280.00,
- "x": 216.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 280.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme6554655019421287.json"
-}
\ No newline at end of file
+}
diff --git a/src/power-bi/kql/Governance.Report/report.json b/src/power-bi/kql/Governance.Report/report.json
index aa164d7bb..b8441d815 100644
--- a/src/power-bi/kql/Governance.Report/report.json
+++ b/src/power-bi/kql/Governance.Report/report.json
@@ -109,1918 +109,1918 @@
"displayName": "Managed disks",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "1bb6fe4da6ee348554d8",
"ordinal": 4,
"visualContainers": [
{
"config": "{\"name\":\"0076fba417246d553951\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"045fef69e0b368cc5005\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3750,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2Fdisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3750.0
},
{
"config": "{\"name\":\"06dfd85605888c6d8bc0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0d37ce11ce071bd82db3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0ed9327a8c9e3cd88449\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Disks.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#999900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'UnusedSavingsPlan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"13ec05da9ca4de601e2d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"13a5d3fb65001e2d0038\",\"layouts\":[{\"id\":0,\"position\":{\"height\":183.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"216cb3d0459c0890d020\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"290039237b885e442810\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2c363109c1b258b60727\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"2cf56d7cc7eda2625a07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Disks.resourceGroup\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"},{\"queryRef\":\"Costs.ChargePeriod\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Disks.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriod\"},\"Name\":\"Costs.ChargePeriod\",\"NativeReferenceName\":\"ChargePeriod\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Disks.resourceGroup\":{\"displayName\":\"Resource group\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"441.43021990177425D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"104.55223880597015D\"}}}},\"selector\":{\"metadata\":\"Disks.location\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.48974304329354D\"}}}},\"selector\":{\"metadata\":\"Disks.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"86.20722391050697D\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"83.800630562379D\"}}}},\"selector\":{\"metadata\":\"Disks.diskType\"}}],\"columnFormatting\":[{\"properties\":{\"styleTotal\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}}],\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"grid\":[{\"properties\":{\"gridVertical\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Middle'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'ActiveSAS'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Attached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Reserved'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolMedium'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Unattached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Disks.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"30c4cfcb9687eb068a10\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"361f3a1c862a92dd5d93\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1500,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.sku.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKU'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"13a5d3fb65001e2d0038\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1500.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"4031383470ed68a1bc63\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"40566dadc053772c056d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"43d992192686d600c7d1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"13a5d3fb65001e2d0038\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5bb9cfde36b82d636e77\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"64a32c63701016011b39\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"67bff114d462acc08060\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"6997ad560b01616cd603\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/ManagedDisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"6ed4f466b9e1cc4e91b0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"727bdc30633a908b3977\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"76fe8e2edbe01211049e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"7a343d12e500e0d56c96\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1024,\"y\":8,\"z\":8000,\"width\":240.00000000000003,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.properties.diskState\",\"active\":true}],\"Values\":[{\"queryRef\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\",\"NativeReferenceName\":\"Percent\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskState\"},\"Name\":\"Disks.properties.diskState\",\"NativeReferenceName\":\"State\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Disks.properties.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\":{\"displayName\":\"Percent\"},\"Disks.properties.diskState\":{\"displayName\":\"State\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Premium_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'StandardSSD_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E3008C'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unattached'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"'Attached'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reserved'\"}}}}}]}}],\"legend\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 240.00,
- "x": 1024.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 240.0,
+ "x": 1024.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"7cda86997344b50ab5d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#managed-disks'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"7de8e957a581048e31c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"9241fafeb432000570a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"96c65e0292440aa04555\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"97319163797b2ba59c80\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"a28000ecbd7866b37a89\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"a5a4cda76cbb8c4ceeb7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Disks.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Disks.id)\",\"NativeReferenceName\":\"Unattached disks\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(Disks.id)\":{\"displayName\":\"Unattached disks\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unattached disks'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"a9aa99494b4e497ea301\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"13a5d3fb65001e2d0038\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ab485563a8c8dde906a8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c3448162470711462eb5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"c4dc48e216c87e1d35b8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"d68cde6f7c971e2c2ed2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Managed disks\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review managed disks and identify unattached disks.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e387392e1c05d59c54a0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":7000,\"width\":224,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}],\"Values\":[{\"queryRef\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\",\"NativeReferenceName\":\"Percent\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Sum(Disks.properties.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\":{\"displayName\":\"Percent\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Premium_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'StandardSSD_LRS'\"}}}}}]}}],\"legend\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 224.00,
- "x": 792.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 224.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"ebb6b8e9e8b5c05ec1a5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3500,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0d37ce11ce071bd82db3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3500.0
},
{
"config": "{\"name\":\"f29ff3a0140782469db5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"f9fb613fe669d33c2388\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"40566dadc053772c056d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Policy compliance",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "64af2f5032bd2cbe7219",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"01f4028f40c60948d817\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"065478bc560e0667c071\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"0ebd70442dab62c41c0e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"0f9f66b5014dbbcc40e8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Policy compliance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review governance policies.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"13728853a71076b59a68\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"158ce3be65d1a61894a2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"16d68a0d140a78120630\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"PolicyAssignments.properties.displayName\"},{\"queryRef\":\"PolicyStates.properties.policyAssignmentScope\"},{\"queryRef\":\"PolicyStates.properties.resourceId\"},{\"queryRef\":\"Table 2.Compliant\"},{\"queryRef\":\"Table 2.NonCompliant\"},{\"queryRef\":\"Table 2.Compliance\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PolicyAssignments\",\"Type\":0},{\"Name\":\"p1\",\"Entity\":\"PolicyStates\",\"Type\":0},{\"Name\":\"c\",\"Entity\":\"Compliance calculation\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.displayName\"},\"Name\":\"PolicyAssignments.properties.displayName\",\"NativeReferenceName\":\"Policy\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p1\"}},\"Property\":\"properties.policyAssignmentScope\"},\"Name\":\"PolicyStates.properties.policyAssignmentScope\",\"NativeReferenceName\":\"Scope\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p1\"}},\"Property\":\"properties.resourceId\"}},\"Function\":2},\"Name\":\"PolicyStates.properties.resourceId\",\"NativeReferenceName\":\"Resources\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Compliant\"},\"Name\":\"Table 2.Compliant\",\"NativeReferenceName\":\"Compliant1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"},\"Name\":\"Table 2.NonCompliant\",\"NativeReferenceName\":\"Non-compliant\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Compliance\"},\"Name\":\"Table 2.Compliance\",\"NativeReferenceName\":\"Compliance1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"}}}]},\"columnProperties\":{\"PolicyAssignments.properties.displayName\":{\"displayName\":\"Policy\"},\"PolicyStates.properties.policyAssignmentScope\":{\"displayName\":\"Scope\"},\"PolicyStates.properties.resourceId\":{\"displayName\":\"Resources\"},\"Table 2.NonCompliant\":{\"displayName\":\"Non-compliant\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Compliance calculation\"}},\"Property\":\"NonCompliant\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Compliance calculation\"}},\"Property\":\"NonCompliant\"}},\"Right\":{\"Literal\":{\"Value\":\"0D\"}}}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"PolicyAssignments.properties.displayName\"}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1b23f6af4680d3719473\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"2b01c889a53acdec9607\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"32dced32541bb007e0a6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":3000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"PolicyStates.complianceScore\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PolicyStates\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"complianceScore\"},\"Name\":\"PolicyStates.complianceScore\",\"NativeReferenceName\":\"complianceScore\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"complianceScore\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"25D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compliance'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"3ff0f4c4d73b5c34840a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"497b954b0ec8e0d410ec\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/Microsoft_Azure_Policy/PolicyMenuBlade/~/overview'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"4a49149a7b6dbc6693c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"4b2b4f23b9d02069a00c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":56,\"z\":0,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"PolicyAssignments.properties.displayName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PolicyAssignments\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.displayName\"},\"Name\":\"PolicyAssignments.properties.displayName\",\"NativeReferenceName\":\"properties.displayName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"PolicyAssignments.properties.displayName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"PolicyAssignments.properties.displayName\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Policy'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"a46284a495a594c16058\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"50710a2d52e3453b7333\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"510bbad019c050107077\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"5f313de00360e6908ac9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"68f6ddf590d5c0bbb7b0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"6ce24a52ab206dd65bd6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"7781b6e03ca2ab740a76\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"78d9c1c15c52554245ca\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"a46284a495a594c16058\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7fcf57220028a6bbdd7c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8a040c169ea109675342\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"9f8505b0e34cd90c88c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#policy-compliance'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"a1715e3dd117e6a4ca58\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"a46284a495a594c16058\",\"layouts\":[{\"id\":0,\"position\":{\"height\":120,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\"}",
- "height": 120.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 120.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"bb1bdf50194982c154d4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":4000,\"width\":1048,\"height\":280,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"PolicyAssignments.properties.displayName\",\"active\":true}],\"Values\":[{\"queryRef\":\"Count(PolicyStates.properties.resourceId)\"}],\"Tooltips\":[{\"queryRef\":\"Compliance calculation.NonCompliant\"},{\"queryRef\":\"Compliance calculation.Compliance\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Compliance calculation\",\"Type\":0},{\"Name\":\"p\",\"Entity\":\"PolicyAssignments\",\"Type\":0},{\"Name\":\"p1\",\"Entity\":\"PolicyStates\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.displayName\"},\"Name\":\"PolicyAssignments.properties.displayName\",\"NativeReferenceName\":\"Policy\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"},\"Name\":\"Compliance calculation.NonCompliant\",\"NativeReferenceName\":\"Non-compliant\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p1\"}},\"Property\":\"properties.resourceId\"}},\"Function\":2},\"Name\":\"Count(PolicyStates.properties.resourceId)\",\"NativeReferenceName\":\"Resources\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Compliance\"},\"Name\":\"Compliance calculation.Compliance\",\"NativeReferenceName\":\"Compliance1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"}}}]},\"columnProperties\":{\"PolicyAssignments.properties.displayName\":{\"displayName\":\"Policy\"},\"PolicyStates.properties.resourceId\":{\"displayName\":\"Total resource\"},\"Count(PolicyStates.properties.resourceId)\":{\"displayName\":\"Resources\"},\"Compliance calculation.NonCompliant\":{\"displayName\":\"Non-compliant\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"FillRule\":{\"Input\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"PolicyStates\"}},\"Property\":\"complianceScore\"}},\"FillRule\":{\"linearGradient3\":{\"min\":{\"color\":{\"Literal\":{\"Value\":\"'#990000'\"}},\"value\":{\"Literal\":{\"Value\":\"0.6D\"}}},\"mid\":{\"color\":{\"Literal\":{\"Value\":\"'#999900'\"}},\"value\":{\"Literal\":{\"Value\":\"0.8D\"}}},\"max\":{\"color\":{\"Literal\":{\"Value\":\"'#009900'\"}},\"value\":{\"Literal\":{\"Value\":\"1D\"}}},\"nullColoringStrategy\":{\"strategy\":{\"Literal\":{\"Value\":\"'noColor'\"}}}}}}}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"bfcb77e1bd5ee04900a8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"ca2bf96b1ab4d91914d6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"d77270b62009b4d0c469\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/PolicyCompliance'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e17ddce4b17b200d1b05\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"e5f765be9c353e235060\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"e5ff36529ed23dc76517\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"68f6ddf590d5c0bbb7b0\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"e8503e02eb5084317b0d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7fcf57220028a6bbdd7c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "SQL databases",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "93a1cd9ad3c0d9a55807",
"ordinal": 5,
"visualContainers": [
{
"config": "{\"name\":\"045320207e09d6c1be03\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"0cc34d1c9069b7d76337\",\"layouts\":[{\"id\":0,\"position\":{\"height\":184,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"1363d1e1520285008542\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"13d13fbf008659b2e16c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"19f24707cbee4be0b124\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"1a9b98868e7409a83105\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"1c6aa671eb6b120d5bdd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"1d5efb10dda405add10b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"25a8bfeabc40927ac7d8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"0cc34d1c9069b7d76337\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"278bab0563eb7bd70198\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(SqlDatabases.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(SqlDatabases.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL databases'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"2c3544ea39aae62050b1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"SQL databases\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review SQL databases.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"39cb18c610ec50066e92\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"49bd0c1756d06d18b530\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5ace3a7e07418370a400\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"62a84539cab823ccb73b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/SqlDatabases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"6b63e0426be040c3eb00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"6bf90fbf24902016ce90\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"74e39e62220e88329699\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"8335392a9651d4da6497\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":296,\"z\":2000,\"width\":1048,\"height\":416,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"SQL DB.name\"},{\"queryRef\":\"SQL DB.resourceGroup\"},{\"queryRef\":\"SQL DB.location\"},{\"queryRef\":\"SQL DB.sku.name\"},{\"queryRef\":\"SQL DB.sku.capacity\"},{\"queryRef\":\"SQL DB.sku.tier\"},{\"queryRef\":\"SQL DB.properties.status\"},{\"queryRef\":\"SQL DB.properties.licenseType\"},{\"queryRef\":\"SQL DB.properties.requestedBackupStorageRedundancy\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"SQL DB.name\",\"NativeReferenceName\":\"Name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"resourceGroup\"},\"Name\":\"SQL DB.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"location\"},\"Name\":\"SQL DB.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.name\"},\"Name\":\"SQL DB.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.capacity\"},\"Name\":\"SQL DB.sku.capacity\",\"NativeReferenceName\":\"Capacity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.tier\"},\"Name\":\"SQL DB.sku.tier\",\"NativeReferenceName\":\"Tier\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"properties.status\"},\"Name\":\"SQL DB.properties.status\",\"NativeReferenceName\":\"Status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"properties.requestedBackupStorageRedundancy\"},\"Name\":\"SQL DB.properties.requestedBackupStorageRedundancy\",\"NativeReferenceName\":\"Backup storage redundancy\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"properties.licenseType\"},\"Name\":\"SQL DB.properties.licenseType\",\"NativeReferenceName\":\"License type\"}]},\"columnProperties\":{\"SQL DB.name\":{\"displayName\":\"Name\"},\"SQL DB.resourceGroup\":{\"displayName\":\"Resource group\"},\"SQL DB.location\":{\"displayName\":\"Region\"},\"SQL DB.sku.name\":{\"displayName\":\"SKU\"},\"SQL DB.sku.capacity\":{\"displayName\":\"Capacity\"},\"SQL DB.sku.tier\":{\"displayName\":\"Tier\"},\"SQL DB.properties.status\":{\"displayName\":\"Status\"},\"SQL DB.properties.requestedBackupStorageRedundancy\":{\"displayName\":\"Backup storage redundancy\"},\"SQL DB.properties.licenseType\":{\"displayName\":\"License type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"grid\":[{\"properties\":{\"gridVertical\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"urlIcon\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL Database'\"}}}}}]}}}",
"filters": "[]",
- "height": 416.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 2000.00
+ "height": 416.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"8b9f8cf9b63676c90e2e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"9556b8423a37be0b2c16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"0cc34d1c9069b7d76337\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"9e369c30c3a40b0790a5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a274113459a055940d06\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"a3c1681e4eb489770087\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#sql-databases'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"b382808b1c07e3d705a9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"b75a3f47abc09601e6d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.Sql%2Fservers%2Fdatabases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b9621e22226223706e26\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c16464fb35bbd6a0030a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":5034}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"SqlDatabases.sku.name\",\"active\":true}],\"Values\":[{\"queryRef\":\"CountNonNull(SqlDatabases.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.name\"},\"Name\":\"SqlDatabases.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"CountNonNull(SqlDatabases.id)\",\"NativeReferenceName\":\"Resources\"}]},\"columnProperties\":{\"SQL DB.name\":{\"displayName\":\"Name\"},\"SQL DB.resourceGroup\":{\"displayName\":\"Resource group\"},\"SQL DB.location\":{\"displayName\":\"Region\"},\"SQL DB.sku.name\":{\"displayName\":\"SKU\"},\"SQL DB.sku.capacity\":{\"displayName\":\"Capacity\"},\"SQL DB.sku.tier\":{\"displayName\":\"Tier\"},\"SQL DB.properties.status\":{\"displayName\":\"Status\"},\"SQL DB.properties.requestedBackupStorageRedundancy\":{\"displayName\":\"Backup storage redundancy\"},\"SQL DB.properties.licenseType\":{\"displayName\":\"License type\"},\"SqlDatabases.sku.name\":{\"displayName\":\"SKU\"},\"CountNonNull(SqlDatabases.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL Database'\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"cb7d28eb96869c874d87\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d3f8c74dc94353c5550a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"d9fad8457910e68d601e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1000,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"SqlDatabases.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"SqlDatabases.name\",\"NativeReferenceName\":\"name1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"SqlDatabases.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL database'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"0cc34d1c9069b7d76337\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e2026bc30805ce00e51d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"e2214c3d8001893b4093\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"6b63e0426be040c3eb00\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"fc906a87454e7603a2ba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"fffacd925ee1e00020ca\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9621e22226223706e26\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Summary",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "99c64d7a62040165c467",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"01c2d305e5605028a6ab\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"065368538355601b50c0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":11500,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Subscriptions.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Subscriptions.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscriptions'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 11500.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 11500.0
},
{
"config": "{\"name\":\"1259db8f1e0c9bd7b70b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"18d2e7f22134e8ecb31e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":1000,\"width\":568,\"height\":184,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Subscriptions.subscriptionId\"},{\"queryRef\":\"Count(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"subscriptionId\"},\"Name\":\"Subscriptions.subscriptionId\",\"NativeReferenceName\":\"Subscription Id\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Resources.id)\",\"NativeReferenceName\":\"Resources\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Subscriptions.subscriptionId\":{\"displayName\":\"Subscription Id\"},\"Count(Resources.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"236.24589912046713D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"233.44787422750716D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.subscriptionId\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscriptions'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"ad698e4d5886c943438d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Subscriptions\"}},\"Property\":\"subscriptionId\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"1bf1e12f1a9d2354cbaa\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Subscriptions\"}},\"Property\":\"name\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 184.00,
- "width": 568.00,
- "x": 216.00,
- "y": 104.00,
- "z": 1000.00
+ "height": 184.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1a2014990bcdc2105a84\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"28088282e681080eeeba\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Summary\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review the subscriptions, resource groups, and resources deployed across your environment.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"2e0320c0967c1a991508\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"3433752c654800c7309e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"371409ded11a8a5938aa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":7500,\"width\":184,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Resources.location)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"}},\"Function\":2},\"Name\":\"Min(Resources.location)\",\"NativeReferenceName\":\"Count of location\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Regions'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 792.00,
- "y": 8.00,
- "z": 7500.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 7500.0
},
{
"config": "{\"name\":\"38a9972336ba7eb0851a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":2000,\"width\":568,\"height\":184,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Resource types.SingularDisplayName\"},{\"queryRef\":\"Resources.type\"},{\"queryRef\":\"Count(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"ResourceTypes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"},\"Name\":\"Resources.type\",\"NativeReferenceName\":\"Type code\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"SingularDisplayName\"},\"Name\":\"Resource types.SingularDisplayName\",\"NativeReferenceName\":\"Resource type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Resources.id)\",\"NativeReferenceName\":\"Resources\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Resources.type\":{\"displayName\":\"Type code\"},\"Resource types.SingularDisplayName\":{\"displayName\":\"Resource type\"},\"Count(Resources.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"80.47719860875483D\"}}}},\"selector\":{\"metadata\":\"Count(Resources.id)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"230.34444446563967D\"}}}},\"selector\":{\"metadata\":\"Resource types.SingularDisplayName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"230.90030133112407D\"}}}},\"selector\":{\"metadata\":\"Resources.type\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"general\":[{\"properties\":{\"altText\":{\"expr\":{\"Literal\":{\"Value\":\"'Azure Extension are hidden from that list'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource types'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter374e10d98a4e285604f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"ResourceTypes\"}},\"Property\":\"SingularDisplayName\"}},\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 184.00,
- "width": 568.00,
- "x": 216.00,
- "y": 296.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3bb4d98237e6dc0b837a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"3e93c1905736c83ba7e8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#Summary'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"4c0b8e83393478b8d24e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"4c2dcef12247a4d0399a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"4ed410fd687d30d9931b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":56,\"z\":0,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ResourceTypes.SingularDisplayName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ResourceTypes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"SingularDisplayName\"},\"Name\":\"ResourceTypes.SingularDisplayName\",\"NativeReferenceName\":\"SingularDisplayName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ResourceTypes.SingularDisplayName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"ResourceTypes.SingularDisplayName\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource type'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c61bcf9e7477d4552cb7\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"598e3db3008c09da4195\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":10750,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Resources.x_ResourceGroupId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_ResourceGroupId\"}},\"Function\":2},\"Name\":\"Min(Resources.x_ResourceGroupId)\",\"NativeReferenceName\":\"Count of x_ResourceGroupId\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_ResourceGroupId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource groups'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 10750.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 10750.0
},
{
"config": "{\"name\":\"5b3450d5e41732703e97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6c7e482c8bd526d06231\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"72f730822512801810c3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c61bcf9e7477d4552cb7\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"750471d96512993a75cc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"77df08b0229a48be8b07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"7b48741ee0ceeca96017\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"8738bd918020dc5be9e0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"92463bdb02d84705c779\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"96e53429ee0a138ecdce\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":500,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 500.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 500.0
},
{
"config": "{\"name\":\"992e0fef95b3e2357080\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Resources.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"a2e1c77048e26dd0d625\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":6000,\"width\":855.9999999999999,\"height\":224,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.name\"},{\"queryRef\":\"Resources.resourceGroup\"},{\"queryRef\":\"Subscriptions.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Resources.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"name\"},\"Name\":\"Resources.name\",\"NativeReferenceName\":\"Resource\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Resources.resourceGroup\":{\"displayName\":\"Resource group\"},\"Resources.name\":{\"displayName\":\"Resource\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"238.72669591253444D\"}}}},\"selector\":{\"metadata\":\"Resources.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"389.1988858460355D\"}}}},\"selector\":{\"metadata\":\"Resources.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"202.105796984634D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
- "height": 224.00,
- "width": 856.00,
- "x": 216.00,
- "y": 488.00,
- "z": 6000.00
+ "height": 224.0,
+ "width": 856.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"af19adca4e01943cb09c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"b2451e6a63e37379e9bd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"bf66d7ce3d2967d38b34\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":487.99999999999994,\"z\":5000,\"width\":184,\"height\":224,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Region.RegionName\"},{\"queryRef\":\"Count(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Regions\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"Region.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Resources.id)\",\"NativeReferenceName\":\"Resources\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Region.RegionName\":{\"displayName\":\"Region\"},\"Count(Resources.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{},\"selector\":{\"metadata\":\"Count(Resources.id)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"89.63012539669484D\"}}}},\"selector\":{\"metadata\":\"Region.RegionName\"}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"general\":[{\"properties\":{\"altText\":{\"expr\":{\"Literal\":{\"Value\":\"'Azure Extension are hidden from that list'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Regions'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 184.00,
- "x": 1080.00,
- "y": 488.00,
- "z": 5000.00
+ "height": 224.0,
+ "width": 184.0,
+ "x": 1080.0,
+ "y": 488.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"c0e2b93650d7da289ca1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c4c083262327d089840c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"c61bcf9e7477d4552cb7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":184,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"c8dad3758672510ca3ec\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c61bcf9e7477d4552cb7\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"ca826c2a3c7c39446d1d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"cc9c3f4a50bc15371537\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"d8afa1b0228528977a37\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e1517699a46dda0307a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"e7ad9a35baa5a1b7325e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"b2451e6a63e37379e9bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"e85a3ae5a5aa385b06b7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":3000,\"width\":472,\"height\":376,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"azureMap\",\"projections\":{\"Category\":[{\"queryRef\":\"Region.RegionName\",\"active\":true}],\"Size\":[{\"queryRef\":\"CountNonNull(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Regions\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"Region.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"id\"}},\"Function\":5},\"Name\":\"CountNonNull(Resources.id)\",\"NativeReferenceName\":\"Count of id\"}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"mapControls\":[{\"properties\":{\"defaultStyle\":{\"expr\":{\"Literal\":{\"Value\":\"'grayscale_light'\"}}},\"showStylePicker\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showNavigationControls\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showSelectionControl\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"autoZoom\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"zoom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"worldWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"bubbleLayer\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"bubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}},\"minBubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"maxRadius\":{\"expr\":{\"Literal\":{\"Value\":\"23L\"}}},\"bubbleStrokeWidth\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"autoStrokeColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"layerPosition\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"clusteringEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"clusteredBubbleFillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"minZoom\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"maxZoom\":{\"expr\":{\"Literal\":{\"Value\":\"22L\"}}}}}],\"filledMap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"mapTransparency\":{\"expr\":{\"Literal\":{\"Value\":\"40L\"}}}}}],\"heatMapLayer\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"heatMapColorHigh\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}},\"heatMapColorCenter\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF8C00'\"}}}}},\"heatMapUseSize\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"maxZoom\":{\"expr\":{\"Literal\":{\"Value\":\"22L\"}}},\"minZoom\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"barChart\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"showAllDataPoints\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"FillRule\":{\"Input\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"id\"}},\"Function\":5}},\"FillRule\":{\"linearGradient3\":{\"min\":{\"color\":{\"Literal\":{\"Value\":\"'#3393dd'\"}}},\"mid\":{\"color\":{\"Literal\":{\"Value\":\"'#FF9100'\"}}},\"max\":{\"color\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}},\"nullColoringStrategy\":{\"strategy\":{\"Literal\":{\"Value\":\"'asZero'\"}}}}}}}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources by region'\"}}}}}]}}}",
"filters": "[]",
- "height": 376.00,
- "width": 472.00,
- "x": 792.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 376.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f5eaae151a4ba0733807\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"96e53429ee0a138ecdce\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Network security groups",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "b0a8741db2baa88615be",
"ordinal": 6,
"visualContainers": [
{
"config": "{\"name\":\"0038ce067726441deea2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"0bfb58e0b3dea132e5d7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"0f644df97a0786202cea\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"10e8017638aa37700c20\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"20044d6599d15a6135d1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/NetworkSecurityGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2639d8a9bbd845ce505b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"53313e84a2d8a0763028\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"285629ae890615cda662\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.Network%2FNetworkSecurityGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"294d2eabec006e59950a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"38ba64100d7dbd660170\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"53313e84a2d8a0763028\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3f0a73d09d35452422dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"425542d10c00b7d80397\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"46e36a512c34bbca807c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(SqlDatabases.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(SqlDatabases.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL databases'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"5014fc02a5e7aa7d66ec\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"53313e84a2d8a0763028\",\"layouts\":[{\"id\":0,\"position\":{\"height\":375.79258455738835,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\"}",
"height": 375.79,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"5c8cdfa6ca7909a1d5a0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":184,\"z\":750,\"width\":200,\"height\":64,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.sourcePortRange\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourcePortRange\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.sourcePortRange\",\"NativeReferenceName\":\"properties.securityRules.properties.sourcePortRange\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.sourcePortRange\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Source port range'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"53313e84a2d8a0763028\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 184.00,
- "z": 750.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 184.0,
+ "z": 750.0
},
{
"config": "{\"name\":\"68cfd8f6c7993069d734\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#network-security-groups'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"6ec108d0969786316b91\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"7f5d3510cb5c5cc3c0a3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"863285d126b1d5185b92\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"8bdb9cafd76893b7ceda\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8d49277e9d0015a2db66\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"8d8b1de98d2ba3d93646\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"99b1f9ac454ee432c4de\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":488.00000000000006,\"z\":3000,\"width\":1048,\"height\":224,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Network Security Groups.name\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.name\"},{\"queryRef\":\"Network Security Groups.location\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.access\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.direction\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.priority\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.sourceAddressPrefix\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.sourcePortRange\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.destinationPortRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network Security Groups.name\",\"NativeReferenceName\":\"Resource name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.name\"},\"Name\":\"Network Security Groups.properties.securityRules.name\",\"NativeReferenceName\":\"Security rules name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network Security Groups.location\",\"NativeReferenceName\":\"location\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.access\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.access\",\"NativeReferenceName\":\"Access\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.direction\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.direction\",\"NativeReferenceName\":\"Direction\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.priority\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.priority\",\"NativeReferenceName\":\"Priority\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourceAddressPrefix\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.sourceAddressPrefix\",\"NativeReferenceName\":\"Source address prefix\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourcePortRange\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.sourcePortRange\",\"NativeReferenceName\":\"Source port range\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationAddressPrefix\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\",\"NativeReferenceName\":\"Destination address prefix\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationPortRange\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.destinationPortRange\",\"NativeReferenceName\":\"Destination port range\"}]},\"columnProperties\":{\"Network Security Groups.name\":{\"displayName\":\"Resource name\"},\"Network Security Groups.properties.securityRules.name\":{\"displayName\":\"Security rules name\"},\"Network Security Groups.properties.securityRules.properties.access\":{\"displayName\":\"Access\"},\"Network Security Groups.properties.securityRules.properties.direction\":{\"displayName\":\"Direction\"},\"Network Security Groups.properties.securityRules.properties.priority\":{\"displayName\":\"Priority\"},\"Network Security Groups.properties.securityRules.properties.sourceAddressPrefix\":{\"displayName\":\"Source address prefix\"},\"Network Security Groups.properties.securityRules.properties.sourcePortRange\":{\"displayName\":\"Source port range\"},\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\":{\"displayName\":\"Destination address prefix\"},\"Network Security Groups.properties.securityRules.properties.destinationPortRange\":{\"displayName\":\"Destination port range\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"251.28358432225798D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"99D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.properties.sourcePortRange\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"138D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"256.5865129895632D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"114.44774773338557D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.properties.destinationPortRange\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'NSG rules'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
- "height": 224.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 488.00,
- "z": 3000.00
+ "height": 224.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"9e617d33aba86a1db800\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"9f768a8680d308e85505\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Network Security Groups.isWarning\",\"active\":true}],\"Values\":[{\"queryRef\":\"CountNonNull(NetworkSecurityGroups.id)\"}],\"Tooltips\":[{\"queryRef\":\"Divide(Count(NetworkSecurityGroups.id), ScopedEval(Count(NetworkSecurityGroups.id), []))\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"isWarning\"},\"Name\":\"Network Security Groups.isWarning\",\"NativeReferenceName\":\"Warning\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"CountNonNull(NetworkSecurityGroups.id)\",\"NativeReferenceName\":\"Count of id\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"id\"}},\"Function\":2}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"id\"}},\"Function\":2}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Count(NetworkSecurityGroups.id), ScopedEval(Count(NetworkSecurityGroups.id), []))\",\"NativeReferenceName\":\"Percent\"}]},\"columnProperties\":{\"Network Security Groups.isWarning\":{\"displayName\":\"Warning\"},\"CountNonNull(NetworkSecurityGroups.id)\":{\"displayName\":\"Resources\"},\"Divide(Count(NetworkSecurityGroups.id), ScopedEval(Count(NetworkSecurityGroups.id), []))\":{\"displayName\":\"Percent\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Right\":{\"Literal\":{\"Value\":\"'False'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Right\":{\"Literal\":{\"Value\":\"'True'\"}}}}}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Warning state'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 104.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"a8a1970f6234abb37137\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a8ef1625078021b01041\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b6188876b4579c8a9607\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":247.79258455738835,\"z\":625,\"width\":200,\"height\":64,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationAddressPrefix\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationAddressPrefix\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationAddressPrefix\",\"NativeReferenceName\":\"properties.securityRules.properties.destinationAddressPrefix\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.destinationAddressPrefix\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Destination address prefix'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"53313e84a2d8a0763028\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 247.79,
- "z": 625.00
+ "z": 625.0
},
{
"config": "{\"name\":\"c39e791e98cd121820a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"c55e0446e82957e33482\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":8000,\"width\":856,\"height\":184,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Minimize Open Ports: Only open the ports that are absolutely necessary for your application. This reduces the attack surface and potential vulnerabilities.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Use Specific IP Ranges: Restrict access to specific IP addresses or ranges rather than allowing broad access (e.g., avoid using 0.0.0.0/0). This limits exposure to only trusted sources.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Apply the Principle of Least Privilege: Ensure that the permissions granted are the minimum necessary for the task. This applies to both the ports and the users accessing them.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Regularly Review and Update Rules: Periodically review your NSG rules to ensure they are still relevant and necessary. Remove any rules that are no longer needed.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Segment Your Network: Use subnets to logically segment your network. This helps in isolating different parts of your network and applying more granular security controls.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Monitor and Log Traffic: Enable logging and monitoring to keep track of traffic patterns and detect any unusual activity. This helps in identifying potential security threats early.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Use Strong Network Controls: Implement strong network controls and governance to manage your network security elements effectively. This includes using tools to monitor and automate security processes.\"}],\"listType\":\"ordered\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Tips'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"null\"}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}",
- "height": 184.00,
- "width": 856.00,
- "x": 408.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 184.0,
+ "width": 856.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"c5f5b633e676674978d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":311.79258455738835,\"z\":562,\"width\":200,\"height\":64,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationPortRange\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationPortRange\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationPortRange\",\"NativeReferenceName\":\"properties.securityRules.properties.destinationPortRange\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.destinationPortRange\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Destination port range'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"53313e84a2d8a0763028\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 311.79,
- "z": 562.00
+ "z": 562.0
},
{
"config": "{\"name\":\"d42257900a3e80b06908\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1000,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.sourceAddressPrefix\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourceAddressPrefix\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.sourceAddressPrefix\",\"NativeReferenceName\":\"properties.securityRules.properties.sourceAddressPrefix\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.sourceAddressPrefix\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Source address prefix'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"53313e84a2d8a0763028\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"d44ec0fe881b1d1bea0b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"d58bb5b0bbdca552e2c9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"dc7ce060de89334896a7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e1d699dfde6d1e9e4eb5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Network security groups\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review network security groups.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"dc7ce060de89334896a7\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"e83367333d4a74d798a4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"f1ed422e331e408e2399\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":200,\"z\":2000,\"width\":1048,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Network Security Groups.name\"},{\"queryRef\":\"Network Security Groups.location\"},{\"queryRef\":\"Network Security Groups.resourceGroup\"},{\"queryRef\":\"Subscriptions.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network Security Groups.name\",\"NativeReferenceName\":\"Name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Network Security Groups.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network Security Groups.location\",\"NativeReferenceName\":\"Region\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Network Security Groups.name\":{\"displayName\":\"Name\"},\"Network Security Groups.resourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Network Security Groups.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"308.62206736303347D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"267.9859407231168D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"313.07545598871303D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"131.0684410646388D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.location\"}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'False'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'True'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Network Security Groups.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Network security group'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 200.00,
- "z": 2000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 200.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"f99e25266cc00c85c1a9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"fde3ba1a205e05e27a87\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"fde3ba1a205e05e27a87\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "d441a327009c09056946",
"visualContainers": [
{
"config": "{\"name\":\"01e0cec03d320a55b8bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
- "x": 216.00,
- "y": 113.00,
- "z": 12000.00
+ "x": 216.0,
+ "y": 113.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"055a49678007b7d80381\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"12953d15ddcdaed0b00c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":6000,\"width\":272,\"height\":368,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 6000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"1732106a7581763312e9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":10}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"01e0cec03d320a55b8bd\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1aefa6ee4d822063a946\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":19}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"12953d15ddcdaed0b00c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1d8ffddc00065372bd70\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":12000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 11000.00
+ "y": 112.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"2766c21f0981b5ca2c82\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":5000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 5000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"278b621b26a043871160\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":8000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Cloud policy and governance report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" summarizes your Microsoft Cloud governance posture. It offers the standard metrics aligned with the Cloud Adoption Framework to facilitate identifying issues, applying recommendations, and resolving compliance gaps.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The Cloud Adoption Framework Govern methodology provides a structured approach for establishing and optimizing cloud governance in Azure, including areas like regulatory compliance, security, operations, cost, data, resource management, and artificial intelligence (AI).\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \"},{\"value\":\"Cloud policy and governance capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/manage/governance\"},{\"value\":\" in the FinOps Framework. \"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/Governance\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 8000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"2c0ffdfd6ae951dbac0c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":12}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"12953d15ddcdaed0b00c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2d7035cfdd74256990a5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":23}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"2766c21f0981b5ca2c82\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"364f2faa20e60c91c4e4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"3c47ae69ab0354c8712e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"3f9a9ee54a9c929dc300\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"457112847371062198e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":2000,\"width\":96,\"height\":32,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 2000.00
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"49536c8e852ba200e501\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"49aa4b7a2a0e20607ee8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":25}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"bd20f397dad01cce9252\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4b012d79a8176c8c700d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":24}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'f123af631db0926b70d8'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"01e0cec03d320a55b8bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"4f5c068460d3093ae914\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"4f7b6e77ca55e0c45ce6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":11}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting tips\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"bd20f397dad01cce9252\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"51f2efb01c13bb8be797\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":10000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -2029,729 +2029,729 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 10000.00
+ "z": 10000.0
},
{
"config": "{\"name\":\"568fdff441c79b30475c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"59a8d7aedd0e90ad01c8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":1000,\"width\":96,\"height\":32,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 1000.00
+ "y": 488.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"5f0e9d00129dcc8c0313\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"628b76e09c2214073606\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"6ad151e37ce58bd82659\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"70cf1cb9eea96cad705c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":5}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"12953d15ddcdaed0b00c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7301348c20b142d12e94\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"74c6957e1407b5c67de5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":6000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 6000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"74dd97908470e43560ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"78c1190d026b4bca35d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":4000,\"width\":776,\"height\":384,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear RangeStart, RangeEnd, Number of Months date parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 4000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"8285d02086a4973b836b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":4}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'348361728449c47260db'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"bd20f397dad01cce9252\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
- "config": "{\"name\":\"82a571f908d008127558\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"82a571f908d008127558\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.Governance.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.Governance.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 3000.00
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"82bb9a450a42c15e449e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":17}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"01e0cec03d320a55b8bd\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8c0ce9dd051c3b1ced32\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"9617beaa05b3869e05b1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":9}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"2766c21f0981b5ca2c82\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"a2e9850a74c780b87150\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"a5298c9a08840bd85bb9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":26}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"12953d15ddcdaed0b00c\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ad331a601b3e8d054697\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"b16f550ec4612167a362\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":16}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"2766c21f0981b5ca2c82\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
- "config": "{\"name\":\"b54165fc12a7486e807a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"b54165fc12a7486e807a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"b5e2a08550006ba236e7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":2}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2766c21f0981b5ca2c82\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
- "config": "{\"name\":\"b97a63a409cc8bc34280\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'8d23999e8d1041a0850b'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"b97a63a409cc8bc34280\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.Governance.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.Governance.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'8d23999e8d1041a0850b'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"bd20f397dad01cce9252\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":7000,\"width\":272,\"height\":368,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 7000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"d1ccf0b6c3120083d24d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d45bd786a84be71bb99c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":5000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'f123af631db0926b70d8'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d8ffddc00065372bd70\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"d5b951ef0082a0d0800e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"da1db1f50309eed03ed6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":424,\"width\":776,\"x\":40,\"y\":96,\"z\":1000,\"tabOrder\":3}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report uses FinOps hubs with Data Explorer for cost and Azure Resource Graph for resource configuration and recommendation details. If your data is in a storage account and not in Data Explorer, please \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"download storage reports\",\"textStyle\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect to Azure Resource Graph and your Data Explorer cluster:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Deploy FinOps hubs\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you have not deployed FinOps hubs with the Data Explorer cluster option, please do so now. Data Explorer is required for KQL reports. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Once FinOps hubs is deployed, either configure managed exports for your hub instance or manually create new exports in Cost Management to initiate data ingestion. If creating exports manually, remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet β Required to calculate accurate and complete savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Connect to your FinOps hub instance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cluster URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"clusterUri\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report uses DirectQuery for cost data, which means that data is refreshed every time you open a page and not from a scheduled refresh process.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to your account, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the desired tables. You can do this by going to \"},{\"value\":\"https://dataexplorer.azure.com\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://dataexplorer.azure.com/\"},{\"value\":\", connecting to your cluster, and running a \"},{\"value\":\"Costs | limit 100\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" query.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"01e0cec03d320a55b8bd\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e2423480c030ece800e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e9bc2f6170c7d5aa2dcb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"ee7b5fb1edc97c406608\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":9000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Cloud policy and governance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 9000.00
+ "z": 9000.0
},
{
"config": "{\"name\":\"f258fd6e98ecb780ec0d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":18}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"bd20f397dad01cce9252\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"f58aa4b9e38b97083d91\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"f6264e20b3d70d60ec19\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"faaddc4d5628b7995a00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"fb9db2d3611de3a9c34e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":4000,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"fe67129b070ce001cbd7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"5f0e9d00129dcc8c0313\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Virtual machines",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "dca176302754c6dc09e1",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"06548b941d25d739c05c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0ba1fe7031b3254a4d0a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"111df6c084a5e2ccd0a4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"114a7843ae77a116d3e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"14489b6ebb288c514cab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"17d01e64472912099d26\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"17f3218f67344e880088\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":280,\"height\":184,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS type\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count per OS type'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1916641cc14e7292b51d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"2ed039324359bb79721d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"32e51ddda0eeb0306347\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"336b960d171562692096\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"37b09de1ec1229bb019a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":7000,\"width\":472,\"height\":224,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"204.98988921419917D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.98078219913356D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{},\"selector\":{\"metadata\":\"Disks.location\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 472.00,
- "x": 216.00,
- "y": 488.00,
- "z": 7000.00
+ "height": 224.0,
+ "width": 472.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"3a6cadeed7d8b72c1108\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"436849babac70c6296a0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Virtual machines\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Delete, archive, or change SKU for unused disks to reduce waste.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"487154ac2c0b0d05e2e4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(VirtualMachines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(VirtualMachines.id)\",\"NativeReferenceName\":\"Virtual machines\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(VirtualMachines.id)\":{\"displayName\":\"Virtual machines\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machines'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"491dfdcf05a15a9e3a1e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"4bd1ecdd487479180ee5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"afc8cbb47eb3e061660b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"5ea5df1aed8bc7079c2a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1000,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"VirtualMachines.name\",\"NativeReferenceName\":\"name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"VirtualMachines.name\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"afc8cbb47eb3e061660b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"5edf529552ba734e8056\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":184,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Advisor.properties.impactedValue\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"},{\"queryRef\":\"Advisor.properties.extendedProperties.currentSku\"},{\"queryRef\":\"Advisor.properties.extendedProperties.targetSku\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"},\"Name\":\"Advisor.properties.impactedValue\",\"NativeReferenceName\":\"Resource name1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Annual savings\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.currentSku\"},\"Name\":\"Advisor.properties.extendedProperties.currentSku\",\"NativeReferenceName\":\"Current SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.targetSku\"},\"Name\":\"Advisor.properties.extendedProperties.targetSku\",\"NativeReferenceName\":\"Target SKU\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0}}}]},\"columnProperties\":{\"Advisor.properties.impactedValue\":{\"displayName\":\"Resource name\"},\"Sum(Advisor.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Monthly savings\"},\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Annual savings\"},\"Advisor.properties.extendedProperties.currentSku\":{\"displayName\":\"Current SKU\"},\"Advisor.properties.extendedProperties.targetSku\":{\"displayName\":\"Target SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"201D\"}}}},\"selector\":{\"metadata\":\"Advisor.properties.impactedValue\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter1842f9a0958b740359a3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.shortDescription.solution\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 472.00,
- "x": 792.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"656916f0690d3e0972b0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":183.99999999999994,\"z\":0,\"width\":192,\"height\":64,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.hardwareProfile.vmSize\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"VirtualMachines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"hardwareProfile.vmSize\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.hardwareProfile.vmSize\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"afc8cbb47eb3e061660b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 184.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 184.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6cefa8ce63dd0c10acbe\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"8994787b756bc9973664\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"935cf1e4a10405ed3648\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.Governance/featureName/VirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"95463140d513c9e09405\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"a89ce95c3e49a999cc6b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"a9bf9cca9e479d0c8e3d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(PublicIPAddresses.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(PublicIPAddresses.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IPs'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"ade0e5c46cec2ca004d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"aed4a2a48a61152c4908\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 792.00,
- "y": 8.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"afc8cbb47eb3e061660b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":247.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\"}",
- "height": 248.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 248.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"afe164fc881eec94d47b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#virtual-machines'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"b0a041a4e1c2ca300cae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"bce8c65f00164dce2ee2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"bdc6e28a04e4c7789a03\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"c215ae07b70aae89a8ab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2FVirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"c6239e75d30d0414994c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"afc8cbb47eb3e061660b\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"c6246a1139a06039a78e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"d39328ed736242247391\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"df96b606d7e2a1b416c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"111df6c084a5e2ccd0a4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"e7fd84e65704c020aa41\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":487.99999999999994,\"z\":6000,\"width\":568,\"height\":224,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Network interfaces.name\"},{\"queryRef\":\"Network interfaces.location\"},{\"queryRef\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\"},{\"queryRef\":\"Public ip addresses.name\"},{\"queryRef\":\"Public ip addresses.properties.ipAddress\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"n\",\"Entity\":\"NetworkInterfaces\",\"Type\":0},{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network interfaces.name\",\"NativeReferenceName\":\"Network interface\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network interfaces.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.ipConfigurations.properties.privateIPAddress\"},\"Name\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\",\"NativeReferenceName\":\"Private IP address\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"name\"},\"Name\":\"Public ip addresses.name\",\"NativeReferenceName\":\"Public IP name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.ipAddress\"},\"Name\":\"Public ip addresses.properties.ipAddress\",\"NativeReferenceName\":\"Public IP address\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Network interfaces.name\":{\"displayName\":\"Network interface\"},\"Network interfaces.location\":{\"displayName\":\"Region\"},\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\":{\"displayName\":\"Private IP address\"},\"Public ip addresses.name\":{\"displayName\":\"Public IP name\"},\"Public ip addresses.properties.ipAddress\":{\"displayName\":\"Public IP address\"}},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IP addresses'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 568.00,
- "x": 696.00,
- "y": 488.00,
- "z": 6000.00
+ "height": 224.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 488.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e8190de78b0409765b28\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":5000,\"width\":280,\"height\":184,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"Power state\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"Power state\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"optimizeLabelDisplay\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelOverflow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'Auto'\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableTitleDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableBackground\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"backgroundColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0.4}}}}},\"labelContentLayout\":{\"expr\":{\"Literal\":{\"Value\":\"'SingleLine'\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM stopped'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF8C00'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM deallocated'\"}}}}}]}}],\"ribbonBands\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count by state'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 504.00,
- "y": 104.00,
- "z": 5000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 504.0,
+ "y": 104.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e9a3179eb332d735014b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"06548b941d25d739c05c\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"f3eb6c029a3e78a10787\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Virtual Machines.resourceGroup\"},{\"queryRef\":\"Virtual Machines.hardwareProfile.vmSize\"},{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"},{\"queryRef\":\"Virtual Machines.storageProfile.imageReference.sku\"},{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"},{\"queryRef\":\"Virtual Machines.licenseType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Virtual Machines.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"Virtual Machines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"Size\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"State\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.imageReference.sku\"},\"Name\":\"Virtual Machines.storageProfile.imageReference.sku\",\"NativeReferenceName\":\"Image reference SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"licenseType\"},\"Name\":\"Virtual Machines.licenseType\",\"NativeReferenceName\":\"License type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Subscriptions.name\":{\"displayName\":\"Subscription name\"},\"Virtual Machines.resourceGroup\":{\"displayName\":\"Resource group\"},\"Virtual Machines.hardwareProfile.vmSize\":{\"displayName\":\"Size\"},\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"State\"},\"Virtual Machines.storageProfile.imageReference.sku\":{\"displayName\":\"Image reference SKU\"},\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS\"},\"Virtual Machines.licenseType\":{\"displayName\":\"License type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"185.27678387042303D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"198D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.storageProfile.imageReference.sku\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"114D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.powerState.displayStatus\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"191.47622535693588D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"246.17910804947712D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.07462149101514D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.hardwareProfile.vmSize\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine summary'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f982a58bc1866d9eb42c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 9000.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme9191587775659291.json"
-}
\ No newline at end of file
+}
diff --git a/src/power-bi/kql/RateOptimization.Report/report.json b/src/power-bi/kql/RateOptimization.Report/report.json
index 82eb3730c..7a839af25 100644
--- a/src/power-bi/kql/RateOptimization.Report/report.json
+++ b/src/power-bi/kql/RateOptimization.Report/report.json
@@ -178,7 +178,7 @@
"z": 0.00
},
{
- "config": "{\"name\":\"175ac51e81d500064860\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}",
+ "config": "{\"name\":\"175ac51e81d500064860\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Canvas'\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'f38702c42718b677ee9a'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -222,7 +222,7 @@
"z": 7000.00
},
{
- "config": "{\"name\":\"298baa004ce7528d418a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}",
+ "config": "{\"name\":\"298baa004ce7528d418a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'a11dfc016a9d53005469'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -319,7 +319,7 @@
"z": 4000.00
},
{
- "config": "{\"name\":\"3624558318762549e63c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0,\"z\":1000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}",
+ "config": "{\"name\":\"3624558318762549e63c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0,\"z\":1000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'850da8650749804d7db7'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -337,7 +337,7 @@
"z": 2000.00
},
{
- "config": "{\"name\":\"41e9b2ce55a0cb600e88\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_NegotiatedDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_NegotiatedDiscountSavings)\",\"NativeReferenceName\":\"x_NegotiatedDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}",
+ "config": "{\"name\":\"41e9b2ce55a0cb600e88\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_NegotiatedDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_NegotiatedDiscountSavings)\",\"NativeReferenceName\":\"x_NegotiatedDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'6b3c182a0701476572d9'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -364,7 +364,7 @@
"z": 7000.00
},
{
- "config": "{\"name\":\"541aa4609e756bc7c186\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}",
+ "config": "{\"name\":\"541aa4609e756bc7c186\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'9b056cce7358990c1107'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -373,7 +373,7 @@
"z": 0.00
},
{
- "config": "{\"name\":\"66d5082443608a162bb6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}",
+ "config": "{\"name\":\"66d5082443608a162bb6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'850da8650749804d7db7'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"03366d7e3aecdd77e32b\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -382,7 +382,7 @@
"z": 2000.00
},
{
- "config": "{\"name\":\"6f31359f7080110d9d85\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"x_EffectiveSavingsRate\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective Savings Rate (ESR)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}",
+ "config": "{\"name\":\"6f31359f7080110d9d85\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"x_EffectiveSavingsRate\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'705dba682cbaaaa450e5'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective Savings Rate (ESR)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -400,7 +400,7 @@
"z": 8000.00
},
{
- "config": "{\"name\":\"7310a0068550bbe55aa7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"fadf7741149c40720430\"}",
+ "config": "{\"name\":\"7310a0068550bbe55aa7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'bf107809b34199521151'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"fadf7741149c40720430\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -409,7 +409,7 @@
"z": 0.00
},
{
- "config": "{\"name\":\"7316cd38d4390bdeee9c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.451953019367096,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}",
+ "config": "{\"name\":\"7316cd38d4390bdeee9c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.451953019367096,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'850da8650749804d7db7'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"858dce304b930b7248b8\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -515,8 +515,8 @@
"z": 3000.00
},
{
- "config": "{\"name\":\"c6448be3900076ce8ca1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"fadf7741149c40720430\"}",
- "filters": "[{\"name\":\"Filter31f4ad67211065e055c6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "config": "{\"name\":\"c6448be3900076ce8ca1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'f38702c42718b677ee9a'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"fadf7741149c40720430\"}",
+ "filters": "[]",
"height": 128.00,
"width": 280.00,
"x": 0.00,
@@ -623,7 +623,7 @@
"z": 6000.00
},
{
- "config": "{\"name\":\"e1dfe20bdb34c35115d2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0,\"z\":2000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}",
+ "config": "{\"name\":\"e1dfe20bdb34c35115d2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0,\"z\":2000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'9b056cce7358990c1107'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"29e10622195e2a00530b\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -641,8 +641,8 @@
"z": 4000.00
},
{
- "config": "{\"name\":\"f3954472e60bb8e068eb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.02521273199749885,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"fadf7741149c40720430\"}",
- "filters": "[{\"name\":\"Filter9772ed304b7730b301c3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "config": "{\"name\":\"f3954472e60bb8e068eb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.02521273199749885,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'a11dfc016a9d53005469'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"fadf7741149c40720430\"}",
+ "filters": "[]",
"height": 128.00,
"width": 280.00,
"x": 288.00,
@@ -703,7 +703,7 @@
"filters": "[]",
"height": 720.00,
"name": "1f61f5df52d086890c04",
- "ordinal": 11,
+ "ordinal": 18,
"visualContainers": [
{
"config": "{\"name\":\"376b2f456dc1d73d83c9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":117,\"z\":6000,\"height\":94,\"width\":929,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Reserved instances can provide a significant discount over on-demand prices. With reserved instances, you can pre-purchase the base costs for your virtual machines. Discounts will automatically apply to new or existing VMs that have the same size and region as your reserved instance. We analyzed your usage over selected Term, look-back period and recommend money-saving reserved instances. \",\"textStyle\":{\"fontSize\":\"14px\",\"color\":\"#292827\"}},{\"value\":\"Learn more\",\"textStyle\":{\"fontSize\":\"14px\"},\"url\":\"https://aka.ms/rirecommendations\"}]}]}}]}}}",
@@ -1216,6 +1216,90 @@
],
"width": 1280.00
},
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: NegotiatedDiscountSavings",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 80.00,
+ "name": "6b3c182a0701476572d9",
+ "ordinal": 14,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"9482240e3012299b9327\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":80,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Negotiated savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" is the amount saved after negotiated discounts (e.g., ACD, MACC, EDP) were applied.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 80.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
+ },
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: ESR",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 160.00,
+ "name": "705dba682cbaaaa450e5",
+ "ordinal": 17,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"811b39d800439ea3ce4c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":160,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Effective Savings Rate (ESR)\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" measures the return on investment from negotiated discounts (e.g., ACD, MACC, EDP) \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"and\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (e.g., reservations, savings plans). ESR is a percentage of total savings based on list cost without any discounts.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 160.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
+ },
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: ListCost",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 144.00,
+ "name": "850da8650749804d7db7",
+ "ordinal": 11,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"9cd5a2a71996803dd091\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":144,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"List cost\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" is the amount you would have paid if you had \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"no\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" negotiated discounts (e.g., ACD, MACC, EDP) and \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"no \",\"textStyle\":{\"fontWeight\":\"bold\",\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"commitment discounts (e.g., reservations, savings plans). \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use list cost to calculate negotiated savings.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 144.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
+ },
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: TotalSavings",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 104.00,
+ "name": "9b056cce7358990c1107",
+ "ordinal": 16,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"513801b390ee6275d3b3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":104,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Total savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" is the amount saved after negotiated discounts (e.g., ACD, MACC, EDP) \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"and\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (e.g., reservations, savings plans).\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 104.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
+ },
{
"config": "{}",
"displayName": "Get started",
@@ -1412,7 +1496,7 @@
"z": 14000.00
},
{
- "config": "{\"name\":\"60280221a64c0eb4d3bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":5000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Rate optimization report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides insights into any workload optimization opportunities, like reservations, savings plans, and Azure Hybrid Benefit. This reports uses effective cost, which amortizes and breaks reservation and savings plan purchases down and allocates costs out to the resources that received the benefit. Effective cost will not match your invoice.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Rate optimization capability\",\"textStyle\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/optimize/rates\"},{\"value\":\" in the FinOps Framework.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/RateOptimization\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
+ "config": "{\"name\":\"60280221a64c0eb4d3bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":5000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Rate optimization report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides insights into any rate optimization opportunities, like reservations, savings plans, and Azure Hybrid Benefit. This reports uses effective cost, which amortizes and breaks reservation and savings plan purchases down and allocates costs out to the resources that received the benefit. Effective cost will not match your invoice.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Rate optimization capability\",\"textStyle\":{\"fontSize\":\"13.3333px\",\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/optimize/rates\"},{\"value\":\" in the FinOps Framework.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/RateOptimization\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
"height": 176.00,
"width": 848.00,
@@ -1714,7 +1798,7 @@
"z": 1000.00
},
{
- "config": "{\"name\":\"fa65b655d64e3524026b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":1500,\"width\":240,\"height\":32,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-09 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"fa65b655d64e3524026b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":1500,\"width\":240,\"height\":32,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
"height": 32.00,
"width": 240.00,
@@ -4308,7 +4392,7 @@
"z": 0.00
},
{
- "config": "{\"name\":\"b301359b2654718781f7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/CostSummary#prices'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"b9cd244994ebbe2de787\"}",
+ "config": "{\"name\":\"b301359b2654718781f7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/RateOptimization#prices'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"b9cd244994ebbe2de787\"}",
"filters": "[]",
"height": 40.00,
"width": 40.00,
@@ -5100,6 +5184,69 @@
}
],
"width": 1280.00
+ },
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: EffectiveCost",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 176.00,
+ "name": "a11dfc016a9d53005469",
+ "ordinal": 13,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"810b7b60a71eb9562362\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":176,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Effective cost\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" is the amount charged \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"after\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" negotiated discounts and commitment discounts (e.g., reservations, savings plans) are applied to all charges. Effective cost amortizes commitment discount purchases over the lifetime of the term.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use effective cost for granular chargeback.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 176.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
+ },
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: CommitmentDiscountSavings",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 256.00,
+ "name": "bf107809b34199521151",
+ "ordinal": 15,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"911c99c30d4cdd8aba05\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":256,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment discount savings\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" is the amount saved after commitment discounts (e.g., reservations, savings plans) were applied to negotiated prices. \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"βΉοΈ \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"Important:\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" Commitment discount pricing is based on list cost but this report shows commitment discount savings compared to contracted cost (after negotiated discounts). Your savings percent may be less than what is publicly documented due to your negotiated discounts.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 256.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
+ },
+ {
+ "config": "{\"objects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]},\"visibility\":1,\"type\":1}",
+ "displayName": "Tooltip: ContractedCost",
+ "displayOption": 3,
+ "filters": "[]",
+ "height": 160.00,
+ "name": "f38702c42718b677ee9a",
+ "ordinal": 12,
+ "visualContainers": [
+ {
+ "config": "{\"name\":\"125596a7857940ceeea3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":320,\"height\":160,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Contracted cost\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" is the amount you would have paid \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"with\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" negotiated discounts (e.g., ACD, MACC, EDP) but \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\"without\",\"textStyle\":{\"fontStyle\":\"italic\",\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}},{\"value\":\" commitment discounts (e.g., reservations, savings plans). \",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use contracted cost to calculate commitment discount savings.\",\"textStyle\":{\"fontSize\":\"11pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
+ "filters": "[]",
+ "height": 160.00,
+ "width": 320.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
+ }
+ ],
+ "width": 320.00
}
],
"theme": "Microsoft_FinOps_light_theme23216430052051784.json"
diff --git a/src/power-bi/kql/WorkloadOptimization.Report/report.json b/src/power-bi/kql/WorkloadOptimization.Report/report.json
index 5b6e07e0e..17872e766 100644
--- a/src/power-bi/kql/WorkloadOptimization.Report/report.json
+++ b/src/power-bi/kql/WorkloadOptimization.Report/report.json
@@ -109,825 +109,825 @@
"displayName": "Unattached disks",
"displayOption": 1,
"filters": "[{\"name\":\"b16f3941051eb8c4adae\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskState\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unattached'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "1b65e65e85a5204b0700",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"046d064239a54013c419\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":12034}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d0f7ca1c0e2ea1872800\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"07a4f4d7ca02b07729e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":2000,\"width\":472,\"height\":88,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}],\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Sum(Disks.properties.diskSizeGB)\":{\"displayName\":\"Disk size GB\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Premium_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'StandardSSD_LRS'\"}}}}}]}}],\"legend\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sum of disk size by SKU (GB)'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 472.00,
- "x": 792.00,
- "y": 8.00,
- "z": 2000.00
+ "height": 88.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0e78e1a6587c5e0c03a2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"110de92c54cd1a9462e0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"198493d00c767d142a2c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1ea66080be238332c630\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"1ee95dd288ba3c95dace\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1500,\"width\":200,\"height\":64,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.sku.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKU'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d0f7ca1c0e2ea1872800\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1500.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"20ba94e06c75edee8aa4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":6000,\"width\":1048,\"height\":280,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Disks.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#999900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'UnusedSavingsPlan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"21f0bcaf9407a07bb4a7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3500,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3500.0
},
{
"config": "{\"name\":\"2dfd5865c60aeee2e302\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2fd7aa69eda28947e37e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"35e0457f8cd9e098cb61\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":7500,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Disks.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Disks.id)\",\"NativeReferenceName\":\"Unattached disks\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(Disks.id)\":{\"displayName\":\"Unattached disks\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unattached disks'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 7500.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 7500.0
},
{
"config": "{\"name\":\"38865cd18d662843002b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.WorkloadOptimization/featureName/UnattachedDisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3a6ac91218ed0d5e438d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"3cc6dd079eeee70347ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"51afabc3e2930e0ceddc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"52d27d69c294ba00a01a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"57099fa62d00ecad0509\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"585ca376d4075ba46570\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3750,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2Fdisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3750.0
},
{
"config": "{\"name\":\"5e0a223441500bade995\",\"layouts\":[{\"id\":0,\"position\":{\"x\":224,\"y\":392,\"z\":3000,\"width\":1040,\"height\":312,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Disks.resourceGroup\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"},{\"queryRef\":\"Costs.ChargePeriod\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Disks.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriod\"},\"Name\":\"Costs.ChargePeriod\",\"NativeReferenceName\":\"ChargePeriod\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Disks.resourceGroup\":{\"displayName\":\"Resource group\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"441.43021990177425D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"104.55223880597015D\"}}}},\"selector\":{\"metadata\":\"Disks.location\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.48974304329354D\"}}}},\"selector\":{\"metadata\":\"Disks.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"86.20722391050697D\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"83.800630562379D\"}}}},\"selector\":{\"metadata\":\"Disks.diskType\"}}],\"columnFormatting\":[{\"properties\":{\"styleTotal\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}}],\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"grid\":[{\"properties\":{\"gridVertical\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Middle'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'ActiveSAS'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Attached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Reserved'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolMedium'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Unattached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Disks.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 312.00,
- "width": 1040.00,
- "x": 224.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 312.0,
+ "width": 1040.0,
+ "x": 224.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"6a176e5d6492447c6ede\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"712822f014500b670c3e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"71655db002e2c25a9640\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7ec11521e829d7b90d08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6500,\"width\":184,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6500.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6500.0
},
{
"config": "{\"name\":\"81eecf0d4604180d4025\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"836c493ec090ee7b6cd4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"851678772ac983b88c3a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"854b92be08661403b946\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"8b5308895093785bbb97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/WorkloadOptimization#UnattachedDisks'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"94d63fe02c15c00194ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"a7db21a7c0d5028eaece\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":12015}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d0f7ca1c0e2ea1872800\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"c2f200377b23c991d5ea\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c7f5ecea890a13cdd1e3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"d0f7ca1c0e2ea1872800\",\"layouts\":[{\"id\":0,\"position\":{\"height\":184,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"d4a9e77f309bcedc3b3d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"e69c29acd5b91945de00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Unattached disks\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Delete, archive, or change SKU for unused disks to reduce waste.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e761d9fa62154946c067\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"2fd7aa69eda28947e37e\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ebac965d3361b18cb266\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a176e5d6492447c6ede\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Recommendations",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "38074e77431ec2463ec4",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"0c1bda1203cc90b29677\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"0f2c8814b936cc2565ed\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.84504504504508,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.term\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.term\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.term\",\"NativeReferenceName\":\"Term\"}]},\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.term\":{\"displayName\":\"Term\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}},\"filter\":{\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.term\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Term'\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"962df843c3e2697499a7\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 168.85,
- "z": 0.00
+ "z": 0.0
},
{
"config": "{\"name\":\"198e9a4d19b13e46c9a3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":2000,\"width\":1048,\"height\":600,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Advisor.properties.impact\"},{\"queryRef\":\"Advisor.properties.shortDescription.problem\"},{\"queryRef\":\"Advisor.properties.impactedValue\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"},{\"queryRef\":\"Advisor.properties.lastUpdated\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impact\"},\"Name\":\"Advisor.properties.impact\",\"NativeReferenceName\":\"Impact\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.problem\"},\"Name\":\"Advisor.properties.shortDescription.problem\",\"NativeReferenceName\":\"Description\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"}},\"Function\":2},\"Name\":\"Advisor.properties.impactedValue\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Yearly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.lastUpdated\"}},\"Function\":4},\"Name\":\"Advisor.properties.lastUpdated\",\"NativeReferenceName\":\"Latest properties.lastUpdated\"}]},\"columnProperties\":{\"Advisor.properties.impact\":{\"displayName\":\"Impact\"},\"Advisor.properties.shortDescription.problem\":{\"displayName\":\"Description\"},\"Advisor.properties.impactedValue\":{\"displayName\":\"Resources\"},\"Sum(Advisor.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Monthly savings\"},\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Yearly savings\"},\"Advisor.properties.lastUpdated\":{\"displayName\":\"Last updated\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"556.3460581851277D\"}}}},\"selector\":{\"metadata\":\"Advisor.properties.shortDescription.problem\"}}],\"columnHeaders\":[{\"properties\":{}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Low'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'FlagGreenPatternFill'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Medium'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'FlagMedium'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'High'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'FlagLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Advisor.properties.impact\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}}}}]}}}",
"filters": "[]",
- "height": 600.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 600.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1b6b81253ba095292c84\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.84504504504503,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.lookbackPeriod\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\",\"NativeReferenceName\":\"Lookback period\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\":{\"displayName\":\"Lookback period\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Lookback period'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"962df843c3e2697499a7\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 112.85,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"2264aab1bbcd9a416b39\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":280,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Advisor.properties.impact\"}],\"Y\":[{\"queryRef\":\"CountNonNull(Advisor.properties.shortDescription.solution)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impact\"},\"Name\":\"Advisor.properties.impact\",\"NativeReferenceName\":\"properties.impact\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}},\"Function\":2},\"Name\":\"CountNonNull(Advisor.properties.shortDescription.solution)\",\"NativeReferenceName\":\"Count of properties.shortDescription.solution1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'BottomCenter'\"}}},\"showGradientLegend\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"detailContentType\":{\"expr\":{\"Literal\":{\"Value\":\"'Percent of total'\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableTitleDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleFontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"optimizeLabelDisplay\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelOverflow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"dynamicLabelDetail\":{\"expr\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.shortDescription.solution\"}},\"Function\":2}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"highlightMatching\":1}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Right\":{\"Literal\":{\"Value\":\"'High'\"}}}}}]}},{\"properties\":{\"borderShow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF7300'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Right\":{\"Literal\":{\"Value\":\"'Medium'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Right\":{\"Literal\":{\"Value\":\"'Low'\"}}}}}]}}],\"categoryAxis\":[{\"properties\":{\"switchAxisPosition\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Impact'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 280.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 280.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"2efa4d0e56333692a21a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Advisor.properties.impactedValue)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"}},\"Function\":2},\"Name\":\"Min(Advisor.properties.impactedValue)\",\"NativeReferenceName\":\"Count of properties.impactedValue\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Impacted resources'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}]}}}",
"filters": "[{\"name\":\"e53c9899763de5b904c9\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.resourceMetadata.resourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":0}]",
- "height": 88.00,
- "width": 184.00,
- "x": 696.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 696.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"32473f9c270d9b0b1dd3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"3448aa2080a007515254\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"37f596036022ceb4c740\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"38a777751de45dce4d44\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"3de30b80ce2205c01754\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(AdvisorRecommendations.properties.recommendationTypeId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.recommendationTypeId\"}},\"Function\":2},\"Name\":\"Min(AdvisorRecommendations.properties.recommendationTypeId)\",\"NativeReferenceName\":\"Count of properties.recommendationTypeId1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.recommendationTypeId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Recommendations'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"3fea4aa8b9c16d841096\",\"layouts\":[{\"id\":0,\"position\":{\"x\":888,\"y\":8,\"z\":3000,\"width\":280,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Sum of properties.extendedProperties.annualSavingsAmount\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Potential yearly savings (list)'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[{\"name\":\"e53c9899763de5b904c9\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.resourceMetadata.resourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":0}]",
- "height": 88.00,
- "width": 280.00,
- "x": 888.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 88.0,
+ "width": 280.0,
+ "x": 888.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"465cfda1a07a8b907c76\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":592,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/Microsoft_Azure_Expert/AdvisorMenuBlade/~/Cost/category/Cost'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 592.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 592.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"5c0b22d2806027c10634\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"5e45c7ca62dc2b840372\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"5ec0b5c6ca79084700a9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"73b990f257954d256c7c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"962df843c3e2697499a7\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"7bd58342841b08c53364\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"7e499f9070571911080b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"84265f7534052eb1abb4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":56,\"z\":2000,\"width\":200,\"height\":56,\"tabOrder\":17001}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"AdvisorRecommendations.properties.impact\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impact\"},\"Name\":\"AdvisorRecommendations.properties.impact\",\"NativeReferenceName\":\"Impact\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"AdvisorRecommendations.properties.impact\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.impact\":{\"displayName\":\"Impact\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Impact'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"962df843c3e2697499a7\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"87e0d722a02d8a4b6da8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"8c13302586cd388c015a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"962df843c3e2697499a7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":224.84504504504508,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\"}",
"height": 224.85,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"a7783df3ce0ba22c95ed\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"ab68beb1d5939a2ad0d4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"adfdc07ca8ca8c66b5de\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b37651cc497605d61ad6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"bea2a15bd00c268b36cb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c76ca9ed62a4c7a5910d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"ce21da52417bd20e3b60\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Advisor cost recommendations\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Identify idle and underutilized resources and optimize costs.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"db1b2f62369ec870e5e0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"de20a82f0e18283db45b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"df49cfcb05d195098e30\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"e7ec6920be165b0eebe0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e9a217ed216024379cc7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ea15740f7055d1d9c3b2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/WorkloadOptimization#recommendations'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"f459007d9abb3352e0d5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"7bd58342841b08c53364\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"fa192f1593b906983e70\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.WorkloadOptimization/featureName/Recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5c0b22d2806027c10634\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "68b4e430c81cc04008ad",
"visualContainers": [
{
"config": "{\"name\":\"0091bb6030b3feb7f21e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"02bc2b96e6d8e8317e6b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"04bab2290741bf18d2ba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"08ce37dca7f1ec25cf34\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":5000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'bf9700f850ff7b51baa6'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"117425ca6e59dad9089c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"81e76f6b427626de7fed\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"198c62f261010e9a2031\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":6000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 6000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"248e0b0515c54d9dd540\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"266d27780c9ef731e738\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"2788b696f63d4af128c4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"28385ebc48e23eb480ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'0338b9337a644ca11e3b'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"81e76f6b427626de7fed\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"2db9d494be01f5d72c02\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":6000,\"width\":272,\"height\":368,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 6000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"30b5bad7cbd392bb6e54\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting tips\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"81e76f6b427626de7fed\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"3d39b9d6c5d3fad34f0b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"2db9d494be01f5d72c02\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3fcd8c2f36e3af8580c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":10000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -936,781 +936,781 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 10000.00
+ "z": 10000.0
},
{
"config": "{\"name\":\"412a45c43add03a785a2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"4a4dd826f3118f0cc0da\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9277735d3fa47c4a194\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"5179fa1b65706fc27bd3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"52f1bc9e8d1699c91a10\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"55642c45036461b52537\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"64aea501de6a54eccb86\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"ff0e7ae1d9d11589bbd8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"75c670deb043826b5116\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"7673bcc2f811097f4a56\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"7c5ed4b7f28bd45e2f3a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":12000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 11000.00
+ "y": 112.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"7e536659318f0aaddb2f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":8000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Workload optimization report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides insights into resource utilization and efficiency opportunities based on historical usage patterns. Use this report to determine if resources can be scaled down or even shutdown during off-peak hours to minimize wasteful usage and spending. Also consider cheaper alternatives when available and ensure all workloads have some direct or indirect link to business value to avoid unnecessary usage and costs that don't contribute to the mission.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \"},{\"value\":\"Workload optimization capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/optimize/workloads\"},{\"value\":\" in the FinOps Framework.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/WorkloadOptimization\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 8000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"7ee25e754d6b6dfe782d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.WorkloadOptimization/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"81e76f6b427626de7fed\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":7000,\"width\":272,\"height\":368,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 7000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"847e83e18fbbe5a9a3f4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":424,\"width\":776,\"x\":40,\"y\":96,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report uses FinOps hubs with Data Explorer for cost and Azure Resource Graph for resource configuration and recommendation details. If your data is in a storage account and not in Data Explorer, please \"},{\"value\":\"download storage reports\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://github.com/microsoft/finops-toolkit/releases/latest/download/PowerBI-storage.zip\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect to Azure Resource Graph and your Data Explorer cluster:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Deploy FinOps hubs\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you have not deployed FinOps hubs with the Data Explorer cluster option, please do so now. Data Explorer is required for KQL reports. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Once FinOps hubs is deployed, either configure managed exports for your hub instance or manually create new exports in Cost Management to initiate data ingestion. If creating exports manually, remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet β Required to calculate accurate and complete savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Connect to your FinOps hub instance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cluster URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"clusterUri\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report uses DirectQuery for cost data, which means that data is refreshed every time you open a page and not from a scheduled refresh process.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to your account, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the desired tables. You can do this by going to \"},{\"value\":\"dataexplorer.azure.com\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://dataexplorer.azure.com/\"},{\"value\":\", connecting to your cluster, and running a \"},{\"value\":\"Costs | limit 100\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" query.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9277735d3fa47c4a194\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"86cf9925712386c02dca\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":1000,\"width\":96,\"height\":32,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 1000.00
+ "y": 488.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"9356e35b7683896d0b52\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"96fa031e3fda6bec5788\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9277735d3fa47c4a194\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"9d59b3501ea083e854af\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"9d946176eef8aba2cbec\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"ff0e7ae1d9d11589bbd8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"a071d96852205b19ef37\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":4000,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"a0f589f1a9e5e2ce472b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":2000,\"width\":96,\"height\":32,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 2000.00
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ad009229dad590a70fe2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ff0e7ae1d9d11589bbd8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"ad1c8cdca0e40156221f\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"ff0e7ae1d9d11589bbd8\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ad5e62ecf686180722f1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":9000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Workload optimization\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 9000.00
+ "z": 9000.0
},
{
"config": "{\"name\":\"b016f6231feda619aa88\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
- "config": "{\"name\":\"baf9d1fe7f9086884005\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"baf9d1fe7f9086884005\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· KQL\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"c06195f26eeddece4e8e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"cda5ff1f89ee411a38cd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"2db9d494be01f5d72c02\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d82f8f3109066b838c12\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"d858d2f5093f5c8df615\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"daa73b99ed4f89d03383\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"2db9d494be01f5d72c02\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"dd95d21cac00296b6af8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"df6f11564012c5014dcd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
- "config": "{\"name\":\"e222c8e7afd357d1db37\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'9882785c36c2ec058d8d'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"e222c8e7afd357d1db37\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.WorkloadOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.WorkloadOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'9882785c36c2ec058d8d'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e25566c2b0ad3cc1c806\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e2e6be635a23f9e95d43\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"02bc2b96e6d8e8317e6b\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e301b0f679947856e27e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"2db9d494be01f5d72c02\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"e7bdd81ea0a87d2af271\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'bf9700f850ff7b51baa6'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9277735d3fa47c4a194\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e9277735d3fa47c4a194\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
- "x": 216.00,
- "y": 113.00,
- "z": 12000.00
+ "x": 216.0,
+ "y": 113.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"eae328b0e4c574c69efe\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"81e76f6b427626de7fed\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"f9303287409926d991ca\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":4000,\"width\":776,\"height\":384,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear RangeStart, RangeEnd, Number of Months date parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 4000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"ff0e7ae1d9d11589bbd8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":5000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 5000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 5000.0
},
{
- "config": "{\"name\":\"ff4f34ae4413b2ab1c80\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"ff4f34ae4413b2ab1c80\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.WorkloadOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.WorkloadOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"7c5ed4b7f28bd45e2f3a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 3000.00
+ "y": 488.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{\"visibility\":1}",
"displayName": "Virtual machines",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "dca176302754c6dc09e1",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"043cf59c8eada51e3e05\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":12000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 12000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"21c6f0e143dc05840474\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"2bc182302802d00833ca\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(PublicIPAddresses.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(PublicIPAddresses.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IPs'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"3631e092bd806b1add15\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"36bc0a2050403aee8e7b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":184,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Advisor.properties.impactedValue\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"},{\"queryRef\":\"Advisor.properties.extendedProperties.currentSku\"},{\"queryRef\":\"Advisor.properties.extendedProperties.targetSku\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"},\"Name\":\"Advisor.properties.impactedValue\",\"NativeReferenceName\":\"Resource name1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Annual savings\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.currentSku\"},\"Name\":\"Advisor.properties.extendedProperties.currentSku\",\"NativeReferenceName\":\"Current SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.targetSku\"},\"Name\":\"Advisor.properties.extendedProperties.targetSku\",\"NativeReferenceName\":\"Target SKU\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0}}}]},\"columnProperties\":{\"Advisor.properties.impactedValue\":{\"displayName\":\"Resource name\"},\"Sum(Advisor.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Monthly savings\"},\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Annual savings\"},\"Advisor.properties.extendedProperties.currentSku\":{\"displayName\":\"Current SKU\"},\"Advisor.properties.extendedProperties.targetSku\":{\"displayName\":\"Target SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"201D\"}}}},\"selector\":{\"metadata\":\"Advisor.properties.impactedValue\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter1842f9a0958b740359a3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.shortDescription.solution\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 472.00,
- "x": 792.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"380ad86eda4c28171b39\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"3a920645384cb72de810\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":500,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 500.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 500.0
},
{
"config": "{\"name\":\"3b7dbb34aa0890e6b666\",\"layouts\":[{\"id\":0,\"position\":{\"height\":247.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\"}",
- "height": 248.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 248.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"3e62acff49e761e284d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"47245c1945542de4c204\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4b48f595139926d52d9e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"4ba8922370be12319547\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.WorkloadOptimization/featureName/VirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"4bf48adca2ba96c02667\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1000,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"VirtualMachines.name\",\"NativeReferenceName\":\"name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"VirtualMachines.name\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3b7dbb34aa0890e6b666\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"547f34e0ea83c6c4e0ba\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3b7dbb34aa0890e6b666\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"58abc78035768d986003\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Virtual Machines.resourceGroup\"},{\"queryRef\":\"Virtual Machines.hardwareProfile.vmSize\"},{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"},{\"queryRef\":\"Virtual Machines.storageProfile.imageReference.sku\"},{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"},{\"queryRef\":\"Virtual Machines.licenseType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Virtual Machines.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"Virtual Machines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"Size\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"State\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.imageReference.sku\"},\"Name\":\"Virtual Machines.storageProfile.imageReference.sku\",\"NativeReferenceName\":\"Image reference SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"licenseType\"},\"Name\":\"Virtual Machines.licenseType\",\"NativeReferenceName\":\"License type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Subscriptions.name\":{\"displayName\":\"Subscription name\"},\"Virtual Machines.resourceGroup\":{\"displayName\":\"Resource group\"},\"Virtual Machines.hardwareProfile.vmSize\":{\"displayName\":\"Size\"},\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"State\"},\"Virtual Machines.storageProfile.imageReference.sku\":{\"displayName\":\"Image reference SKU\"},\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS\"},\"Virtual Machines.licenseType\":{\"displayName\":\"License type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"185.27678387042303D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"198D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.storageProfile.imageReference.sku\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"114D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.powerState.displayStatus\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"191.47622535693588D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"246.17910804947712D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.07462149101514D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.hardwareProfile.vmSize\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine summary'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"59e58a6484ea270e41d1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":14000,\"width\":184,\"height\":88,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 792.00,
- "y": 8.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"5d95ea37a63b91232a6a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"63b6239a56b51376d182\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":13000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(VirtualMachines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(VirtualMachines.id)\",\"NativeReferenceName\":\"Virtual machines\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(VirtualMachines.id)\":{\"displayName\":\"Virtual machines\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machines'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 13000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"65453ed63235803e4ebe\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"73dfe7c73b734b9e295e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"7584110342a2a93e0111\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"7da0a73216e9d6214a2d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"84b5d7c51ad11d803d31\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":183.99999999999994,\"z\":0,\"width\":192,\"height\":64,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.hardwareProfile.vmSize\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"VirtualMachines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"hardwareProfile.vmSize\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.hardwareProfile.vmSize\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3b7dbb34aa0890e6b666\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 184.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 184.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"8ed808d1db3781e690ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"9081fe701b857d8d0001\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2FVirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"97567922554a0268a3e7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":487.99999999999994,\"z\":8000,\"width\":568,\"height\":224,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Network interfaces.name\"},{\"queryRef\":\"Network interfaces.location\"},{\"queryRef\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\"},{\"queryRef\":\"Public ip addresses.name\"},{\"queryRef\":\"Public ip addresses.properties.ipAddress\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"n\",\"Entity\":\"NetworkInterfaces\",\"Type\":0},{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network interfaces.name\",\"NativeReferenceName\":\"Network interface\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network interfaces.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.ipConfigurations.properties.privateIPAddress\"},\"Name\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\",\"NativeReferenceName\":\"Private IP address\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"name\"},\"Name\":\"Public ip addresses.name\",\"NativeReferenceName\":\"Public IP name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.ipAddress\"},\"Name\":\"Public ip addresses.properties.ipAddress\",\"NativeReferenceName\":\"Public IP address\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Network interfaces.name\":{\"displayName\":\"Network interface\"},\"Network interfaces.location\":{\"displayName\":\"Region\"},\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\":{\"displayName\":\"Private IP address\"},\"Public ip addresses.name\":{\"displayName\":\"Public IP name\"},\"Public ip addresses.properties.ipAddress\":{\"displayName\":\"Public IP address\"}},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IP addresses'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 568.00,
- "x": 696.00,
- "y": 488.00,
- "z": 8000.00
+ "height": 224.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 488.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"a036188fa6b87b08dd2c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/WorkloadOptimization#virtual-machines'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"a57db9948a5bd48be343\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":280,\"height\":184,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS type\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count per OS type'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"a75d143e613400d0b04d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":6000,\"width\":280,\"height\":184,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"Power state\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"Power state\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"optimizeLabelDisplay\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelOverflow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'Auto'\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableTitleDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableBackground\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"backgroundColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0.4}}}}},\"labelContentLayout\":{\"expr\":{\"Literal\":{\"Value\":\"'SingleLine'\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM stopped'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF8C00'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM deallocated'\"}}}}}]}}],\"ribbonBands\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count by state'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 504.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 504.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"af55093184039a11c08d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"b04c2e55076e9e26952e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"b0e6be330c95e1c98883\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"b0f30324c4397903e8d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":9000,\"width\":472,\"height\":224,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"204.98988921419917D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.98078219913356D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{},\"selector\":{\"metadata\":\"Disks.location\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 472.00,
- "x": 216.00,
- "y": 488.00,
- "z": 9000.00
+ "height": 224.0,
+ "width": 472.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"b27c6f409e5a4024e035\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"b36b007e079440966093\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Virtual machines\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Delete, archive, or change SKU for unused disks to reduce waste.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"b9568fda0cd24706cbac\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c5b36d360cc7b64000d2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c92916716dab032bbcc1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3a920645384cb72de810\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"d2881cbc08538c461a42\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"e5ca4d12468dc84be9a8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"e6afadc6098e70657301\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ef32d4e30eca6b335e52\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"af55093184039a11c08d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"fb2e15821e36a7a24b40\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"3b7dbb34aa0890e6b666\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme6448607457324711.json"
-}
\ No newline at end of file
+}
diff --git a/src/power-bi/storage/CostSummary.Report/report.json b/src/power-bi/storage/CostSummary.Report/report.json
index adfb372b2..ff1157c6e 100644
--- a/src/power-bi/storage/CostSummary.Report/report.json
+++ b/src/power-bi/storage/CostSummary.Report/report.json
@@ -1,5 +1,5 @@
{
- "config": "{\"version\":\"5.61\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme275074610812726.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"6220ab6f40f094dbfea7\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"0c398bbff28219db5150\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"772386c010f1432a6781\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b381c8c1f50d39c2c039\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c0e72c608bf7be5061ed\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"f00ade81fdafa0b1e2be\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"33c1aff02b29d92748b9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0904978eb7dd40202e16\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3d599aa84ab540cf006b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"89d8a96d89b62c88315b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b03639aa3cb3d483bebf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"00155f6ca98a4b1edc0b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0229693c2ca2cb98cb9e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"121d8450fce71d59c973\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1879931b5bb09023a135\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"23b617f5c2a9db20d1e9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"52ce4bd7b417634379e8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"531ecbb0f561be69a5b8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6296c7754e20b995ffa3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"671132e2ea0bc658103a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7685f973f2951e23d4fa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d4cd0104a8b72043d72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d56742cf1f825dacc99\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9a3240cd1e6136166963\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d5254393545501da1b9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a6fcd78e7e9da03fe673\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3b4eefb0f030b092c72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c98a283bd0c688851179\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d3a19380ec587bb95108\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dd2ec22844439a0ad19e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fd5db249a8fad82c6e36\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8213d12a199c081d6009\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0d6cc8089bbe0b3ea6d1\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4278f34a648c1f86f449\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"63a6f725c0a55fdc2617\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ce6956159ec4325f2137\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ae49ee287112cd583e0a\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"debc77851805a849615c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"7a72af066794fba1f3c4\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6df4faecb0626ee28519\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ec085cdf84528a4d1ede\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"801601c124ce04733126\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"148436ae95d4bdecb7a7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2af23e804cd0ec3d1d2f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"20782f5504ba84eeb06e\":{\"isHidden\":false},\"5e23888e545707205062\":{\"isHidden\":false},\"66c7e5fa0bf46b2380c3\":{\"isHidden\":true},\"a236236f83a6794f1375\":{\"isHidden\":false},\"0696a16725f4fab15f1f\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Connect\",\"name\":\"020e65af2855ab46ec37\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"0c398bbff28219db5150\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"772386c010f1432a6781\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b381c8c1f50d39c2c039\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c0e72c608bf7be5061ed\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"f00ade81fdafa0b1e2be\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"33c1aff02b29d92748b9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0904978eb7dd40202e16\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3d599aa84ab540cf006b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"89d8a96d89b62c88315b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b03639aa3cb3d483bebf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"00155f6ca98a4b1edc0b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0229693c2ca2cb98cb9e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"121d8450fce71d59c973\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1879931b5bb09023a135\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"23b617f5c2a9db20d1e9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"52ce4bd7b417634379e8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"531ecbb0f561be69a5b8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6296c7754e20b995ffa3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"671132e2ea0bc658103a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7685f973f2951e23d4fa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d4cd0104a8b72043d72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d56742cf1f825dacc99\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9a3240cd1e6136166963\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d5254393545501da1b9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a6fcd78e7e9da03fe673\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3b4eefb0f030b092c72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c98a283bd0c688851179\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d3a19380ec587bb95108\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dd2ec22844439a0ad19e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fd5db249a8fad82c6e36\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8213d12a199c081d6009\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0d6cc8089bbe0b3ea6d1\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4278f34a648c1f86f449\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"63a6f725c0a55fdc2617\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ce6956159ec4325f2137\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ae49ee287112cd583e0a\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"debc77851805a849615c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"7a72af066794fba1f3c4\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6df4faecb0626ee28519\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ec085cdf84528a4d1ede\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"801601c124ce04733126\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"148436ae95d4bdecb7a7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2af23e804cd0ec3d1d2f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"20782f5504ba84eeb06e\":{\"isHidden\":true},\"5e23888e545707205062\":{\"isHidden\":true},\"66c7e5fa0bf46b2380c3\":{\"isHidden\":true},\"a236236f83a6794f1375\":{\"isHidden\":true},\"0696a16725f4fab15f1f\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}}],\"tags\":{\"serviceAppObjectId\":\"f24eab2c-a736-4aa1-af7c-2729d34249bc\"},\"defaultDrillFilterOtherVisuals\":true,\"slowDataSourceSettings\":{\"isCrossHighlightingDisabled\":false,\"isSlicerSelectionsButtonEnabled\":false,\"isFilterSelectionsButtonEnabled\":false,\"isFieldWellButtonEnabled\":false,\"isApplyAllButtonEnabled\":false},\"linguisticSchemaSyncVersion\":2,\"settings\":{\"useStylableVisualContainerHeader\":true,\"exportDataMode\":1,\"useNewFilterPaneExperience\":true,\"allowChangeFilterTypes\":true,\"allowDataPointLassoSelect\":true,\"useEnhancedTooltips\":true},\"objects\":{\"section\":[{\"properties\":{\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}}}}],\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}",
+ "config": "{\"version\":\"5.61\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme275074610812726.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"6220ab6f40f094dbfea7\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"0c398bbff28219db5150\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"772386c010f1432a6781\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b381c8c1f50d39c2c039\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c0e72c608bf7be5061ed\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"f00ade81fdafa0b1e2be\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"33c1aff02b29d92748b9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0904978eb7dd40202e16\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3d599aa84ab540cf006b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"89d8a96d89b62c88315b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b03639aa3cb3d483bebf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"00155f6ca98a4b1edc0b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0229693c2ca2cb98cb9e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"121d8450fce71d59c973\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1879931b5bb09023a135\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"23b617f5c2a9db20d1e9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"52ce4bd7b417634379e8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"531ecbb0f561be69a5b8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6296c7754e20b995ffa3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"671132e2ea0bc658103a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7685f973f2951e23d4fa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d4cd0104a8b72043d72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d56742cf1f825dacc99\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9a3240cd1e6136166963\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d5254393545501da1b9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a6fcd78e7e9da03fe673\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3b4eefb0f030b092c72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c98a283bd0c688851179\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d3a19380ec587bb95108\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dd2ec22844439a0ad19e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fd5db249a8fad82c6e36\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8213d12a199c081d6009\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0d6cc8089bbe0b3ea6d1\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4278f34a648c1f86f449\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"63a6f725c0a55fdc2617\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ce6956159ec4325f2137\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ae49ee287112cd583e0a\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"debc77851805a849615c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"7a72af066794fba1f3c4\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6df4faecb0626ee28519\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ec085cdf84528a4d1ede\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"801601c124ce04733126\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"148436ae95d4bdecb7a7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2af23e804cd0ec3d1d2f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"20782f5504ba84eeb06e\":{\"isHidden\":false},\"5e23888e545707205062\":{\"isHidden\":false},\"66c7e5fa0bf46b2380c3\":{\"isHidden\":true},\"a236236f83a6794f1375\":{\"isHidden\":false},\"0696a16725f4fab15f1f\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}},{\"displayName\":\"Get started - Connect\",\"name\":\"020e65af2855ab46ec37\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filter077be543c5f39dd293aa\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"0c398bbff28219db5150\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"772386c010f1432a6781\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b381c8c1f50d39c2c039\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"c0e72c608bf7be5061ed\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"f00ade81fdafa0b1e2be\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"33c1aff02b29d92748b9\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0904978eb7dd40202e16\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"3d599aa84ab540cf006b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"89d8a96d89b62c88315b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"b03639aa3cb3d483bebf\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"00155f6ca98a4b1edc0b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"0229693c2ca2cb98cb9e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"121d8450fce71d59c973\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"1879931b5bb09023a135\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"23b617f5c2a9db20d1e9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"52ce4bd7b417634379e8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"531ecbb0f561be69a5b8\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"6296c7754e20b995ffa3\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"671132e2ea0bc658103a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7685f973f2951e23d4fa\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d4cd0104a8b72043d72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7d56742cf1f825dacc99\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9a3240cd1e6136166963\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"9d5254393545501da1b9\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a6fcd78e7e9da03fe673\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c3b4eefb0f030b092c72\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"c98a283bd0c688851179\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"d3a19380ec587bb95108\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"dd2ec22844439a0ad19e\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"fd5db249a8fad82c6e36\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8213d12a199c081d6009\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"0d6cc8089bbe0b3ea6d1\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"4278f34a648c1f86f449\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"63a6f725c0a55fdc2617\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ce6956159ec4325f2137\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"ae49ee287112cd583e0a\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"debc77851805a849615c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"7a72af066794fba1f3c4\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"6df4faecb0626ee28519\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"ec085cdf84528a4d1ede\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"801601c124ce04733126\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"148436ae95d4bdecb7a7\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2af23e804cd0ec3d1d2f\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}}},\"visualContainerGroups\":{\"20782f5504ba84eeb06e\":{\"isHidden\":true},\"5e23888e545707205062\":{\"isHidden\":true},\"66c7e5fa0bf46b2380c3\":{\"isHidden\":true},\"a236236f83a6794f1375\":{\"isHidden\":true},\"0696a16725f4fab15f1f\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[]}}],\"tags\":{\"serviceAppObjectId\":\"f24eab2c-a736-4aa1-af7c-2729d34249bc\"},\"defaultDrillFilterOtherVisuals\":true,\"slowDataSourceSettings\":{\"isCrossHighlightingDisabled\":false,\"isSlicerSelectionsButtonEnabled\":false,\"isFilterSelectionsButtonEnabled\":false,\"isFieldWellButtonEnabled\":false,\"isApplyAllButtonEnabled\":false},\"linguisticSchemaSyncVersion\":2,\"settings\":{\"useStylableVisualContainerHeader\":true,\"exportDataMode\":1,\"useNewFilterPaneExperience\":true,\"allowChangeFilterTypes\":true,\"allowDataPointLassoSelect\":true,\"useEnhancedTooltips\":true},\"objects\":{\"section\":[{\"properties\":{\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}}}}],\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}",
"filters": "[{\"name\":\"Filter077be543c5f39dd293aa\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
"layoutOptimization": 0,
"pods": [
@@ -678,7 +678,7 @@
"z": 0.00
},
{
- "config": "{\"name\":\"7a72af066794fba1f3c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":5000,\"width\":240,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"7a72af066794fba1f3c4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":5000,\"width\":240,\"height\":32,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
"height": 32.00,
"width": 240.00,
@@ -1907,7 +1907,7 @@
"config": "{}",
"displayName": "Prices",
"displayOption": 1,
- "filters": "[]",
+ "filters": "[{\"name\":\"2cdbc70e1bae004d5543\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"BillingAccountName\"}},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"a7ec7b30012473ba496a\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unused'\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
"height": 720.00,
"name": "ReportSection27adbc5b658c5d02bd16",
"ordinal": 10,
@@ -2065,7 +2065,7 @@
"z": 2000.00
},
{
- "config": "{\"name\":\"8417435501f8b56272d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"55a6637a1f5c4cc1fd16\"}",
+ "config": "{\"name\":\"8417435501f8b56272d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"CostDetails.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"CostDetails.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"CostDetails.CommitmentDiscountType\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}}],\"isPinned\":true},{\"queryRefs\":[\"CostDetails.CommitmentDiscountName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"CostDetails.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{\"filter\":{\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Reservation'\"}}]]}}}]}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]},\"cachedFilterDisplayItems\":[{\"id\":{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}},\"displayName\":\"Reservation\"}]},\"parentGroupName\":\"55a6637a1f5c4cc1fd16\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
"height": 56.00,
"width": 200.00,
@@ -2109,7 +2109,7 @@
"z": 12000.00
},
{
- "config": "{\"name\":\"9baad4463c2292e6dab2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":760,\"height\":608,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.x_SkuDescription\"},{\"queryRef\":\"CostDetails.CommitmentDiscountType\"},{\"queryRef\":\"CostDetails.x_SkuTermLabel\"},{\"queryRef\":\"Sum(CostDetails.ListUnitPrice)\"},{\"queryRef\":\"Sum(CostDetails.ContractedUnitPrice)\"},{\"queryRef\":\"CostDetails.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(CostDetails.ConsumedQuantity)\"},{\"queryRef\":\"CostDetails.ConsumedUnit\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"CostDetails.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"Effective\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(CostDetails.ListUnitPrice)\",\"NativeReferenceName\":\"List\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"CostDetails.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"CostDetails.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(CostDetails.ContractedUnitPrice)\",\"NativeReferenceName\":\"Contracted\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedUnit\"},\"Name\":\"CostDetails.ConsumedUnit\",\"NativeReferenceName\":\"Unit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"}},\"Function\":0}}}]},\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Commitment\"},\"CostDetails.x_EffectiveUnitPrice\":{\"displayName\":\"Effective\"},\"Sum(CostDetails.ListUnitPrice)\":{\"displayName\":\"List\"},\"CostDetails.x_SkuTermLabel\":{\"displayName\":\"Term\"},\"CostDetails.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(CostDetails.ContractedUnitPrice)\":{\"displayName\":\"Contracted\"},\"Sum(CostDetails.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"CostDetails.ConsumedUnit\":{\"displayName\":\"Unit\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Cost\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"65.83913379737045D\"}}}},\"selector\":{\"metadata\":\"Sum(CostDetails.ListUnitPrice)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"208.62690723349726D\"}}}},\"selector\":{\"metadata\":\"CostDetails.x_SkuDescription\"}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
+ "config": "{\"name\":\"9baad4463c2292e6dab2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":760,\"height\":608,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"CostDetails.x_SkuDescription\"},{\"queryRef\":\"CostDetails.CommitmentDiscountType\"},{\"queryRef\":\"CostDetails.x_SkuTermLabel\"},{\"queryRef\":\"Sum(CostDetails.ListUnitPrice)\"},{\"queryRef\":\"Sum(CostDetails.ContractedUnitPrice)\"},{\"queryRef\":\"CostDetails.x_EffectiveUnitPrice\"},{\"queryRef\":\"Sum(CostDetails.ConsumedQuantity)\"},{\"queryRef\":\"CostDetails.ConsumedUnit\"},{\"queryRef\":\"Sum(CostDetails.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_EffectiveUnitPrice\"},\"Name\":\"CostDetails.x_EffectiveUnitPrice\",\"NativeReferenceName\":\"Effective\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ListUnitPrice\"},\"Name\":\"Sum(CostDetails.ListUnitPrice)\",\"NativeReferenceName\":\"List\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"CostDetails.CommitmentDiscountType\",\"NativeReferenceName\":\"Commitment\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuTermLabel\"},\"Name\":\"CostDetails.x_SkuTermLabel\",\"NativeReferenceName\":\"Term\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_SkuDescription\"},\"Name\":\"CostDetails.x_SkuDescription\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedQuantity\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.ConsumedQuantity)\",\"NativeReferenceName\":\"Quantity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ContractedUnitPrice\"},\"Name\":\"Sum(CostDetails.ContractedUnitPrice)\",\"NativeReferenceName\":\"Contracted\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ConsumedUnit\"},\"Name\":\"CostDetails.ConsumedUnit\",\"NativeReferenceName\":\"Unit\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(CostDetails.EffectiveCost)\",\"NativeReferenceName\":\"Cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"CostDetails.CommitmentDiscountType\":{\"displayName\":\"Commitment\"},\"CostDetails.x_EffectiveUnitPrice\":{\"displayName\":\"Effective\"},\"Sum(CostDetails.ListUnitPrice)\":{\"displayName\":\"List\"},\"CostDetails.x_SkuTermLabel\":{\"displayName\":\"Term\"},\"CostDetails.x_SkuDescription\":{\"displayName\":\"SKU\"},\"Sum(CostDetails.ContractedUnitPrice)\":{\"displayName\":\"Contracted\"},\"Sum(CostDetails.ConsumedQuantity)\":{\"displayName\":\"Quantity\"},\"CostDetails.ConsumedUnit\":{\"displayName\":\"Unit\"},\"Sum(CostDetails.EffectiveCost)\":{\"displayName\":\"Cost\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"65.83913379737045D\"}}}},\"selector\":{\"metadata\":\"Sum(CostDetails.ListUnitPrice)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"208.62690723349726D\"}}}},\"selector\":{\"metadata\":\"CostDetails.x_SkuDescription\"}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
"height": 608.00,
"width": 760.00,
diff --git a/src/power-bi/storage/DataIngestion.Report/report.json b/src/power-bi/storage/DataIngestion.Report/report.json
index 8f81b3c7b..f3ae91af5 100644
--- a/src/power-bi/storage/DataIngestion.Report/report.json
+++ b/src/power-bi/storage/DataIngestion.Report/report.json
@@ -116,590 +116,590 @@
"displayName": "Errors",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "1c5b3a4a90a6e6dd5add",
"ordinal": 4,
"visualContainers": [
{
"config": "{\"name\":\"08830eb3c5600a853300\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"097272fa2b9493e3c4d0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"10ee62f1cba2d8e14d03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubErrors.ExportName\"},{\"queryRef\":\"HubErrors.Dataset\"},{\"queryRef\":\"HubErrors.DatasetVersion\"},{\"queryRef\":\"HubErrors.StorageContainer\"},{\"queryRef\":\"HubErrors.StoragePath\"},{\"queryRef\":\"HubErrors.Month\"},{\"queryRef\":\"Sum(HubErrors.DataFiles)\"},{\"queryRef\":\"Sum(HubErrors.SizeInGB)\"},{\"queryRef\":\"HubErrors.Updated\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ExportName\"},\"Name\":\"HubErrors.ExportName\",\"NativeReferenceName\":\"Export\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Dataset\"},\"Name\":\"HubErrors.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"DatasetVersion\"},\"Name\":\"HubErrors.DatasetVersion\",\"NativeReferenceName\":\"Version\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"StorageContainer\"},\"Name\":\"HubErrors.StorageContainer\",\"NativeReferenceName\":\"Container\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"StoragePath\"},\"Name\":\"HubErrors.StoragePath\",\"NativeReferenceName\":\"Path1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"DataFiles\"}},\"Function\":0},\"Name\":\"Sum(HubErrors.DataFiles)\",\"NativeReferenceName\":\"Data files\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubErrors.SizeInGB)\",\"NativeReferenceName\":\"GB\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Month\"}},\"Function\":2},\"Name\":\"HubErrors.Month\",\"NativeReferenceName\":\"Months\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"},\"Name\":\"HubErrors.Updated\",\"NativeReferenceName\":\"Last1\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ExportName\"}}}]},\"columnProperties\":{\"HubErrors.ExportName\":{\"displayName\":\"Export\"},\"HubErrors.DatasetVersion\":{\"displayName\":\"Version\"},\"HubErrors.StorageContainer\":{\"displayName\":\"Container\"},\"HubErrors.StoragePath\":{\"displayName\":\"Path\"},\"HubErrors.Month\":{\"displayName\":\"Months\"},\"Sum(HubErrors.DataFiles)\":{\"displayName\":\"Data files\"},\"Sum(HubErrors.SizeInGB)\":{\"displayName\":\"GB\"},\"HubErrors.Updated\":{\"displayName\":\"Last\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"292.54437091863053D\"}}}},\"selector\":{\"metadata\":\"HubErrors.ExportName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"142.80900208944053D\"}}}},\"selector\":{\"metadata\":\"HubErrors.Dataset\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"79.7063917955459D\"}}}},\"selector\":{\"metadata\":\"HubErrors.DatasetVersion\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"337.76179370956027D\"}}}},\"selector\":{\"metadata\":\"HubErrors.StoragePath\"}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1316fd92740600b9c584\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":167.99999999999994,\"z\":500,\"width\":200,\"height\":56,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.ExportName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"ExportName\"},\"Name\":\"StorageData.ExportName\",\"NativeReferenceName\":\"ExportName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"StorageData.ExportName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Export'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Export filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c0b78c8cdee7bba870db\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.00,
- "z": 500.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.0,
+ "z": 500.0
},
{
"config": "{\"name\":\"1427de4ea03c6a00477d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"c0b78c8cdee7bba870db\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"155b1bff0cc01b38090b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"1635adffd937185628b8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"187c010d420be8e950d6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"24dde5906601458cc070\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"27aae90178be7ea28a03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"2d084afebbe82374997a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"2f1ef6b668dba078ee91\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":200,\"z\":4000,\"width\":1048,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"HubErrors.Updated\",\"active\":true}],\"Series\":[{\"queryRef\":\"HubErrors.ErrorCode\"}],\"Y\":[{\"queryRef\":\"CountNonNull(HubErrors.ErrorCode)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"},\"Name\":\"HubErrors.Updated\",\"NativeReferenceName\":\"Last error\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"},\"Name\":\"HubErrors.ErrorCode\",\"NativeReferenceName\":\"ErrorCode\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"}},\"Function\":5},\"Name\":\"CountNonNull(HubErrors.ErrorCode)\",\"NativeReferenceName\":\"Count\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"}}}]},\"columnProperties\":{\"HubErrors.Updated\":{\"displayName\":\"Last error\"},\"CountNonNull(HubErrors.ErrorCode)\":{\"displayName\":\"Count\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"legend\":[{\"properties\":{\"showGradientLegend\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'RightCenter'\"}}}}}],\"categoryAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 200.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 200.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"34298c0678a93950c4e3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Ingestion errors\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review errors across Cost Management exports and FinOps hubs ingestion.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"3d87022be3e05ae04434\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"440cbf31e1bbbdc40c40\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#ingestion'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"50d218f1d786a435e6c6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"5799b7a79a00b8220500\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":2000,\"width\":1048,\"height\":224,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubErrors.ErrorCode\"},{\"queryRef\":\"HubErrors.ErrorSeverity\"},{\"queryRef\":\"HubErrors.ErrorMessage\"},{\"queryRef\":\"HubErrors.ErrorMitigation\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"},\"Name\":\"HubErrors.ErrorCode\",\"NativeReferenceName\":\"Error\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorSeverity\"},\"Name\":\"HubErrors.ErrorSeverity\",\"NativeReferenceName\":\"Severity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorMessage\"},\"Name\":\"HubErrors.ErrorMessage\",\"NativeReferenceName\":\"Message\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorMitigation\"},\"Name\":\"HubErrors.ErrorMitigation\",\"NativeReferenceName\":\"Mitigation\"}]},\"columnProperties\":{\"HubData.DatasetVersion\":{\"displayName\":\"Version\"},\"HubData.Month\":{\"displayName\":\"Months\"},\"HubErrors.ErrorCode\":{\"displayName\":\"Error\"},\"HubErrors.ErrorSeverity\":{\"displayName\":\"Severity\"},\"HubErrors.ErrorMessage\":{\"displayName\":\"Message\"},\"HubErrors.ErrorMitigation\":{\"displayName\":\"Mitigation\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"423.4892045470484D\"}}}},\"selector\":{\"metadata\":\"HubErrors.ErrorMessage\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"584.0089849613933D\"}}}},\"selector\":{\"metadata\":\"HubErrors.ErrorMitigation\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Error details'\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 488.00,
- "z": 2000.00
+ "height": 224.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"6109318b30210898b182\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":280,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c0b78c8cdee7bba870db\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 280.00,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 280.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"68357a7a0667c5281806\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"6901bcaed7b5c0707343\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"6b6eb2bec21b203d1d31\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":223.99999999999994,\"z\":250,\"width\":200,\"height\":56,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.Dataset\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Dataset\"},\"Name\":\"StorageData.Dataset\",\"NativeReferenceName\":\"Dataset\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"StorageData.Dataset\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dataset'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dataset filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c0b78c8cdee7bba870db\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.00,
- "z": 250.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.0,
+ "z": 250.0
},
{
"config": "{\"name\":\"786cf10f6e41cd4d9e79\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"7fb1f2902c06c1546c12\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.DataIngestion/featureName/Errors'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"85eff20f77d9396b0e11\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"HubScopes.Scope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"HubScopes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubScopes.Scope\",\"NativeReferenceName\":\"Scope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"HubScopes.Scope\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub scope'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Scope filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c0b78c8cdee7bba870db\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"8c6a125bd9ee005cdb70\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"993fe97f0ed0dd1bb26e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"a501f0f4b54d00d45e86\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":5000,\"width\":1048,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Values\":[{\"queryRef\":\"CountNonNull(HubErrors.ErrorCode)\"}],\"Group\":[{\"queryRef\":\"HubErrors.ErrorCode\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"}},\"Function\":5},\"Name\":\"CountNonNull(HubErrors.ErrorCode)\",\"NativeReferenceName\":\"Errors\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"},\"Name\":\"HubErrors.ErrorCode\",\"NativeReferenceName\":\"ErrorCode\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ErrorCode\"}},\"Function\":5}}}]},\"columnProperties\":{\"CountNonNull(HubErrors.ErrorCode)\":{\"displayName\":\"Errors\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Errors'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"a92ba739e2ee00653a0a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"b5db5f10bc50c9c61033\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"c0b78c8cdee7bba870db\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"bfb1f7cf1a2c5dc213cd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c0b78c8cdee7bba870db\",\"layouts\":[{\"id\":0,\"position\":{\"height\":336,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\"}",
- "height": 336.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 336.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"c7463136918c04269db6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d3632e75111a8c46ae1c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(StorageErrors.ErrorCode)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageErrors\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"ErrorCode\"}},\"Function\":5},\"Name\":\"Min(StorageErrors.ErrorCode)\",\"NativeReferenceName\":\"Count of ErrorCode\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"ErrorCode\"}},\"Function\":5}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Errors'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"d66f29846bc2103ad818\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"d82f929d9080528897c1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"1635adffd937185628b8\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"dbc52174140015767527\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"e317b1cdd8cd637bee61\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"e57b723e4e31d15793bd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"08830eb3c5600a853300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection04cb7247170034c13d74",
"visualContainers": [
{
"config": "{\"name\":\"00032d52d0beaada8d12\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"0446dabf66549e59676d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"0472748ce14980601ae9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"8200198661e03125ab01\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"055e28cfe0e187dbc5ac\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"3f63b3727d309a6ae088\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"095ba2f522838bd57679\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"3f63b3727d309a6ae088\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"0b62f3e9bb0a13d15584\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
- "x": 216.00,
- "y": 113.00,
- "z": 11000.00
+ "x": 216.0,
+ "y": 113.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"153e7b3e56cc3ae5346e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"b4662f3012de90dbea59\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"19a1dca41592ba0360db\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"1cda5c4e42b2a1c810eb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"1d66afe56e540001b014\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1dd88d991285ebe6c3e6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"1eae1125a521aa616e3e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":4000,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"211c27eccd1313cedb98\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"2376a0517e507c0a0011\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"2a9720cfcadb06e594b9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"3967589c878eb83e3104\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"3f63b3727d309a6ae088\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":6000,\"width\":272,\"height\":368,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 6000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"40c746facd0b7934009b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0b62f3e9bb0a13d15584\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"424cee35b11c3493254e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"b4662f3012de90dbea59\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"4379eae530d2a9599867\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'f4768ae05000a733722b'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8200198661e03125ab01\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"4bb8ac8182d30192bc29\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0b62f3e9bb0a13d15584\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"535dd8a60a23acd5e1ee\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"6060d7deeb240720c23c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 3000.00
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"61fcca611a4e2a3b0d00\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"6502ed9e00bea9097736\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'17221f44c9a09057e62a'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"66add68190480d765b44\",\"layouts\":[{\"id\":0,\"position\":{\"height\":424,\"width\":776,\"x\":40,\"y\":96,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report connects to Azure Resource Graph and cost data in a storage account β either directly exported from Microsoft Cost Management or as part of FinOps hubs. This report supports up to $2 million of cost data per month with incremental refresh enabled. If you need to support more than $2 million per month, please use \"},{\"value\":\"FinOps hubs\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\" with Data Explorer.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect to your storage account:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Create new exports in Cost Management to initiate data ingestion. Remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet\"},{\"value\":\" β Required to calculate accurate and complete savings.\",\"textStyle\":{\"fontSize\":\"12px\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Connect to your storage account\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Storage URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If connecting to FinOps hubs:\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"storageUrlForPowerBI\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"If connecting directly to Cost Management exports in storage:\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Open the desired storage account in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ SettingsΒ >Β EndpointsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Copy theΒ Data Lake StorageΒ URL.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Append the container and export path, if applicable\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"RangeStart\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" / \"},{\"value\":\"RangeEnd \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Optional date range you would like to limit to. If not specified, the report will include all data in storage.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Experimental: Add Missing Prices \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Indicate whether you want missing prices to be populated from the exported price sheet data. This option requires a large join which may increase refresh times and limit the total monthly cost supported.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Deprecated: Perform Extra Query Optimizations \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Indicate whether you want to support FOCUS 1.0 preview and additional custom columns from FinOps toolkit 0.7 reports. This option is for backwards compatibility only and will be removed in a future release.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report imports all cost data, which can be slow for large accounts. If you run into any performance issues or timeouts, please consider using FinOps hubs with Data Explorer. Data Explorer provides advanced analytics capabilities, significantly improves performance, and offers new capabilities like forecasting and anomaly detection. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Learn more about FinOps hubs\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to your account, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the configured storage account container (\\\"ingestion\\\" for FinOps hubs).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0b62f3e9bb0a13d15584\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"68cd8350b03484606372\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":10000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -708,1268 +708,1268 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 10000.00
+ "z": 10000.0
},
{
"config": "{\"name\":\"6bd886f6a4bd380ba304\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":4000,\"width\":776,\"height\":384,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear RangeStart, RangeEnd, Number of Months date parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 4000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"7464664f61286ea5d05c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.DataIngestion/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"80ed1c029dcd5d896b08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":9000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Data ingestion\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 9000.00
+ "z": 9000.0
},
{
"config": "{\"name\":\"8200198661e03125ab01\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":7000,\"width\":272,\"height\":368,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 7000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"89c2013b1e0dcd8ca4d7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":12000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 12000.00
+ "y": 112.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"8f9ac0949cb692736082\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"3f63b3727d309a6ae088\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"961240bc6de8deb6917e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":5000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'f1785d3ad2cade14a4c4'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"9b0c6e99940e91aa31d6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting tips\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"8200198661e03125ab01\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"a1e9fe10d56c974688ca\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"a990eb29dd0a31d56a16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"8200198661e03125ab01\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"aaf1aba0ac9dc96689e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":2000,\"width\":96,\"height\":32,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 2000.00
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b10fced690612238cc04\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"b4662f3012de90dbea59\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":5000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 5000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b6bbd19c451dc2c60d03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":8000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Data ingestion report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides details about the data you've ingested into your FinOps hub storage account.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \"},{\"value\":\"Data ingestion capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/understand/ingestion\"},{\"value\":\" in the FinOps Framework.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/DataIngestion\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 8000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"ba7df7a7b9ba2080baab\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"bcde132c01907ebb5d14\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c5798604e516e729e6e9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"c6e0fb1fa65052308169\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d3226152b0e7023b333e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b4662f3012de90dbea59\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"dcdd294075b661a80910\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'f1785d3ad2cade14a4c4'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"0b62f3e9bb0a13d15584\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e16abc8f2b0bd6b231bc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"b4662f3012de90dbea59\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"e21490dc0d0b6893ae0b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"e369a6a64927a0e71bdc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":6000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 6000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e3fa24bb2c84e107d661\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3f63b3727d309a6ae088\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
- "config": "{\"name\":\"e95d8149a7901e4520c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"e95d8149a7901e4520c5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f1b8d7141cbea44d930a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"f4e57342a54161079626\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":1000,\"width\":96,\"height\":32,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"89c2013b1e0dcd8ca4d7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 1000.00
+ "y": 488.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"f92d1cee1d71d5601349\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"fee773a00018a27d0b50\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"0446dabf66549e59676d\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Ingestion",
"displayOption": 1,
"filters": "[{\"name\":\"Filter898f46d67c3786542022\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"StorageContainer\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"StorageContainer\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'ingestion'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection0f19b4db8a9820050c88",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"0768094b206a24c52028\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":111.94938421815982,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"688ffe9db65ea1d8d95e\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 111.95,
- "z": 0.00
+ "z": 0.0
},
{
"config": "{\"name\":\"19d52e1b39833050d84b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"23fe7e2deb7039a9b0d0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Ingestion\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review data ingested into the FinOps hub storage account across scopes.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"2475254c35226401c2e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2500,\"width\":200,\"height\":56,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.Month\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"},\"Name\":\"StorageData.Month\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"syncGroup\":{\"groupName\":\"Month\",\"fieldChanges\":true,\"filterChanges\":true},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported dates'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Date filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"688ffe9db65ea1d8d95e\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"3954bcba04cb102449c3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"3cf5be379688789ae810\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"446c0ae12a54c9d3b035\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"488f911d39a8e0da0e7b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"51dcda47db062bdde0a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"6205f570590830966b11\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"68031d1f96526c9acb72\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"688ffe9db65ea1d8d95e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":167.94938421815982,\"width\":200,\"x\":0,\"y\":104,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\"}",
"height": 167.95,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6a112e35de094ed3350c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"73c4c9c298e7b65c010a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"HubData.Scope\",\"active\":true},{\"queryRef\":\"HubData.Dataset\"}],\"Values\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"},{\"queryRef\":\"Min(HubData.Updated)\"}],\"Columns\":[{\"queryRef\":\"HubData.Month\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubData.Scope\",\"NativeReferenceName\":\"Scope1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Dataset\"},\"Name\":\"HubData.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Updated\"}},\"Function\":4},\"Name\":\"Min(HubData.Updated)\",\"NativeReferenceName\":\"Updated\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"HubData.Scope\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Scope\"}}],\"isPinned\":true},{\"queryRefs\":[\"HubData.Dataset\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Min(HubData.Updated)\":{\"displayName\":\"Updated\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingestion files'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"93a24a395001380b9a1a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":376,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.MonthRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"MonthRange\"},\"Name\":\"StorageData.MonthRange\",\"NativeReferenceName\":\"MonthRange\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"StorageData.MonthRange\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingested months'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 376.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 376.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"941f97cb599a04c49114\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"a6f30625a03da9580b02\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a91b227d4d99ca844086\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ac40dc72e18470d2a2b8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ad81f44aba27608ba15d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"b6ab498d69e8c2700135\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.DataIngestion/featureName/Ingestion'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b7d871f4e3050c1db0ba\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"c2a838c1cbe3a326cb42\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"c3dbfd50d57677e97039\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"c4e11867b83cb4bc54de\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":104,\"z\":4000,\"width\":184,\"height\":280,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pieChart\",\"projections\":{\"Category\":[{\"queryRef\":\"HubData.Dataset\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"}],\"Tooltips\":[{\"queryRef\":\"Min(HubData.Scope)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Dataset\"},\"Name\":\"HubData.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Scope\"}},\"Function\":2},\"Name\":\"Min(HubData.Scope)\",\"NativeReferenceName\":\"Scopes\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Min(HubData.Scope)\":{\"displayName\":\"Scopes\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dataset size'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 184.00,
- "x": 1080.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.0,
+ "width": 184.0,
+ "x": 1080.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"c80da3ea3087170c0384\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d3e95c3a87029e0c7274\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(HubSettings.Version)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"h\",\"Entity\":\"HubSettings\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Version\"}},\"Function\":3},\"Name\":\"Min(HubSettings.Version)\",\"NativeReferenceName\":\"First Version\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub version'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"d5d7fa7245dd6e8a2251\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"d6266bfe739ab380e68d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"dcabeb62d0c985d47300\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#ingestion'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"c3dbfd50d57677e97039\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"de7d4753497a7353c609\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56.75061878605793,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"HubScopes.Scope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"HubScopes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubScopes.Scope\",\"NativeReferenceName\":\"Scope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"HubScopes.Scope\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub scope'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Scope filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"688ffe9db65ea1d8d95e\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 56.75,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"e021fdcda9500570ab9b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"e885d925cdd10d201902\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e9b3f5d97c2972c04aee\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":2000,\"width\":856,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Y\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"}],\"Category\":[{\"queryRef\":\"HubData.Month\",\"active\":true}],\"Series\":[{\"queryRef\":\"HubData.Scope\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubData.Scope\",\"NativeReferenceName\":\"Scope\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"}}}]},\"columnProperties\":{\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingested data'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 856.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 280.0,
+ "width": 856.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"fe3f599c7d1c6024a99b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"941f97cb599a04c49114\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Hubs",
"displayOption": 1,
"filters": "[{\"name\":\"Filter0f705334ebcbcee40b30\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_ToolkitTool\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ToolkitTool\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'FinOps hubs'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection85de2b23d730d521bd94",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"022b03e34c058d1be735\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":1750,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 1750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 1750.0
},
{
"config": "{\"name\":\"0443b03c15bb20297190\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps hubs\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review the cost of your FinOps hubs infrastructure.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0a3a4c8f7dccd6032636\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":3000,\"width\":1048,\"height\":320,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"pivotTable\",\"projections\":{\"Rows\":[{\"queryRef\":\"Costs.x_ResourceParentName\",\"active\":true},{\"queryRef\":\"Costs.ServiceName\"},{\"queryRef\":\"Costs.ResourceName\"}],\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Columns\":[{\"queryRef\":\"Costs.x_ChargeMonth\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceParentName\"},\"Name\":\"Costs.x_ResourceParentName\",\"NativeReferenceName\":\"Hub\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ResourceName\"},\"Name\":\"Costs.ResourceName\",\"NativeReferenceName\":\"ResourceName\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ChargeMonth\"},\"Name\":\"Costs.x_ChargeMonth\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"expansionStates\":[{\"roles\":[\"Rows\"],\"levels\":[{\"queryRefs\":[\"Costs.x_ResourceParentName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"x_ResourceParentName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.ServiceName\"],\"isCollapsed\":true,\"identityKeys\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ServiceName\"}}],\"isPinned\":true},{\"queryRefs\":[\"Costs.ResourceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null,\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'ftk-brettwil-hub'\"}}],\"children\":[{\"identityValues\":[{\"Literal\":{\"Value\":\"'Azure Data Factory v2'\"}}],\"isToggled\":true}]}]}}],\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.x_ResourceParentName\":{\"displayName\":\"Hub\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"},\"Costs.ResourceName\":{\"displayName\":\"Resource\"},\"Costs.x_ChargeMonth\":{\"displayName\":\"Month\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"212.67862782571547D\"}}}},\"selector\":{\"metadata\":\"Costs.ResourceName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"230.24255480992463D\"}}}},\"selector\":{\"metadata\":\"Costs.x_ResourceParentName\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"15bcdf7f1190aaebc97a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":2500,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#finops-hubs'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"183bbe6eb8e0ac8a1d6e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"Costs.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"69069c2a45c184a9e046\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 112.80,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 112.8,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1d3b068293b01a00b130\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"1d53373ce1158964182d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"2200d84dbe06037563c2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":1048,\"height\":280,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.x_ReportingDate\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Costs.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"},\"Name\":\"Costs.x_ReportingDate\",\"NativeReferenceName\":\"x_ReportingDate\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ReportingDate\"}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"22e104949380504dbbec\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"2304d40be98eec999d17\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"2848d1bfe540dd600bbc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"2a276b61bed88e249ecd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"2d79b873a940ca984a4b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"34b6c29f5060846ce3e9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"365e33034d09144313ee\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"3900368792e4bbd37913\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"3d3fadf6b04a039cb905\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"Effective Savings Rate (ESR)\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"columnProperties\":{\"Costs.x_EffectiveSavingsRate\":{\"displayName\":\"Effective Savings Rate (ESR)\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'ESR'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"3de4e6222ab004b904d4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"3e68fb3507593a2a50e7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ServiceCategory\",\"active\":true},{\"queryRef\":\"Costs.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"Costs.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.ServiceCategory\":{\"displayName\":\"Service category\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"69069c2a45c184a9e046\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 168.80,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 168.8,
+ "z": 1000.0
},
{
"config": "{\"name\":\"3f1a24e7e603b73c7b5c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"5852e960096180302805\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"69069c2a45c184a9e046\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"69069c2a45c184a9e046\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":1937,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 1937.00
+ "height": 280.8,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 1937.0
},
{
"config": "{\"name\":\"710f8fda4b97262ba750\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"71d0acc9a7941c99b919\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"75a0b0800885c1b7000e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"69069c2a45c184a9e046\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"aa9458fd0c1b72be05ae\",\"layouts\":[{\"id\":0,\"position\":{\"x\":407.7929541589751,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
+ "height": 88.0,
+ "width": 184.0,
"x": 407.79,
- "y": 8.00,
- "z": 4000.00
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"acf038e5243e50d10b10\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"aeecea760669a7223360\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"b5fef5bb03e5ade1be16\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"ba124b2fa522543805a4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"d2b4a4e70c0c7d533040\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"db0500a21806ca855932\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"dd7147832705685c5b30\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":1500,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.DataIngestion/featureName/FinOpsHubs'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3900368792e4bbd37913\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 1500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"e018ae059867dea56782\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"e61988e3205d035b9985\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"69069c2a45c184a9e046\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 224.8,
+ "z": 0.0
},
{
"config": "{\"name\":\"f136fbda5ebdab06a161\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"fb4b6154a2a76c9000ac\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"f136fbda5ebdab06a161\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Exports",
"displayOption": 1,
"filters": "[{\"name\":\"Filterfebaca3cd39e7141e0b2\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"StorageContainer\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"StorageContainer\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'msexports'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSectionb35903d610c9a37a4dcd",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"00a1abe3c4203463c082\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":7000,\"width\":376,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.MonthRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"MonthRange\"},\"Name\":\"StorageData.MonthRange\",\"NativeReferenceName\":\"MonthRange\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"StorageData.MonthRange\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"24D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported months'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 376.00,
- "x": 216.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 376.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"0442b894c610e7082a64\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":2000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"HubScopes.Scope\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"HubScopes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubScopes.Scope\",\"NativeReferenceName\":\"Scope\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"HubScopes.Scope\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub scope'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Scope filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"df5fc5815e9c584a1652\"}",
"filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0540d361194080b291e4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"0f5f6cbe575001517b0b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"124c2495dc3c3e9e4890\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(HubSettings.Version)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"h\",\"Entity\":\"HubSettings\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Version\"}},\"Function\":3},\"Name\":\"Min(HubSettings.Version)\",\"NativeReferenceName\":\"First Version\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_DiscountCostSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Hub version'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"13a8260208041d671172\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":111.19876543210194,\"z\":0,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"df5fc5815e9c584a1652\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 111.20,
- "z": 0.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 111.2,
+ "z": 0.0
},
{
"config": "{\"name\":\"181bb770c990bd19481d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"18c45d6d134c86c00a59\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"387e8581e014304903ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"3be3e721e217ce0220c2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"3e1e64e5cd0b28810b60\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review exported data across scopes and identify ingestion failures.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"5de2d3523e0380350c67\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"6cb23c47ea04cddb5680\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"6f0cf6e250989aa77c58\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":5000,\"width\":1048,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"HubData.Updated\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(HubData.SizeInGB)\"}],\"Series\":[{\"queryRef\":\"HubData.ExportName\"}],\"Tooltips\":[{\"queryRef\":\"Sum(StorageData.AllFiles)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"},\"Name\":\"HubData.Updated\",\"NativeReferenceName\":\"Updated\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"Size (GB)\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"ExportName\"},\"Name\":\"HubData.ExportName\",\"NativeReferenceName\":\"Export\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"AllFiles\"}},\"Function\":0},\"Name\":\"Sum(StorageData.AllFiles)\",\"NativeReferenceName\":\"File count\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Updated\"}}}]},\"columnProperties\":{\"HubData.ExportName\":{\"displayName\":\"Export\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"Size (GB)\"},\"Sum(StorageData.AllFiles)\":{\"displayName\":\"File count\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"detailContentType\":{\"expr\":{\"Literal\":{\"Value\":\"'Percent of total'\"}}},\"detailLabelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'RightCenter'\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Export runs'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 5000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"760f4779578007494a07\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7621a022c4bdb30eb148\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"7b8b109f19ce8d619301\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"7d150d60de107d6eac50\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"8234376fb21c6e49b4ad\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"825c0de9c19de2012120\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":392,\"z\":2000,\"width\":568,\"height\":320,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubData.ExportName\"},{\"queryRef\":\"HubData.Month\"},{\"queryRef\":\"Sum(HubData.ConfigFiles)\"},{\"queryRef\":\"HubData.Dataset\"},{\"queryRef\":\"Sum(HubData.ConfigFiles)\"},{\"queryRef\":\"HubData.Updated\"},{\"queryRef\":\"Sum(HubData.SizeInGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"ExportName\"},\"Name\":\"HubData.ExportName\",\"NativeReferenceName\":\"Export\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Dataset\"},\"Name\":\"HubData.Dataset\",\"NativeReferenceName\":\"Dataset1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"ConfigFiles\"}},\"Function\":0},\"Name\":\"Sum(HubData.ConfigFiles)\",\"NativeReferenceName\":\"Failed runs\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Updated\"}},\"Function\":4},\"Name\":\"HubData.Updated\",\"NativeReferenceName\":\"Last\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"SizeInGB\"}},\"Function\":0},\"Name\":\"Sum(HubData.SizeInGB)\",\"NativeReferenceName\":\"GB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Updated\"}},\"Function\":4}}}]},\"columnProperties\":{\"HubData.ExportName\":{\"displayName\":\"Export\"},\"Sum(HubData.ConfigFiles)\":{\"displayName\":\"Failed runs\"},\"HubData.Updated\":{\"displayName\":\"Last\"},\"Sum(HubData.SizeInGB)\":{\"displayName\":\"GB\"}},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"79.7653075183143D\"}}}},\"selector\":{\"metadata\":\"HubData.Dataset\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.22539967803107D\"}}}},\"selector\":{\"metadata\":\"HubData.ExportName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"75.77285422253676D\"}}}},\"selector\":{\"metadata\":\"Sum(HubData.ConfigFiles)\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Ingestion failures'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter84fc43e13670e02004ee\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Dataset\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":0},{\"name\":\"Filter5364d8e90b8ea49b7603\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"ExportName\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":1},{\"name\":\"Filter3b0422957ed15ba87588\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"ConfigFiles\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":2},{\"name\":\"Filterb7a052e759ce22a6d286\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Month\"}},\"type\":\"Categorical\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":3},{\"name\":\"Filter32e06cd5169ba024cebc\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Scope\"}},\"type\":\"Categorical\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":4},{\"name\":\"Filtereb948cd516b01e1be684\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Updated\"}},\"Function\":4}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":5},{\"name\":\"Filter1903c6d9257bb77a87c6\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"SizeInGB\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":0,\"isHiddenInViewMode\":false,\"ordinal\":6},{\"name\":\"Filter60b68703bd3a7c710c15\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"DataFiles\"}},\"Function\":0}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"DataFiles\"}},\"Function\":0}},\"Right\":{\"Literal\":{\"Value\":\"0L\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":7},{\"name\":\"Filterf914cae502870e3e0a92\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"AllFiles\"}},\"Function\":0}},\"type\":\"Advanced\",\"howCreated\":1,\"isHiddenInViewMode\":false,\"ordinal\":8}]",
- "height": 320.00,
- "width": 568.00,
- "x": 696.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"82948e1ddb2e21780b6c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":392,\"z\":3000,\"width\":184,\"height\":320,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubData.Month\"},{\"queryRef\":\"HubData.UpdatedRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h1\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"Month\"},\"Name\":\"HubData.Month\",\"NativeReferenceName\":\"Month1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h1\"}},\"Property\":\"UpdatedRange\"},\"Name\":\"HubData.UpdatedRange\",\"NativeReferenceName\":\"Export runs\"}]},\"columnProperties\":{\"HubExports.MonthRange\":{\"displayName\":\"Exported months\"},\"HubData.UpdatedRange\":{\"displayName\":\"Export runs\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported data'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 184.00,
- "x": 504.00,
- "y": 392.00,
- "z": 3000.00
+ "height": 320.0,
+ "width": 184.0,
+ "x": 504.0,
+ "y": 392.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"848befb23438ced87b45\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"94922a6795a3ce8b11e8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":4000,\"width\":280,\"height\":320,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"HubData.Scope\"},{\"queryRef\":\"HubData.MonthRange\"},{\"queryRef\":\"SparklineData(Sum(HubData.ConfigFiles)_[HubData.Month])\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"h\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Scope\"},\"Name\":\"HubData.Scope\",\"NativeReferenceName\":\"Scope1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"MonthRange\"},\"Name\":\"HubData.MonthRange\",\"NativeReferenceName\":\"Months\"},{\"SparklineData\":{\"Measure\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"ConfigFiles\"}},\"Function\":0}},\"Groupings\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"h\"}},\"Property\":\"Month\"}}]},\"Name\":\"SparklineData(Sum(HubData.ConfigFiles)_[HubData.Month])\",\"NativeReferenceName\":\"Exports\"}]},\"columnProperties\":{\"HubData.MonthRange\":{\"displayName\":\"Months\"},\"SparklineData(Sum(HubData.ConfigFiles)_[HubData.Month])\":{\"displayName\":\"Exports\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"271.0858680888317D\"}}}},\"selector\":{\"metadata\":\"HubData.Scope\"}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Monitored scopes'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"Filterd95a24070c888c009bdb\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"StorageData\"}},\"Property\":\"Scope\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 320.00,
- "width": 280.00,
- "x": 216.00,
- "y": 392.00,
- "z": 4000.00
+ "height": 320.0,
+ "width": 280.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"9c7800b5b666a051b7ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"9d008237dd01aba86300\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"ab042cba0ca36c2020bb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"ab7a51df7b48bdb79224\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"b39d28c6d0b4a8c0007e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b7a6cf94290a652a7080\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/DataIngestion#exports'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"bba11bc20d201365c201\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"c748167f29b58ee058a8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"de852627eba800208014\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2500,\"width\":200,\"height\":56,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"StorageData.Month\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"StorageData\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"},\"Name\":\"StorageData.Month\",\"NativeReferenceName\":\"Month\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"Month\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"syncGroup\":{\"groupName\":\"Month\",\"fieldChanges\":true,\"filterChanges\":true},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Exported dates'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Date filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"df5fc5815e9c584a1652\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2500.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2500.0
},
{
"config": "{\"name\":\"df5fc5815e9c584a1652\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":104,\"z\":4000,\"width\":200,\"height\":167.19876543210194,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\"}",
- "height": 167.20,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 167.2,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"e23f0d93c6a471d5e2d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Data%20ingestion%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Data%20ingestion%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.DataIngestion/featureName/Exports'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"760f4779578007494a07\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ee6f8cb4cccc26600586\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"fc8942cfa6b0120b0d7c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"7b8b109f19ce8d619301\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme7700204564881818.json"
-}
\ No newline at end of file
+}
diff --git a/src/power-bi/storage/Governance.Report/report.json b/src/power-bi/storage/Governance.Report/report.json
index 54a3f8308..03dbd6a4d 100644
--- a/src/power-bi/storage/Governance.Report/report.json
+++ b/src/power-bi/storage/Governance.Report/report.json
@@ -116,1456 +116,1456 @@
"displayName": "Managed disks",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "1b65e65e85a5204b0700",
"ordinal": 4,
"visualContainers": [
{
"config": "{\"name\":\"08d230f2800db021e877\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Disks.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"name\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#999900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'UnusedSavingsPlan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"13ec05da9ca4de601e2d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"0a349af0be7040700492\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1500,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.sku.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKU'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"1c4a63714270e62c35a3\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1500.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"0a3d7fb2a41c00be0550\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"12690a4c55b960e79672\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"1a2a7603120c12ac6aa5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"1af651cac0773494d4cb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1c4a63714270e62c35a3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":183.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"255abdf2eec605304388\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Disks.resourceGroup\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"},{\"queryRef\":\"Costs.ChargePeriod\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Disks.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriod\"},\"Name\":\"Costs.ChargePeriod\",\"NativeReferenceName\":\"ChargePeriod\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Disks.resourceGroup\":{\"displayName\":\"Resource group\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"441.43021990177425D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"104.55223880597015D\"}}}},\"selector\":{\"metadata\":\"Disks.location\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.48974304329354D\"}}}},\"selector\":{\"metadata\":\"Disks.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"86.20722391050697D\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"83.800630562379D\"}}}},\"selector\":{\"metadata\":\"Disks.diskType\"}}],\"columnFormatting\":[{\"properties\":{\"styleTotal\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}}],\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"grid\":[{\"properties\":{\"gridVertical\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Middle'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'ActiveSAS'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Attached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Reserved'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolMedium'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Unattached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Disks.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"330cfe7a37ed832036c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"37214c1d775deca4890c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":7000,\"width\":224,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}],\"Values\":[{\"queryRef\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\",\"NativeReferenceName\":\"Percent\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Sum(Disks.properties.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\":{\"displayName\":\"Percent\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Premium_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'StandardSSD_LRS'\"}}}}}]}}],\"legend\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 224.00,
- "x": 792.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 224.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"3e4c39c6800a60e6bb8d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"40533e45e2944ce55dad\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"4563a997120200c62e3d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3750,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2Fdisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3750.0
},
{
"config": "{\"name\":\"49989577a889d7323d8a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"562b5e0a91608ae97247\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1024,\"y\":8,\"z\":8000,\"width\":240.00000000000003,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.properties.diskState\",\"active\":true}],\"Values\":[{\"queryRef\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\",\"NativeReferenceName\":\"Percent\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskState\"},\"Name\":\"Disks.properties.diskState\",\"NativeReferenceName\":\"State\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Disks.properties.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\":{\"displayName\":\"Percent\"},\"Disks.properties.diskState\":{\"displayName\":\"State\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Premium_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'StandardSSD_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E3008C'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"'Unattached'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"'Attached'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reserved'\"}}}}}]}}],\"legend\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 240.00,
- "x": 1024.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 240.0,
+ "x": 1024.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"58dd0210584ae7340d4d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/ManagedDisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"58f781cd7d20945e9136\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"58fdffc368ba06419806\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"61bac6156218a7208103\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6365ac31ccbec60070bd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Disks.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Disks.id)\",\"NativeReferenceName\":\"Unattached disks\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(Disks.id)\":{\"displayName\":\"Unattached disks\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unattached disks'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"653663e0d015668c277e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"1c4a63714270e62c35a3\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"6f374c92d60b90a6cb1a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3500,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3500.0
},
{
"config": "{\"name\":\"798e99fa2c54aa58e052\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"9376427d4c042528d449\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"94fcbd1455e03a9b2156\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a091b4bbb61762795308\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"a517ffb97e47165b16eb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"a594380691909a5de897\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#managed-disks'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"a86095a00e7c1904b580\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"1c4a63714270e62c35a3\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"b0778333306a71eba79e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"b41642ef33ab64663343\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"b7a20920765047860b6a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"bec0c3ce065e44208ded\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c27f836c2e8ccbe51905\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"cebb9d40949880dca743\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Managed disks\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review managed disks and identify unattached disks.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"d34b297e1d3d5ee01b93\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"df4a03e2e0ad9d1c7a6d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e18c3e54ca1451a6e58a\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"e18c3e54ca1451a6e58a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"f155a7d04d1dc05ee00c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"94fcbd1455e03a9b2156\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Policy compliance",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "64af2f5032bd2cbe7219",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"0227794ae39ec9921c88\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"0c57bf8b41518e6c0810\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#policy-compliance'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"0d68934780c36708d00b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/PolicyCompliance'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"121b17a4562e3c98a70e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"168d04bcc0aeed88350e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"378fc7641856b7302b8d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"40323bff000700e19bd9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"459432e0bec010b295b4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":120,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\"}",
- "height": 120.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 120.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"45974cb988660e0800bc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"4e1672ab9aec08c050d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"5ad299f0c13517b456ac\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"61fb4ee530c670d1115d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":4000,\"width\":1048,\"height\":280,\"tabOrder\":33}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"PolicyAssignments.properties.displayName\",\"active\":true}],\"Values\":[{\"queryRef\":\"Count(PolicyStates.properties.resourceId)\"}],\"Tooltips\":[{\"queryRef\":\"Compliance calculation.NonCompliant\"},{\"queryRef\":\"Compliance calculation.Compliance\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Compliance calculation\",\"Type\":0},{\"Name\":\"p\",\"Entity\":\"PolicyAssignments\",\"Type\":0},{\"Name\":\"p1\",\"Entity\":\"PolicyStates\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.displayName\"},\"Name\":\"PolicyAssignments.properties.displayName\",\"NativeReferenceName\":\"Policy\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"},\"Name\":\"Compliance calculation.NonCompliant\",\"NativeReferenceName\":\"Non-compliant\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p1\"}},\"Property\":\"properties.resourceId\"}},\"Function\":2},\"Name\":\"Count(PolicyStates.properties.resourceId)\",\"NativeReferenceName\":\"Resources\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Compliance\"},\"Name\":\"Compliance calculation.Compliance\",\"NativeReferenceName\":\"Compliance1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"}}}]},\"columnProperties\":{\"PolicyAssignments.properties.displayName\":{\"displayName\":\"Policy\"},\"PolicyStates.properties.resourceId\":{\"displayName\":\"Total resource\"},\"Count(PolicyStates.properties.resourceId)\":{\"displayName\":\"Resources\"},\"Compliance calculation.NonCompliant\":{\"displayName\":\"Non-compliant\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"FillRule\":{\"Input\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"PolicyStates\"}},\"Property\":\"complianceScore\"}},\"FillRule\":{\"linearGradient3\":{\"min\":{\"color\":{\"Literal\":{\"Value\":\"'#990000'\"}},\"value\":{\"Literal\":{\"Value\":\"0.6D\"}}},\"mid\":{\"color\":{\"Literal\":{\"Value\":\"'#999900'\"}},\"value\":{\"Literal\":{\"Value\":\"0.8D\"}}},\"max\":{\"color\":{\"Literal\":{\"Value\":\"'#009900'\"}},\"value\":{\"Literal\":{\"Value\":\"1D\"}}},\"nullColoringStrategy\":{\"strategy\":{\"Literal\":{\"Value\":\"'noColor'\"}}}}}}}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"721fd782017b26b246ee\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"PolicyAssignments.properties.displayName\"},{\"queryRef\":\"PolicyStates.properties.policyAssignmentScope\"},{\"queryRef\":\"PolicyStates.properties.resourceId\"},{\"queryRef\":\"Table 2.Compliant\"},{\"queryRef\":\"Table 2.NonCompliant\"},{\"queryRef\":\"Table 2.Compliance\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PolicyAssignments\",\"Type\":0},{\"Name\":\"p1\",\"Entity\":\"PolicyStates\",\"Type\":0},{\"Name\":\"c\",\"Entity\":\"Compliance calculation\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.displayName\"},\"Name\":\"PolicyAssignments.properties.displayName\",\"NativeReferenceName\":\"Policy\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p1\"}},\"Property\":\"properties.policyAssignmentScope\"},\"Name\":\"PolicyStates.properties.policyAssignmentScope\",\"NativeReferenceName\":\"Scope\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p1\"}},\"Property\":\"properties.resourceId\"}},\"Function\":2},\"Name\":\"PolicyStates.properties.resourceId\",\"NativeReferenceName\":\"Resources\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Compliant\"},\"Name\":\"Table 2.Compliant\",\"NativeReferenceName\":\"Compliant1\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"},\"Name\":\"Table 2.NonCompliant\",\"NativeReferenceName\":\"Non-compliant\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"Compliance\"},\"Name\":\"Table 2.Compliance\",\"NativeReferenceName\":\"Compliance1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"NonCompliant\"}}}]},\"columnProperties\":{\"PolicyAssignments.properties.displayName\":{\"displayName\":\"Policy\"},\"PolicyStates.properties.policyAssignmentScope\":{\"displayName\":\"Scope\"},\"PolicyStates.properties.resourceId\":{\"displayName\":\"Resources\"},\"Table 2.NonCompliant\":{\"displayName\":\"Non-compliant\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Compliance calculation\"}},\"Property\":\"NonCompliant\"}},\"Right\":{\"Literal\":{\"Value\":\"null\"}}}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":1,\"Left\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Compliance calculation\"}},\"Property\":\"NonCompliant\"}},\"Right\":{\"Literal\":{\"Value\":\"0D\"}}}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"PolicyAssignments.properties.displayName\"}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"73409c32085a00d4c206\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/Microsoft_Azure_Policy/PolicyMenuBlade/~/overview'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"73859856296a04155ca6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"83ed7505650b0b46c413\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"8fe84dbb32290d4cdda4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"94136eea529e6e23bd7a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"99df2f3b30eea840b858\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":56,\"tabOrder\":3}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"459432e0bec010b295b4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a738157181ade2ddc062\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"abdc2cc0cb1e83670939\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":3000,\"width\":184,\"height\":88,\"tabOrder\":10}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"PolicyStates.complianceScore\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PolicyStates\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"complianceScore\"},\"Name\":\"PolicyStates.complianceScore\",\"NativeReferenceName\":\"complianceScore\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"complianceScore\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"25D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compliance'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"ae477e60e0189d730e60\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Policy compliance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review governance policies.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"b160bd6d2ae7b000abbc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"b27d7fc0538ab8be0aa3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"c02fcbb0b5de6d0b507b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c062ae1c1c9788020312\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"c4af5d306489abb5bb9d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"c5d8c269c06506c58ca1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"cb41307f2cc05da1e03a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d4fd157adce8aa056d26\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":56,\"z\":0,\"width\":200,\"height\":64,\"tabOrder\":9}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"PolicyAssignments.properties.displayName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PolicyAssignments\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.displayName\"},\"Name\":\"PolicyAssignments.properties.displayName\",\"NativeReferenceName\":\"properties.displayName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"PolicyAssignments.properties.displayName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"PolicyAssignments.properties.displayName\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Policy'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"459432e0bec010b295b4\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d807f8f511c483145a93\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"eb317f210086adae6175\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"f3d23a16b61430a0234d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"b160bd6d2ae7b000abbc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"fb3a2cf60d16c850704b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"a738157181ade2ddc062\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "SQL databases",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "93a1cd9ad3c0d9a55807",
"ordinal": 5,
"visualContainers": [
{
"config": "{\"name\":\"1175ddc64d45130b5d20\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"16b4db662c3a027bd655\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"19d0108c50e2bb9d10a7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"1da67875ac292130db46\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"95f2957026bcd266aa41\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"20542600c63a3e0b6897\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"21105451dd434800ba79\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"2186d674a98cc57b5274\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"25804ca02bb01a4c799e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":296,\"z\":2000,\"width\":1048,\"height\":416,\"tabOrder\":7}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"SQL DB.name\"},{\"queryRef\":\"SQL DB.resourceGroup\"},{\"queryRef\":\"SQL DB.location\"},{\"queryRef\":\"SQL DB.sku.name\"},{\"queryRef\":\"SQL DB.sku.capacity\"},{\"queryRef\":\"SQL DB.sku.tier\"},{\"queryRef\":\"SQL DB.properties.status\"},{\"queryRef\":\"SQL DB.properties.licenseType\"},{\"queryRef\":\"SQL DB.properties.requestedBackupStorageRedundancy\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"SQL DB.name\",\"NativeReferenceName\":\"Name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"resourceGroup\"},\"Name\":\"SQL DB.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"location\"},\"Name\":\"SQL DB.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.name\"},\"Name\":\"SQL DB.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.capacity\"},\"Name\":\"SQL DB.sku.capacity\",\"NativeReferenceName\":\"Capacity\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.tier\"},\"Name\":\"SQL DB.sku.tier\",\"NativeReferenceName\":\"Tier\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"properties.status\"},\"Name\":\"SQL DB.properties.status\",\"NativeReferenceName\":\"Status\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"properties.requestedBackupStorageRedundancy\"},\"Name\":\"SQL DB.properties.requestedBackupStorageRedundancy\",\"NativeReferenceName\":\"Backup storage redundancy\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"properties.licenseType\"},\"Name\":\"SQL DB.properties.licenseType\",\"NativeReferenceName\":\"License type\"}]},\"columnProperties\":{\"SQL DB.name\":{\"displayName\":\"Name\"},\"SQL DB.resourceGroup\":{\"displayName\":\"Resource group\"},\"SQL DB.location\":{\"displayName\":\"Region\"},\"SQL DB.sku.name\":{\"displayName\":\"SKU\"},\"SQL DB.sku.capacity\":{\"displayName\":\"Capacity\"},\"SQL DB.sku.tier\":{\"displayName\":\"Tier\"},\"SQL DB.properties.status\":{\"displayName\":\"Status\"},\"SQL DB.properties.requestedBackupStorageRedundancy\":{\"displayName\":\"Backup storage redundancy\"},\"SQL DB.properties.licenseType\":{\"displayName\":\"License type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"grid\":[{\"properties\":{\"gridVertical\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"urlIcon\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL Database'\"}}}}}]}}}",
"filters": "[]",
- "height": 416.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 2000.00
+ "height": 416.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"44dd9dba0dc4ad90572a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"95f2957026bcd266aa41\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"4b094e07841a80427851\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"662b368b95251bc32bcc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"6edf61a6633e54d0dd27\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":34}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(SqlDatabases.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(SqlDatabases.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL databases'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"7a04c3821757db19a407\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#sql-databases'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"7e06864c6ad62457e2b3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.Sql%2Fservers%2Fdatabases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"7e6f5a0e5a4502e1a0ec\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"SQL databases\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review SQL databases.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"8aaaef0a940ae419284e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"8b083e5a306a0d8acd13\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"8c761d51c06742910799\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"8db93b15e8bbde980e39\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"95f2957026bcd266aa41\",\"layouts\":[{\"id\":0,\"position\":{\"height\":184,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"991b447e4279ece34a75\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"9c12773fc0ec0b278a0c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"a939d4f0e086d384e39c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"a94d45a7b83126d16e36\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"ae0642a44319305bba3c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"b918b0538d978a1e3d11\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"bd6bdc202d243de006db\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c7c0f1bae806d1380bcc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":17}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"SqlDatabases.sku.name\",\"active\":true}],\"Values\":[{\"queryRef\":\"CountNonNull(SqlDatabases.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"sku.name\"},\"Name\":\"SqlDatabases.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"CountNonNull(SqlDatabases.id)\",\"NativeReferenceName\":\"Resources\"}]},\"columnProperties\":{\"SQL DB.name\":{\"displayName\":\"Name\"},\"SQL DB.resourceGroup\":{\"displayName\":\"Resource group\"},\"SQL DB.location\":{\"displayName\":\"Region\"},\"SQL DB.sku.name\":{\"displayName\":\"SKU\"},\"SQL DB.sku.capacity\":{\"displayName\":\"Capacity\"},\"SQL DB.sku.tier\":{\"displayName\":\"Tier\"},\"SQL DB.properties.status\":{\"displayName\":\"Status\"},\"SQL DB.properties.requestedBackupStorageRedundancy\":{\"displayName\":\"Backup storage redundancy\"},\"SQL DB.properties.licenseType\":{\"displayName\":\"License type\"},\"SqlDatabases.sku.name\":{\"displayName\":\"SKU\"},\"CountNonNull(SqlDatabases.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL Database'\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"cfc5fffa703c06164588\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d4309eb41c0483b5e508\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"dca6dfb3c417620bc8aa\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/SqlDatabases'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8aaaef0a940ae419284e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"dfd9f3e2ecae83022b81\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1000,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"SqlDatabases.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"SqlDatabases.name\",\"NativeReferenceName\":\"name1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"SqlDatabases.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL database'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"95f2957026bcd266aa41\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"e382108f08d998ed8018\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"e7368f8c0260cdb71941\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"e83f45a9d5c33166a0a5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"cfc5fffa703c06164588\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Summary",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "99c64d7a62040165c467",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"01142fea15a9908a46a6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"0651b78dee5ba524dc12\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":3000,\"width\":568,\"height\":184,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Resource types.SingularDisplayName\"},{\"queryRef\":\"Resources.type\"},{\"queryRef\":\"Count(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"ResourceTypes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"},\"Name\":\"Resources.type\",\"NativeReferenceName\":\"Type code\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"SingularDisplayName\"},\"Name\":\"Resource types.SingularDisplayName\",\"NativeReferenceName\":\"Resource type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Resources.id)\",\"NativeReferenceName\":\"Resources\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Resources.type\":{\"displayName\":\"Type code\"},\"Resource types.SingularDisplayName\":{\"displayName\":\"Resource type\"},\"Count(Resources.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"80.47719860875483D\"}}}},\"selector\":{\"metadata\":\"Count(Resources.id)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"230.34444446563967D\"}}}},\"selector\":{\"metadata\":\"Resource types.SingularDisplayName\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"230.90030133112407D\"}}}},\"selector\":{\"metadata\":\"Resources.type\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"general\":[{\"properties\":{\"altText\":{\"expr\":{\"Literal\":{\"Value\":\"'Azure Extension are hidden from that list'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource types'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter374e10d98a4e285604f8\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"ResourceTypes\"}},\"Property\":\"SingularDisplayName\"}},\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
- "height": 184.00,
- "width": 568.00,
- "x": 216.00,
- "y": 296.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"099054c00935a2404b6c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0bdebc021327a8c005d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"0df64d017e8aad542c69\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":568,\"height\":184,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Subscriptions.subscriptionId\"},{\"queryRef\":\"Count(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"subscriptionId\"},\"Name\":\"Subscriptions.subscriptionId\",\"NativeReferenceName\":\"Subscription Id\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Resources.id)\",\"NativeReferenceName\":\"Resources\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Subscriptions.subscriptionId\":{\"displayName\":\"Subscription Id\"},\"Count(Resources.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"236.24589912046713D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"233.44787422750716D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.subscriptionId\"}}],\"values\":[{\"properties\":{\"wordWrap\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscriptions'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"ad698e4d5886c943438d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Subscriptions\"}},\"Property\":\"subscriptionId\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false},{\"name\":\"1bf1e12f1a9d2354cbaa\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Subscriptions\"}},\"Property\":\"name\"}},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 184.00,
- "width": 568.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 568.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"11a27f861e3b893b352e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Resources.x_ResourceGroupId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_ResourceGroupId\"}},\"Function\":2},\"Name\":\"Min(Resources.x_ResourceGroupId)\",\"NativeReferenceName\":\"Count of x_ResourceGroupId1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"x_ResourceGroupId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource groups'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"18bbb5226bb18036b996\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1fe5c3f2108ed210b6b0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":376,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"azureMap\",\"projections\":{\"Category\":[{\"queryRef\":\"Region.RegionName\",\"active\":true}],\"Size\":[{\"queryRef\":\"CountNonNull(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Regions\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"Region.RegionName\",\"NativeReferenceName\":\"RegionName\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"id\"}},\"Function\":5},\"Name\":\"CountNonNull(Resources.id)\",\"NativeReferenceName\":\"Count of id\"}]},\"drillFilterOtherVisuals\":true,\"objects\":{\"mapControls\":[{\"properties\":{\"defaultStyle\":{\"expr\":{\"Literal\":{\"Value\":\"'grayscale_light'\"}}},\"showStylePicker\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showNavigationControls\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showSelectionControl\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"autoZoom\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"zoom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"worldWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"bubbleLayer\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"bubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"6L\"}}},\"minBubbleRadius\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"maxRadius\":{\"expr\":{\"Literal\":{\"Value\":\"23L\"}}},\"bubbleStrokeWidth\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"autoStrokeColor\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"layerPosition\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"clusteringEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"clusteredBubbleFillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"minZoom\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"maxZoom\":{\"expr\":{\"Literal\":{\"Value\":\"22L\"}}}}}],\"filledMap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"mapTransparency\":{\"expr\":{\"Literal\":{\"Value\":\"40L\"}}}}}],\"heatMapLayer\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"heatMapColorHigh\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}},\"heatMapColorCenter\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF8C00'\"}}}}},\"heatMapUseSize\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"maxZoom\":{\"expr\":{\"Literal\":{\"Value\":\"22L\"}}},\"minZoom\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"barChart\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"showAllDataPoints\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"FillRule\":{\"Input\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"id\"}},\"Function\":5}},\"FillRule\":{\"linearGradient3\":{\"min\":{\"color\":{\"Literal\":{\"Value\":\"'#3393dd'\"}}},\"mid\":{\"color\":{\"Literal\":{\"Value\":\"'#FF9100'\"}}},\"max\":{\"color\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}},\"nullColoringStrategy\":{\"strategy\":{\"Literal\":{\"Value\":\"'asZero'\"}}}}}}}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources by region'\"}}}}}]}}}",
"filters": "[]",
- "height": 376.00,
- "width": 472.00,
- "x": 792.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 376.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"212877ca1817db5061dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"248a0767c2e76c0164dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":184,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"2d9e029b7710da666023\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"388e9ffc2a7a2079014d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":56,\"z\":0,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"ResourceTypes.SingularDisplayName\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"ResourceTypes\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"SingularDisplayName\"},\"Name\":\"ResourceTypes.SingularDisplayName\",\"NativeReferenceName\":\"SingularDisplayName\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"ResourceTypes.SingularDisplayName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"ResourceTypes.SingularDisplayName\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resource type'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"248a0767c2e76c0164dc\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"39f95fd40216a37e0942\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"4a807a4ec97ab0a5c955\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1080,\"y\":487.99999999999994,\"z\":5000,\"width\":184,\"height\":224,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Region.RegionName\"},{\"queryRef\":\"Count(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Regions\",\"Type\":0},{\"Name\":\"r1\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"RegionName\"},\"Name\":\"Region.RegionName\",\"NativeReferenceName\":\"Region\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Resources.id)\",\"NativeReferenceName\":\"Resources\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r1\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Region.RegionName\":{\"displayName\":\"Region\"},\"Count(Resources.id)\":{\"displayName\":\"Resources\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{},\"selector\":{\"metadata\":\"Count(Resources.id)\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"89.63012539669484D\"}}}},\"selector\":{\"metadata\":\"Region.RegionName\"}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"general\":[{\"properties\":{\"altText\":{\"expr\":{\"Literal\":{\"Value\":\"'Azure Extension are hidden from that list'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Regions'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 184.00,
- "x": 1080.00,
- "y": 488.00,
- "z": 5000.00
+ "height": 224.0,
+ "width": 184.0,
+ "x": 1080.0,
+ "y": 488.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"516fb2ffd2b50c06a565\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"58c71a7e0ca3dae4d999\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"5f7864d5147a13a8ed1e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"633dd7f1940ea8585122\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"6841e4857a94437d2cc6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Summary\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review the subscriptions, resource groups, and resources deployed across your environment.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"79b39c72c88534c0934d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Resources.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Resources.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"7c3925fbe501c0c6c810\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"80aa9e5ed0b012663db9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"8508027b1dce67deda18\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"89a181f43b4809d0b000\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#Summary'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"a1df0f5e9ca0a844118d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"a8e5ad86800de0e6901c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"ac61336fa45941ed7e68\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"bb50fd3e47a8617e679b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"c5b2b920b7469ecbea0e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":7000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Resources.location)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"}},\"Function\":2},\"Name\":\"Min(Resources.location)\",\"NativeReferenceName\":\"Count of location\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Regions'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 792.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c601abf708de420d2e25\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"d01d03470e44a4da4ce2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d228897c8274b71dbae6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"248a0767c2e76c0164dc\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"d498349a623379dd14ad\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"248a0767c2e76c0164dc\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"d554e2132a3c56071262\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"d8d17506202d1e0a04b5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"dd45e0b5c86b57178ab4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"dd5505075dc53b0a85eb\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"5f7864d5147a13a8ed1e\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"dd62df639489856ca010\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Subscriptions.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Subscriptions.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscriptions'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"f0a268a18a45d69051d2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":6000,\"width\":855.9999999999999,\"height\":224,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.name\"},{\"queryRef\":\"Resources.resourceGroup\"},{\"queryRef\":\"Subscriptions.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Resources.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"name\"},\"Name\":\"Resources.name\",\"NativeReferenceName\":\"Resource\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Resources.resourceGroup\":{\"displayName\":\"Resource group\"},\"Resources.name\":{\"displayName\":\"Resource\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"238.72669591253444D\"}}}},\"selector\":{\"metadata\":\"Resources.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"389.1988858460355D\"}}}},\"selector\":{\"metadata\":\"Resources.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"202.105796984634D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Resources'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
- "height": 224.00,
- "width": 856.00,
- "x": 216.00,
- "y": 488.00,
- "z": 6000.00
+ "height": 224.0,
+ "width": 856.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"f3ec5f25ed929c11e807\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"f8a3d5d510b0d75a018c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"212877ca1817db5061dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection04cb7247170034c13d74",
"visualContainers": [
{
"config": "{\"name\":\"08c50a4ebb0358a973a2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"b9a0d0b56d88e89400b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0951dca0791289048511\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"16824f1e8675d7b18849\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"17da4f869475d0c73352\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1b9ac75fc3c3e096207d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":424,\"width\":776,\"x\":40,\"y\":96,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report connects to Azure Resource Graph and cost data in a storage account β either directly exported from Microsoft Cost Management or as part of FinOps hubs. This report supports up to $2 million of cost data per month with incremental refresh enabled. If you need to support more than $2 million per month, please use \"},{\"value\":\"FinOps hubs\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\" with Data Explorer.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect to Azure Resource Graph and your storage account:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Create new exports in Cost Management to initiate data ingestion. Remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet β Required to calculate accurate and complete savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Connect to your storage account\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Storage URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If connecting to FinOps hubs:\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"storageUrlForPowerBI\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"If connecting directly to Cost Management exports in storage:\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Open the desired storage account in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ SettingsΒ >Β EndpointsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Copy theΒ Data Lake StorageΒ URL.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Append the container and export path, if applicable\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"RangeStart\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" / \"},{\"value\":\"RangeEnd \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Optional date range you would like to limit to. If not specified, the report will include all data in storage.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Experimental: Add Missing Prices \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Indicate whether you want missing prices to be populated from the exported price sheet data. This option requires a large join which may increase refresh times and limit the total monthly cost supported.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Deprecated: Perform Extra Query Optimizations \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Indicate whether you want to support FOCUS 1.0 preview and additional custom columns from FinOps toolkit 0.7 reports. This option is for backwards compatibility only and will be removed in a future release.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report imports all cost data, which can be slow for large accounts. If you run into any performance issues or timeouts, please consider using FinOps hubs with Data Explorer. Data Explorer provides advanced analytics capabilities, significantly improves performance, and offers new capabilities like forecasting and anomaly detection. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Learn more about FinOps hubs\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to your account, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the configured storage account container (\\\"ingestion\\\" for FinOps hubs).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8bddd557d31b4bca135\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1e0db69966960a28002e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"2d22308cb10dcc087c63\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'edcfcfcccda883d64d08'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8bddd557d31b4bca135\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2d516cf0461a0900c710\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"2f88fe1f9d6d506d0508\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":10000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -1574,1191 +1574,1191 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 10000.00
+ "z": 10000.0
},
{
"config": "{\"name\":\"343341e97b7308150de2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":8000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Policy and governance report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" summarizes your Microsoft Cloud governance posture. It offers the standard metrics aligned with the Cloud Adoption Framework to facilitate identifying issues, applying recommendations, and resolving compliance gaps.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The Cloud Adoption Framework Govern methodology provides a structured approach for establishing and optimizing cloud governance in Azure, including areas like regulatory compliance, security, operations, cost, data, resource management, and artificial intelligence (AI).\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \"},{\"value\":\"Policy and governance capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/manage/governance\"},{\"value\":\" in the FinOps Framework. \"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/Governance\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 8000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"3dbd558f332ccbe8d271\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"49386d54185a9d091d60\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"4f37542549a00a0d0567\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"6c5d8dc299e02d8c4c04\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"572fa2574ac8093dccb0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":6000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 6000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"5d4774a7237bab6e6e0e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
"config": "{\"name\":\"61b99c161600bcd08049\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"625f0f2c3e3e50817073\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"9ffcacc4c0d19818e9e1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"6c5d8dc299e02d8c4c04\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":7000,\"width\":272,\"height\":368,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 7000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"77d17cb466cc547d7be1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"794cf1e679ecc0b6a290\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"7f45b86e304dcd91ca9b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'2f08f03f1c17a4448378'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"81f3ad399001b121980c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 3000.00
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"91f16ff5c81c3580d54c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8bddd557d31b4bca135\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"93c0a75fe687ca16c769\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"d8bddd557d31b4bca135\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"95af8eb7934776184738\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"b9a0d0b56d88e89400b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"95bfe3b3d6e6574c04b7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"96a699bca9168a144165\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":12000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 11000.00
+ "y": 112.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"99e94f2cdd163005c3e4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":4000,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"9a69c8906862d324b003\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"9ffcacc4c0d19818e9e1\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"9d51a450010690e38e14\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"9ffcacc4c0d19818e9e1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":5000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 5000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"ad133cfd2c0beb1ab921\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b076d0dac3128804a7e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
},
{
"config": "{\"name\":\"b4453dbc0604700e40d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b8bdafac732b5c3dce37\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b9a0d0b56d88e89400b7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":6000,\"width\":272,\"height\":368,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 6000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"bc04f2868305b29d0239\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"b9a0d0b56d88e89400b7\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"bfbf6374780bb9645700\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c20c255b395a4d402a98\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":4000,\"width\":776,\"height\":384,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear RangeStart, RangeEnd, Number of Months date parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 4000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"c2c6189071b5d7c6ec49\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":5000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'edcfcfcccda883d64d08'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"c811028bc0ca12a83420\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"6c5d8dc299e02d8c4c04\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"cee7ae10bd05778784c2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"d0270bd10c5085d9d33c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d184e5815389da951190\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":9000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Policy and governance\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 9000.00
+ "z": 9000.0
},
{
- "config": "{\"name\":\"d29000df9b0a2abc5015\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"d29000df9b0a2abc5015\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d326a07aa710a27b75d1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"d3eafe8b0066d48e586c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting tips\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"6c5d8dc299e02d8c4c04\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"d421a92f1e0c1dc52044\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":2000,\"width\":96,\"height\":32,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 2000.00
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"d7d7744d98ca90a96c22\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"d8bddd557d31b4bca135\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
- "x": 216.00,
- "y": 113.00,
- "z": 12000.00
+ "x": 216.0,
+ "y": 113.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"e2c1f687e750d62d5c8a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"9ffcacc4c0d19818e9e1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"e4a948d409b3b9e253db\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"b9a0d0b56d88e89400b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"e57ba4720d4adadd0dd1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":1000,\"width\":96,\"height\":32,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"96a699bca9168a144165\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 1000.00
+ "y": 488.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"efa6512eb467ee44dccb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"3dbd558f332ccbe8d271\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"f7fbd0f998d7d74e1a9d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'3b34c72ea115d83ce03e'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6c5d8dc299e02d8c4c04\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"f84d3940511b3d884294\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"9ffcacc4c0d19818e9e1\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Network security groups",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "b0a8741db2baa88615be",
"ordinal": 6,
"visualContainers": [
{
"config": "{\"name\":\"0e0703af4acec2aed70e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"0ed92ef5310c088d4875\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Network security groups\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Review network security groups.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"1317c7e4d06a364e2d6b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.Network%2FNetworkSecurityGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"23e1968d4c112690c998\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"29a5ef21806beb49d448\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"2cb4aecba90415214964\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"2e6ef7400707438a0742\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"be370a750e4ab032103b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2fe04cb08250c370e981\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":247.79258455738835,\"z\":625,\"width\":200,\"height\":64,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationAddressPrefix\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationAddressPrefix\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationAddressPrefix\",\"NativeReferenceName\":\"properties.securityRules.properties.destinationAddressPrefix\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.destinationAddressPrefix\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Destination address prefix'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"be370a750e4ab032103b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 247.79,
- "z": 625.00
+ "z": 625.0
},
{
"config": "{\"name\":\"39a891afa42104168cb7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"3a69f8e6162bb2a7692e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"3ca661450de31d085e5b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":311.79258455738835,\"z\":562,\"width\":200,\"height\":64,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationPortRange\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationPortRange\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.destinationPortRange\",\"NativeReferenceName\":\"properties.securityRules.properties.destinationPortRange\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.destinationPortRange\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Destination port range'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"be370a750e4ab032103b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 311.79,
- "z": 562.00
+ "z": 562.0
},
{
"config": "{\"name\":\"49e1b77ce83040025ee0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"4ac9b33f37b63eede7e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"57bfc73620972c8a2d00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":488.00000000000006,\"z\":3000,\"width\":1048,\"height\":224,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Network Security Groups.name\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.name\"},{\"queryRef\":\"Network Security Groups.location\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.access\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.direction\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.priority\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.sourceAddressPrefix\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.sourcePortRange\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\"},{\"queryRef\":\"Network Security Groups.properties.securityRules.properties.destinationPortRange\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network Security Groups.name\",\"NativeReferenceName\":\"Resource name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.name\"},\"Name\":\"Network Security Groups.properties.securityRules.name\",\"NativeReferenceName\":\"Security rules name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network Security Groups.location\",\"NativeReferenceName\":\"location\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.access\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.access\",\"NativeReferenceName\":\"Access\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.direction\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.direction\",\"NativeReferenceName\":\"Direction\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.priority\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.priority\",\"NativeReferenceName\":\"Priority\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourceAddressPrefix\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.sourceAddressPrefix\",\"NativeReferenceName\":\"Source address prefix\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourcePortRange\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.sourcePortRange\",\"NativeReferenceName\":\"Source port range\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationAddressPrefix\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\",\"NativeReferenceName\":\"Destination address prefix\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.destinationPortRange\"},\"Name\":\"Network Security Groups.properties.securityRules.properties.destinationPortRange\",\"NativeReferenceName\":\"Destination port range\"}]},\"columnProperties\":{\"Network Security Groups.name\":{\"displayName\":\"Resource name\"},\"Network Security Groups.properties.securityRules.name\":{\"displayName\":\"Security rules name\"},\"Network Security Groups.properties.securityRules.properties.access\":{\"displayName\":\"Access\"},\"Network Security Groups.properties.securityRules.properties.direction\":{\"displayName\":\"Direction\"},\"Network Security Groups.properties.securityRules.properties.priority\":{\"displayName\":\"Priority\"},\"Network Security Groups.properties.securityRules.properties.sourceAddressPrefix\":{\"displayName\":\"Source address prefix\"},\"Network Security Groups.properties.securityRules.properties.sourcePortRange\":{\"displayName\":\"Source port range\"},\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\":{\"displayName\":\"Destination address prefix\"},\"Network Security Groups.properties.securityRules.properties.destinationPortRange\":{\"displayName\":\"Destination port range\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"251.28358432225798D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"99D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.properties.sourcePortRange\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"138D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.properties.destinationAddressPrefix\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"256.5865129895632D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"114.44774773338557D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.properties.securityRules.properties.destinationPortRange\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'NSG rules'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
- "height": 224.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 488.00,
- "z": 3000.00
+ "height": 224.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"653a6617bda60e376c11\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":104,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Network Security Groups.isWarning\",\"active\":true}],\"Values\":[{\"queryRef\":\"CountNonNull(NetworkSecurityGroups.id)\"}],\"Tooltips\":[{\"queryRef\":\"Divide(Count(NetworkSecurityGroups.id), ScopedEval(Count(NetworkSecurityGroups.id), []))\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"isWarning\"},\"Name\":\"Network Security Groups.isWarning\",\"NativeReferenceName\":\"Warning\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"CountNonNull(NetworkSecurityGroups.id)\",\"NativeReferenceName\":\"Count of id\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"id\"}},\"Function\":2}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"id\"}},\"Function\":2}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Count(NetworkSecurityGroups.id), ScopedEval(Count(NetworkSecurityGroups.id), []))\",\"NativeReferenceName\":\"Percent\"}]},\"columnProperties\":{\"Network Security Groups.isWarning\":{\"displayName\":\"Warning\"},\"CountNonNull(NetworkSecurityGroups.id)\":{\"displayName\":\"Resources\"},\"Divide(Count(NetworkSecurityGroups.id), ScopedEval(Count(NetworkSecurityGroups.id), []))\":{\"displayName\":\"Percent\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Right\":{\"Literal\":{\"Value\":\"'False'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#990000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Right\":{\"Literal\":{\"Value\":\"'True'\"}}}}}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Warning state'\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"6bd7ff71c78395eb4612\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6cfee6b93083705e9162\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6e5da6f1d15339a014b8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"7b324f035bdc1b533019\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"7c111d2009829ac240a2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"7cdbd08e0310de784ae4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#network-security-groups'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"7d04f37e4ac490077c54\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"92cce4eeb23245884086\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"939c834307c2c51108b0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"96e7cdb7b57340b73e12\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"be370a750e4ab032103b\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"9790d2f1989799c9b657\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(SqlDatabases.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"s\",\"Entity\":\"SqlDatabases\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(SqlDatabases.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SQL databases'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"a63d7640708332cc6530\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"b2125e694b5edece1980\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b2589d22aaca11289ab8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":856,\"height\":184,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Minimize Open Ports: Only open the ports that are absolutely necessary for your application. This reduces the attack surface and potential vulnerabilities.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Use Specific IP Ranges: Restrict access to specific IP addresses or ranges rather than allowing broad access (e.g., avoid using 0.0.0.0/0). This limits exposure to only trusted sources.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Apply the Principle of Least Privilege: Ensure that the permissions granted are the minimum necessary for the task. This applies to both the ports and the users accessing them.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Regularly Review and Update Rules: Periodically review your NSG rules to ensure they are still relevant and necessary. Remove any rules that are no longer needed.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Segment Your Network: Use subnets to logically segment your network. This helps in isolating different parts of your network and applying more granular security controls.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Monitor and Log Traffic: Enable logging and monitoring to keep track of traffic patterns and detect any unusual activity. This helps in identifying potential security threats early.\"}],\"listType\":\"ordered\"},{\"textRuns\":[{\"value\":\"Use Strong Network Controls: Implement strong network controls and governance to manage your network security elements effectively. This includes using tools to monitor and automate security processes.\"}],\"listType\":\"ordered\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Tips'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"null\"}}}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}]}}}",
- "height": 184.00,
- "width": 856.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 184.0,
+ "width": 856.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"be370a750e4ab032103b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":375.79258455738835,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\"}",
"height": 375.79,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"c5dd5f129d40088c29b0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"c6d166d6c050110c03de\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"d27cb06743d82c523394\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"d7248c02ebb95a508bd0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e0d5460005508650b537\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6bd7ff71c78395eb4612\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"e49dee65666573e49a2e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/NetworkSecurityGroups'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e9c0376586360cadbd33\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"e9c0376586360cadbd33\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"ef3aa9e924183e1decd8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":120,\"z\":1000,\"width\":200,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.sourceAddressPrefix\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourceAddressPrefix\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.sourceAddressPrefix\",\"NativeReferenceName\":\"properties.securityRules.properties.sourceAddressPrefix\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.sourceAddressPrefix\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Source address prefix'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"be370a750e4ab032103b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"f9b35d3236ca23672e4d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":200,\"z\":2000,\"width\":1048,\"height\":280,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Network Security Groups.name\"},{\"queryRef\":\"Network Security Groups.location\"},{\"queryRef\":\"Network Security Groups.resourceGroup\"},{\"queryRef\":\"Subscriptions.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network Security Groups.name\",\"NativeReferenceName\":\"Name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Network Security Groups.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network Security Groups.location\",\"NativeReferenceName\":\"Region\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Network Security Groups.name\":{\"displayName\":\"Name\"},\"Network Security Groups.resourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"},\"Network Security Groups.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"308.62206736303347D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"267.9859407231168D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"313.07545598871303D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"131.0684410646388D\"}}}},\"selector\":{\"metadata\":\"Network Security Groups.location\"}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'False'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"NetworkSecurityGroups\"}},\"Property\":\"isWarning\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'True'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Network Security Groups.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Network security group'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 200.00,
- "z": 2000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 200.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"fa631a70600545841969\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":184,\"z\":750,\"width\":200,\"height\":64,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"NetworkSecurityGroups.properties.securityRules.properties.sourcePortRange\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"n\",\"Entity\":\"NetworkSecurityGroups\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.securityRules.properties.sourcePortRange\"},\"Name\":\"NetworkSecurityGroups.properties.securityRules.properties.sourcePortRange\",\"NativeReferenceName\":\"properties.securityRules.properties.sourcePortRange\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"NetworkSecurityGroups.properties.securityRules.properties.sourcePortRange\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Source port range'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"be370a750e4ab032103b\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 184.00,
- "z": 750.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 184.0,
+ "z": 750.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Virtual machines",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "dca176302754c6dc09e1",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"08cec3ef1ec35066e008\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"0b0e7fa726d60cec6867\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"0ebf77e79094d920982c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"0ee8f55508b0c5e5b6ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1de3c5bf06d7412d47ce\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":280,\"height\":184,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS type\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count per OS type'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1e4cbff93282cbe46e18\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"298abd7c682347ea0edc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":487.99999999999994,\"z\":6000,\"width\":568,\"height\":224,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Network interfaces.name\"},{\"queryRef\":\"Network interfaces.location\"},{\"queryRef\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\"},{\"queryRef\":\"Public ip addresses.name\"},{\"queryRef\":\"Public ip addresses.properties.ipAddress\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"n\",\"Entity\":\"NetworkInterfaces\",\"Type\":0},{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network interfaces.name\",\"NativeReferenceName\":\"Network interface\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network interfaces.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.ipConfigurations.properties.privateIPAddress\"},\"Name\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\",\"NativeReferenceName\":\"Private IP address\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"name\"},\"Name\":\"Public ip addresses.name\",\"NativeReferenceName\":\"Public IP name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.ipAddress\"},\"Name\":\"Public ip addresses.properties.ipAddress\",\"NativeReferenceName\":\"Public IP address\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Network interfaces.name\":{\"displayName\":\"Network interface\"},\"Network interfaces.location\":{\"displayName\":\"Region\"},\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\":{\"displayName\":\"Private IP address\"},\"Public ip addresses.name\":{\"displayName\":\"Public IP name\"},\"Public ip addresses.properties.ipAddress\":{\"displayName\":\"Public IP address\"}},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IP addresses'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 568.00,
- "x": 696.00,
- "y": 488.00,
- "z": 6000.00
+ "height": 224.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 488.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"31e215c2b5ba908ed011\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(VirtualMachines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(VirtualMachines.id)\",\"NativeReferenceName\":\"Virtual machines\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(VirtualMachines.id)\":{\"displayName\":\"Virtual machines\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machines'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"4135ba42a842478c47b1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2FVirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"4352e77408b0ce479308\",\"layouts\":[{\"id\":0,\"position\":{\"height\":247.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\"}",
- "height": 248.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 248.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"5182a3ec45ec0e9e0547\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"52557c2b39150d032da9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"545bd235010d3268380c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"5634d2646d4752371578\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"64d5366c2320e731aed0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"67d01b1b96366a8738e7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"703905fcac0a6b261439\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"742ad2ddc5c0a1bd6b38\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"7fdfde160a814bbd021c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%Policy%20and%20governance%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Policy%20and%20governance%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.Governance/featureName/VirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"87411ce2d815a4bc895e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":5000,\"width\":280,\"height\":184,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"Power state\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"Power state\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"optimizeLabelDisplay\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelOverflow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'Auto'\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableTitleDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableBackground\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"backgroundColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0.4}}}}},\"labelContentLayout\":{\"expr\":{\"Literal\":{\"Value\":\"'SingleLine'\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM stopped'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF8C00'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM deallocated'\"}}}}}]}}],\"ribbonBands\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count by state'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 504.00,
- "y": 104.00,
- "z": 5000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 504.0,
+ "y": 104.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"8879372918e003470a1a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"96218f53d6385b33c2dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"96275aa6740e602993b6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":7000,\"width\":472,\"height\":224,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"204.98988921419917D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.98078219913356D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{},\"selector\":{\"metadata\":\"Disks.location\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 472.00,
- "x": 216.00,
- "y": 488.00,
- "z": 7000.00
+ "height": 224.0,
+ "width": 472.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"a0b4c4ee144b29db2bc8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"a417cb90d3535729c6e5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(PublicIPAddresses.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(PublicIPAddresses.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IPs'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"a609acfa67c6543aa589\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Virtual machines\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Delete, archive, or change SKU for unused disks to reduce waste.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"abcb7df00e40a41e0b4d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"ade31242b685d6cb27c7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1000,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"VirtualMachines.name\",\"NativeReferenceName\":\"name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"VirtualMachines.name\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"4352e77408b0ce479308\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"b00f973461d301238a1d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"b2cb2ae96a1585916e4c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"bccc60d3ba36ebd844e3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 792.00,
- "y": 8.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"be76943d664dd6780e5d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":183.99999999999994,\"z\":0,\"width\":192,\"height\":64,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.hardwareProfile.vmSize\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"VirtualMachines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"hardwareProfile.vmSize\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.hardwareProfile.vmSize\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"4352e77408b0ce479308\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 184.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 184.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"c346c6231caa7cb12722\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"c62a86aea8419e2b3ca3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"cf8e65cfe1ab79572ed4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"cfe6643537050e7ce13c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"d85b17bf610cd0648d63\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"d8c6d3763ac05d123a18\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"08cec3ef1ec35066e008\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"e4fd0b7323b435328850\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Virtual Machines.resourceGroup\"},{\"queryRef\":\"Virtual Machines.hardwareProfile.vmSize\"},{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"},{\"queryRef\":\"Virtual Machines.storageProfile.imageReference.sku\"},{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"},{\"queryRef\":\"Virtual Machines.licenseType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Virtual Machines.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"Virtual Machines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"Size\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"State\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.imageReference.sku\"},\"Name\":\"Virtual Machines.storageProfile.imageReference.sku\",\"NativeReferenceName\":\"Image reference SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"licenseType\"},\"Name\":\"Virtual Machines.licenseType\",\"NativeReferenceName\":\"License type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Subscriptions.name\":{\"displayName\":\"Subscription name\"},\"Virtual Machines.resourceGroup\":{\"displayName\":\"Resource group\"},\"Virtual Machines.hardwareProfile.vmSize\":{\"displayName\":\"Size\"},\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"State\"},\"Virtual Machines.storageProfile.imageReference.sku\":{\"displayName\":\"Image reference SKU\"},\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS\"},\"Virtual Machines.licenseType\":{\"displayName\":\"License type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"185.27678387042303D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"198D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.storageProfile.imageReference.sku\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"114D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.powerState.displayStatus\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"191.47622535693588D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"246.17910804947712D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.07462149101514D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.hardwareProfile.vmSize\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine summary'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"e921ce77c7da4053c234\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/Governance#virtual-machines'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"5182a3ec45ec0e9e0547\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"ebb936a249495d98c597\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"4352e77408b0ce479308\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f169f5ff3ecedc070a40\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":184,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Advisor.properties.impactedValue\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"},{\"queryRef\":\"Advisor.properties.extendedProperties.currentSku\"},{\"queryRef\":\"Advisor.properties.extendedProperties.targetSku\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"},\"Name\":\"Advisor.properties.impactedValue\",\"NativeReferenceName\":\"Resource name1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Annual savings\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.currentSku\"},\"Name\":\"Advisor.properties.extendedProperties.currentSku\",\"NativeReferenceName\":\"Current SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.targetSku\"},\"Name\":\"Advisor.properties.extendedProperties.targetSku\",\"NativeReferenceName\":\"Target SKU\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0}}}]},\"columnProperties\":{\"Advisor.properties.impactedValue\":{\"displayName\":\"Resource name\"},\"Sum(Advisor.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Monthly savings\"},\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Annual savings\"},\"Advisor.properties.extendedProperties.currentSku\":{\"displayName\":\"Current SKU\"},\"Advisor.properties.extendedProperties.targetSku\":{\"displayName\":\"Target SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"201D\"}}}},\"selector\":{\"metadata\":\"Advisor.properties.impactedValue\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter1842f9a0958b740359a3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.shortDescription.solution\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 472.00,
- "x": 792.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"f426c02a170e103d3568\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"4352e77408b0ce479308\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme42364535749146226.json"
-}
\ No newline at end of file
+}
diff --git a/src/power-bi/storage/RateOptimization.Report/report.json b/src/power-bi/storage/RateOptimization.Report/report.json
index cb7234777..97b70315b 100644
--- a/src/power-bi/storage/RateOptimization.Report/report.json
+++ b/src/power-bi/storage/RateOptimization.Report/report.json
@@ -1,5 +1,5 @@
{
- "config": "{\"version\":\"5.61\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme6084012566499879.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"1a7083923871d04da2b3\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filtera818181820530c25c45d\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"5182341910d53d413a27\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"313482e7195b2ed18129\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"0148dfb059d7949a29d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4cabaa169baeca1b8080\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"69114f306b76c740a03c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b389d7f5c05321d8127b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d88c851bd50b961bc16\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8ba89e3f006403667181\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"df3f3c6f9bd0e807cd81\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ebf5ba8501e972165db3\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e9dfc1e085645a8c8005\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"58e88efc63a58b1847d6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4078cb61e9b049519a12\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b57153d5ac95dad90786\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7c0889a5089ea186b07a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2f0882f7ca0070d0169c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"578a434f80067b75ea49\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4c79671339600adb2691\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"91392c0ee33b36958068\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6ed4cd50da005230375\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"05856180928343b2d0c4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8d83e43010c85964b5c0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"78ca84696e70348d2c60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a9f2985e905d3c192ee6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"09fcc10359aade2ba483\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"50472c85677e09185d92\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f016730bcc0a4a662d82\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"28b3fe3cc7e987cdbb43\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ea9a802ad175b96a3827\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"560cd6a70de722262c88\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6624afaa6700dd9432a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"857dfdfd857619dd348b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a512a882a4657b039cc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b7ae40b345d8195c055e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"820f1580085ab0a9d8ea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"bac79bb9227a56c11a7b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"40c8523d8a2030d8842b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4a344e7f9bc904708609\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e99ee2e98ccb55ecac66\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4ad1bd8a48115a0d825a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"dee8b32d112eb77989c5\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"03c87bb075441076ab92\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"85c3641a11980d765c1a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"71bbbc7574e41a269a10\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4293f107095c44162875\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"331b6fc06aa92a0e83a0\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1f83a1f502cc7935b715\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d8566f06b2eb63d00543\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8fee30d049d35e2dd976\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1171007a43d77507b0ae\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"e77913aacc1377451e6d\":{\"isHidden\":false},\"b603a1000a76ecc4e046\":{\"isHidden\":true},\"abd13ae0d620aa359558\":{\"isHidden\":false},\"c4e1c9a492ab70b2e3b4\":{\"isHidden\":true},\"9fbd72ff5a9e09868003\":{\"isHidden\":true},\"0a864fd2a7ce412989c8\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"e99ee2e98ccb55ecac66\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"6e327bb59d3eed04e4d0\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filtera818181820530c25c45d\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"5182341910d53d413a27\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"313482e7195b2ed18129\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"0148dfb059d7949a29d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4cabaa169baeca1b8080\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"69114f306b76c740a03c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b389d7f5c05321d8127b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d88c851bd50b961bc16\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8ba89e3f006403667181\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"df3f3c6f9bd0e807cd81\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ebf5ba8501e972165db3\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e9dfc1e085645a8c8005\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"58e88efc63a58b1847d6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4078cb61e9b049519a12\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b57153d5ac95dad90786\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7c0889a5089ea186b07a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2f0882f7ca0070d0169c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"578a434f80067b75ea49\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4c79671339600adb2691\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"91392c0ee33b36958068\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6ed4cd50da005230375\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"05856180928343b2d0c4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8d83e43010c85964b5c0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"78ca84696e70348d2c60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a9f2985e905d3c192ee6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"09fcc10359aade2ba483\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"50472c85677e09185d92\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f016730bcc0a4a662d82\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"28b3fe3cc7e987cdbb43\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ea9a802ad175b96a3827\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"560cd6a70de722262c88\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6624afaa6700dd9432a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"857dfdfd857619dd348b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a512a882a4657b039cc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b7ae40b345d8195c055e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"820f1580085ab0a9d8ea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"bac79bb9227a56c11a7b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"40c8523d8a2030d8842b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4a344e7f9bc904708609\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e99ee2e98ccb55ecac66\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4ad1bd8a48115a0d825a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"dee8b32d112eb77989c5\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"03c87bb075441076ab92\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"85c3641a11980d765c1a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"71bbbc7574e41a269a10\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4293f107095c44162875\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"331b6fc06aa92a0e83a0\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1f83a1f502cc7935b715\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d8566f06b2eb63d00543\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8fee30d049d35e2dd976\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1171007a43d77507b0ae\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"e77913aacc1377451e6d\":{\"isHidden\":true},\"b603a1000a76ecc4e046\":{\"isHidden\":true},\"abd13ae0d620aa359558\":{\"isHidden\":true},\"c4e1c9a492ab70b2e3b4\":{\"isHidden\":true},\"9fbd72ff5a9e09868003\":{\"isHidden\":false},\"0a864fd2a7ce412989c8\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"e99ee2e98ccb55ecac66\"]}},{\"displayName\":\"Get started - Help\",\"name\":\"97ec54e0221e05615330\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filtera818181820530c25c45d\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"5182341910d53d413a27\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"313482e7195b2ed18129\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"0148dfb059d7949a29d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4cabaa169baeca1b8080\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"69114f306b76c740a03c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b389d7f5c05321d8127b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d88c851bd50b961bc16\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8ba89e3f006403667181\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"df3f3c6f9bd0e807cd81\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ebf5ba8501e972165db3\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e9dfc1e085645a8c8005\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"58e88efc63a58b1847d6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4078cb61e9b049519a12\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b57153d5ac95dad90786\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7c0889a5089ea186b07a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2f0882f7ca0070d0169c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"578a434f80067b75ea49\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4c79671339600adb2691\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"91392c0ee33b36958068\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6ed4cd50da005230375\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"05856180928343b2d0c4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8d83e43010c85964b5c0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"78ca84696e70348d2c60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a9f2985e905d3c192ee6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"09fcc10359aade2ba483\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"50472c85677e09185d92\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f016730bcc0a4a662d82\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"28b3fe3cc7e987cdbb43\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ea9a802ad175b96a3827\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"560cd6a70de722262c88\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6624afaa6700dd9432a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"857dfdfd857619dd348b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a512a882a4657b039cc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b7ae40b345d8195c055e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"820f1580085ab0a9d8ea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"bac79bb9227a56c11a7b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"40c8523d8a2030d8842b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4a344e7f9bc904708609\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e99ee2e98ccb55ecac66\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4ad1bd8a48115a0d825a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"dee8b32d112eb77989c5\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"03c87bb075441076ab92\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"85c3641a11980d765c1a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"71bbbc7574e41a269a10\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4293f107095c44162875\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"331b6fc06aa92a0e83a0\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1f83a1f502cc7935b715\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d8566f06b2eb63d00543\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8fee30d049d35e2dd976\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1171007a43d77507b0ae\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"e77913aacc1377451e6d\":{\"isHidden\":true},\"b603a1000a76ecc4e046\":{\"isHidden\":true},\"abd13ae0d620aa359558\":{\"isHidden\":true},\"c4e1c9a492ab70b2e3b4\":{\"isHidden\":false},\"9fbd72ff5a9e09868003\":{\"isHidden\":true},\"0a864fd2a7ce412989c8\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"313482e7195b2ed18129\"]}}],\"tags\":{\"serviceAppObjectId\":\"f24eab2c-a736-4aa1-af7c-2729d34249bc\"},\"defaultDrillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"slowDataSourceSettings\":{\"isCrossHighlightingDisabled\":false,\"isSlicerSelectionsButtonEnabled\":false,\"isFilterSelectionsButtonEnabled\":false,\"isFieldWellButtonEnabled\":false,\"isApplyAllButtonEnabled\":false},\"linguisticSchemaSyncVersion\":2,\"settings\":{\"useStylableVisualContainerHeader\":true,\"exportDataMode\":1,\"useNewFilterPaneExperience\":true,\"allowChangeFilterTypes\":true,\"allowDataPointLassoSelect\":true,\"useEnhancedTooltips\":true},\"objects\":{\"section\":[{\"properties\":{\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}}}}],\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}",
+ "config": "{\"version\":\"5.61\",\"themeCollection\":{\"baseTheme\":{\"name\":\"CY19SU06\",\"version\":\"5.5\",\"type\":2},\"customTheme\":{\"name\":\"Microsoft_FinOps_light_theme6084012566499879.json\",\"version\":\"5.61\",\"type\":1}},\"activeSectionIndex\":0,\"bookmarks\":[{\"displayName\":\"Get started\",\"name\":\"1a7083923871d04da2b3\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filtera818181820530c25c45d\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"5182341910d53d413a27\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"313482e7195b2ed18129\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"0148dfb059d7949a29d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4cabaa169baeca1b8080\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"69114f306b76c740a03c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b389d7f5c05321d8127b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d88c851bd50b961bc16\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8ba89e3f006403667181\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"df3f3c6f9bd0e807cd81\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ebf5ba8501e972165db3\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e9dfc1e085645a8c8005\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"58e88efc63a58b1847d6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4078cb61e9b049519a12\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b57153d5ac95dad90786\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7c0889a5089ea186b07a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2f0882f7ca0070d0169c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"578a434f80067b75ea49\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4c79671339600adb2691\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"91392c0ee33b36958068\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6ed4cd50da005230375\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"05856180928343b2d0c4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8d83e43010c85964b5c0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"78ca84696e70348d2c60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a9f2985e905d3c192ee6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"09fcc10359aade2ba483\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"50472c85677e09185d92\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f016730bcc0a4a662d82\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"28b3fe3cc7e987cdbb43\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ea9a802ad175b96a3827\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"560cd6a70de722262c88\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6624afaa6700dd9432a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"857dfdfd857619dd348b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a512a882a4657b039cc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b7ae40b345d8195c055e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"820f1580085ab0a9d8ea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"bac79bb9227a56c11a7b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"40c8523d8a2030d8842b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4a344e7f9bc904708609\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e99ee2e98ccb55ecac66\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4ad1bd8a48115a0d825a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"dee8b32d112eb77989c5\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"03c87bb075441076ab92\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"85c3641a11980d765c1a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"71bbbc7574e41a269a10\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4293f107095c44162875\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"331b6fc06aa92a0e83a0\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1f83a1f502cc7935b715\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d8566f06b2eb63d00543\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8fee30d049d35e2dd976\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1171007a43d77507b0ae\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"e77913aacc1377451e6d\":{\"isHidden\":false},\"b603a1000a76ecc4e046\":{\"isHidden\":true},\"abd13ae0d620aa359558\":{\"isHidden\":false},\"c4e1c9a492ab70b2e3b4\":{\"isHidden\":true},\"9fbd72ff5a9e09868003\":{\"isHidden\":true},\"0a864fd2a7ce412989c8\":{\"isHidden\":false}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"e99ee2e98ccb55ecac66\"]}},{\"displayName\":\"Get started - Connect\",\"name\":\"6e327bb59d3eed04e4d0\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filtera818181820530c25c45d\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"5182341910d53d413a27\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"313482e7195b2ed18129\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"0148dfb059d7949a29d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4cabaa169baeca1b8080\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"69114f306b76c740a03c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b389d7f5c05321d8127b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d88c851bd50b961bc16\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8ba89e3f006403667181\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"df3f3c6f9bd0e807cd81\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ebf5ba8501e972165db3\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e9dfc1e085645a8c8005\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"58e88efc63a58b1847d6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4078cb61e9b049519a12\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b57153d5ac95dad90786\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7c0889a5089ea186b07a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2f0882f7ca0070d0169c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"578a434f80067b75ea49\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4c79671339600adb2691\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"91392c0ee33b36958068\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6ed4cd50da005230375\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"05856180928343b2d0c4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8d83e43010c85964b5c0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"78ca84696e70348d2c60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a9f2985e905d3c192ee6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"09fcc10359aade2ba483\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"50472c85677e09185d92\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f016730bcc0a4a662d82\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"28b3fe3cc7e987cdbb43\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ea9a802ad175b96a3827\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"560cd6a70de722262c88\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6624afaa6700dd9432a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"857dfdfd857619dd348b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a512a882a4657b039cc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b7ae40b345d8195c055e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"820f1580085ab0a9d8ea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"bac79bb9227a56c11a7b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"40c8523d8a2030d8842b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4a344e7f9bc904708609\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e99ee2e98ccb55ecac66\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4ad1bd8a48115a0d825a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"dee8b32d112eb77989c5\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"03c87bb075441076ab92\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"85c3641a11980d765c1a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"71bbbc7574e41a269a10\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4293f107095c44162875\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"331b6fc06aa92a0e83a0\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1f83a1f502cc7935b715\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d8566f06b2eb63d00543\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8fee30d049d35e2dd976\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1171007a43d77507b0ae\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"e77913aacc1377451e6d\":{\"isHidden\":true},\"b603a1000a76ecc4e046\":{\"isHidden\":true},\"abd13ae0d620aa359558\":{\"isHidden\":true},\"c4e1c9a492ab70b2e3b4\":{\"isHidden\":true},\"9fbd72ff5a9e09868003\":{\"isHidden\":false},\"0a864fd2a7ce412989c8\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"e99ee2e98ccb55ecac66\"]}},{\"displayName\":\"Get started - Help\",\"name\":\"97ec54e0221e05615330\",\"explorationState\":{\"version\":\"1.3\",\"activeSection\":\"ReportSection04cb7247170034c13d74\",\"filters\":{\"byExpr\":[{\"name\":\"Filtera818181820530c25c45d\",\"type\":\"Categorical\",\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"howCreated\":1}]},\"sections\":{\"ReportSection04cb7247170034c13d74\":{\"visualContainers\":{\"5182341910d53d413a27\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"313482e7195b2ed18129\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"0148dfb059d7949a29d0\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4cabaa169baeca1b8080\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"69114f306b76c740a03c\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b389d7f5c05321d8127b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4d88c851bd50b961bc16\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"8ba89e3f006403667181\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"df3f3c6f9bd0e807cd81\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"ebf5ba8501e972165db3\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"e9dfc1e085645a8c8005\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"58e88efc63a58b1847d6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4078cb61e9b049519a12\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"b57153d5ac95dad90786\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"7c0889a5089ea186b07a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"2f0882f7ca0070d0169c\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"578a434f80067b75ea49\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4c79671339600adb2691\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"91392c0ee33b36958068\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6ed4cd50da005230375\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"05856180928343b2d0c4\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"8d83e43010c85964b5c0\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"78ca84696e70348d2c60\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a9f2985e905d3c192ee6\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"09fcc10359aade2ba483\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"50472c85677e09185d92\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f016730bcc0a4a662d82\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"28b3fe3cc7e987cdbb43\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"ea9a802ad175b96a3827\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"560cd6a70de722262c88\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"f6624afaa6700dd9432a\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"857dfdfd857619dd348b\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"a512a882a4657b039cc7\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"b7ae40b345d8195c055e\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"820f1580085ab0a9d8ea\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"bac79bb9227a56c11a7b\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"40c8523d8a2030d8842b\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"4a344e7f9bc904708609\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"e99ee2e98ccb55ecac66\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"4ad1bd8a48115a0d825a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"dee8b32d112eb77989c5\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"03c87bb075441076ab92\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"85c3641a11980d765c1a\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"71bbbc7574e41a269a10\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}},\"4293f107095c44162875\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"331b6fc06aa92a0e83a0\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"1f83a1f502cc7935b715\":{\"singleVisual\":{\"visualType\":\"image\",\"objects\":{}}},\"d8566f06b2eb63d00543\":{\"singleVisual\":{\"visualType\":\"actionButton\",\"objects\":{}}},\"8fee30d049d35e2dd976\":{\"singleVisual\":{\"visualType\":\"textbox\",\"objects\":{}}},\"1171007a43d77507b0ae\":{\"singleVisual\":{\"visualType\":\"shape\",\"objects\":{}}}},\"visualContainerGroups\":{\"e77913aacc1377451e6d\":{\"isHidden\":true},\"b603a1000a76ecc4e046\":{\"isHidden\":true},\"abd13ae0d620aa359558\":{\"isHidden\":true},\"c4e1c9a492ab70b2e3b4\":{\"isHidden\":false},\"9fbd72ff5a9e09868003\":{\"isHidden\":true},\"0a864fd2a7ce412989c8\":{\"isHidden\":true}}}},\"objects\":{\"merge\":{\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}},\"options\":{\"targetVisualNames\":[\"313482e7195b2ed18129\"]}}],\"tags\":{\"serviceAppObjectId\":\"f24eab2c-a736-4aa1-af7c-2729d34249bc\"},\"defaultDrillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"slowDataSourceSettings\":{\"isCrossHighlightingDisabled\":false,\"isSlicerSelectionsButtonEnabled\":false,\"isFilterSelectionsButtonEnabled\":false,\"isFieldWellButtonEnabled\":false,\"isApplyAllButtonEnabled\":false},\"linguisticSchemaSyncVersion\":2,\"settings\":{\"useStylableVisualContainerHeader\":true,\"exportDataMode\":1,\"useNewFilterPaneExperience\":true,\"allowChangeFilterTypes\":true,\"allowDataPointLassoSelect\":true,\"useEnhancedTooltips\":true},\"objects\":{\"section\":[{\"properties\":{\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}}}}],\"outspacePane\":[{\"properties\":{\"expanded\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}}",
"filters": "[{\"name\":\"Filtera818181820530c25c45d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"CostDetails\"}},\"Property\":\"x_CostAllocationRuleName\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"CostDetails\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_CostAllocationRuleName\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{},\"ordinal\":0}]",
"layoutOptimization": 0,
"pods": [
@@ -722,7 +722,7 @@
"z": 8000.00
},
{
- "config": "{\"name\":\"4d88c851bd50b961bc16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-09 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"4d88c851bd50b961bc16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
"height": 32.00,
"width": 240.00,
@@ -1809,42 +1809,42 @@
"ordinal": 1,
"visualContainers": [
{
- "config": "{\"name\":\"00a4830cde45664a4c77\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0.451953019367096,\"z\":2000,\"width\":280,\"height\":128,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"5308888ed6877376b819\"}",
- "filters": "[]",
- "height": 128.00,
- "width": 280.00,
+ "config": "{\"name\":\"009e6105d67e28c44d02\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
+ "height": 720.00,
+ "width": 200.00,
"x": 0.00,
- "y": 0.45,
- "z": 2000.00
+ "y": 0.00,
+ "z": 1.00
},
{
- "config": "{\"name\":\"15bb05cb8025068505a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0.030585375772194112,\"z\":0,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"1f8ae0f308c0ded6c305\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":56}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 704.00,
"width": 88.00,
- "x": 960.09,
- "y": 0.03,
- "z": 0.00
+ "x": 671.53,
+ "y": 0.00,
+ "z": 3000.00
},
{
- "config": "{\"name\":\"1cc8a283866d9922a681\",\"layouts\":[{\"id\":0,\"position\":{\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"width\":280,\"height\":128,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"5308888ed6877376b819\"}",
+ "config": "{\"name\":\"22782fddb6d438c93cdb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.451953019367096,\"z\":2000,\"tabOrder\":43}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'850da8650749804d7db7'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"36360e3d7dd203594c33\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
- "x": 288.00,
- "y": 0.03,
- "z": 1000.00
+ "x": 0.00,
+ "y": 0.45,
+ "z": 2000.00
},
{
- "config": "{\"name\":\"1d6ff84c214aa684cd35\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":1000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "config": "{\"name\":\"23460193b74742470366\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":546.8068172946735,\"y\":24.429474352321336,\"z\":3000,\"tabOrder\":36}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"41bb34c83eb70689dbd9\"}",
+ "filters": "[]",
+ "height": 104.00,
+ "width": 32.00,
+ "x": 546.81,
+ "y": 24.43,
+ "z": 3000.00
},
{
- "config": "{\"name\":\"1e3cc35dd9730e540b42\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":0,\"y\":26.135186013642624,\"z\":4000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Used reservations\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Used reservations\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Used reservations'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
+ "config": "{\"name\":\"28da313c607a27354275\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":0,\"y\":26.135186013642624,\"z\":4000,\"tabOrder\":28}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Used reservations\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Used reservations\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Used reservations'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
"filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Used'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filterf7e4c2051ed058044489\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Reservation'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
"height": 72.00,
"width": 144.00,
@@ -1853,176 +1853,130 @@
"z": 4000.00
},
{
- "config": "{\"name\":\"1ea3f11a0b407e204074\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.49295449425011384,\"y\":135.9945061450662,\"z\":14000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"2a0ff85c086ac8e4ad05\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.16090108605175,\"y\":0,\"z\":5000,\"tabOrder\":63}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 128.00,
- "width": 1048.00,
- "x": 0.49,
- "y": 135.99,
- "z": 14000.00
+ "height": 704.00,
+ "width": 88.00,
+ "x": 479.16,
+ "y": 0.00,
+ "z": 5000.00
},
{
- "config": "{\"name\":\"1f2305d49b20054016d5\",\"layouts\":[{\"id\":0,\"position\":{\"x\":263.1755372720173,\"y\":23.089271084894538,\"z\":4000,\"width\":40,\"height\":104,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5308888ed6877376b819\"}",
- "filters": "[]",
- "height": 104.00,
- "width": 40.00,
- "x": 263.18,
- "y": 23.09,
- "z": 4000.00
+ "config": "{\"name\":\"2d113bce103289cc8c05\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.503719070629,\"x\":214.90276789869387,\"y\":8.036079230706008,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
+ "height": 704.00,
+ "width": 1048.50,
+ "x": 214.90,
+ "y": 8.04,
+ "z": 0.00
},
{
- "config": "{\"name\":\"2a3ecbe60e340eda5761\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":11}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"Costs.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d3e6e8a7a06509c4ea42\"}",
- "filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
+ "config": "{\"name\":\"2ff6d65280e5664520ec\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":23}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"80ed05757ebe7524bcd0\"}",
+ "filters": "[]",
"height": 56.00,
"width": 200.00,
"x": 0.00,
- "y": 112.80,
- "z": 2000.00
- },
- {
- "config": "{\"name\":\"2f49af9581e4170c39cd\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":32,\"x\":270.30828385003826,\"y\":35,\"z\":6000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Plus'\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
- "filters": "[]",
- "height": 48.00,
- "width": 32.00,
- "x": 270.31,
- "y": 35.00,
- "z": 6000.00
+ "y": 224.80,
+ "z": 0.00
},
{
- "config": "{\"name\":\"31915b8c2140e1866ecc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0.030585375772194112,\"z\":1000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"313fa0473667a4ac6e4c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"tabOrder\":24}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.03,
+ "height": 720.00,
+ "width": 200.00,
+ "x": 0.00,
+ "y": 0.00,
"z": 1000.00
},
{
- "config": "{\"name\":\"329e4d89a690cda09975\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":288.00697201198636,\"y\":26.13518601364285,\"z\":2000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Used savings plans\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Used savings plans\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Used savings plans'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
- "filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Used'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter8686be571bc0d3d00197\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Savings Plan'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "config": "{\"name\":\"338a7766d9c17861bc62\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":144.00000000000193,\"y\":26.135186013642624,\"z\":3000,\"tabOrder\":37}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Unused reservations\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Unused reservations\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused reservations'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
+ "filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unused'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter2bb42c0184174c946133\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]",
"height": 72.00,
"width": 144.00,
- "x": 288.01,
+ "x": 144.00,
"y": 26.14,
- "z": 2000.00
- },
- {
- "config": "{\"name\":\"347f2b0533cd6360ba85\",\"layouts\":[{\"id\":0,\"position\":{\"x\":265.8585444265391,\"y\":24.429483640270234,\"z\":4000,\"width\":40,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dd934a6975b131caaa61\"}",
- "filters": "[]",
- "height": 104.00,
- "width": 40.00,
- "x": 265.86,
- "y": 24.43,
- "z": 4000.00
- },
- {
- "config": "{\"name\":\"39613549e011b890ea14\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0.030585375772194112,\"z\":9000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
- "filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.03,
- "z": 9000.00
+ "z": 3000.00
},
{
- "config": "{\"name\":\"479095a64cac7d952500\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":37}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.RateOptimization/featureName/Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\",\"howCreated\":\"InsertVisualButton\"}",
- "filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "config": "{\"name\":\"36360e3d7dd203594c33\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.4519530193671,\"width\":856,\"x\":309.9997906394788,\"y\":25,\"z\":6,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Negotiated savings\",\"groupMode\":0}}",
+ "height": 128.45,
+ "width": 856.00,
+ "x": 310.00,
+ "y": 25.00,
+ "z": 6.00
},
{
- "config": "{\"name\":\"489d53e481ea3940e05a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":25}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"399da92411ee9bcd1e21\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":52}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\"}",
"filters": "[]",
- "height": 32.00,
+ "height": 720.00,
"width": 192.00,
"x": 0.00,
- "y": 656.00,
- "z": 3000.00
- },
- {
- "config": "{\"name\":\"49e532ff41018a9e10e9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48.00000000000001,\"width\":496,\"x\":32.168748966316514,\"y\":13,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"outline\":[{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"3D\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Border'\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\",\"howCreated\":\"InsertVisualButton\"}",
- "filters": "[]",
- "height": 48.00,
- "width": 496.00,
- "x": 32.17,
- "y": 13.00,
+ "y": 0.00,
"z": 0.00
},
{
- "config": "{\"name\":\"4a2e87ca0746b2d8c78d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":98.13518601364285,\"width\":576.0069720119875,\"x\":448.00082197526586,\"y\":416.26075239569235,\"z\":3000,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"CD breakdown\",\"groupMode\":0}}",
- "height": 98.14,
- "width": 576.01,
- "x": 448.00,
- "y": 416.26,
- "z": 3000.00
+ "config": "{\"name\":\"3aad32a14e7a3e2a9092\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":54}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
+ "filters": "[]",
+ "height": 704.00,
+ "width": 88.00,
+ "x": 863.90,
+ "y": 0.00,
+ "z": 1000.00
},
{
- "config": "{\"name\":\"4fdd5ff6b65b5e3870c8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":5}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d3e6e8a7a06509c4ea42\"}",
+ "config": "{\"name\":\"3c98600e7eebc0575600\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.5037190706287902,\"y\":561.3627779549503,\"z\":11000,\"tabOrder\":29}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 3000.00
+ "height": 128.00,
+ "width": 1048.00,
+ "x": 0.50,
+ "y": 561.36,
+ "z": 11000.00
},
{
- "config": "{\"name\":\"5308888ed6877376b819\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.4519530193671,\"width\":856,\"x\":310,\"y\":8.006128196446877,\"z\":6000,\"tabOrder\":3000}}],\"singleVisualGroup\":{\"displayName\":\"Negotiated savings\",\"groupMode\":0}}",
+ "config": "{\"name\":\"41bb34c83eb70689dbd9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.45195301936707,\"width\":856,\"x\":309.9997906394788,\"y\":296,\"z\":4,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Total savings\",\"groupMode\":0}}",
"height": 128.45,
"width": 856.00,
"x": 310.00,
- "y": 8.01,
- "z": 6000.00
+ "y": 296.00,
+ "z": 4.00
},
{
- "config": "{\"name\":\"58a72d0dcdd5309b2e8c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0.030585375772194112,\"z\":3000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"43da2493061953e07263\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"tabOrder\":32}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 671.53,
- "y": 0.03,
- "z": 3000.00
- },
- {
- "config": "{\"name\":\"6543285200b8423c3604\",\"layouts\":[{\"id\":0,\"position\":{\"x\":544.3858256439802,\"y\":23.089261796945667,\"z\":3000,\"width\":32,\"height\":104,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5308888ed6877376b819\"}",
- "filters": "[]",
- "height": 104.00,
- "width": 32.00,
- "x": 544.39,
- "y": 23.09,
+ "height": 32.00,
+ "width": 192.00,
+ "x": 0.00,
+ "y": 656.00,
"z": 3000.00
},
{
- "config": "{\"name\":\"6b86843a946608a10259\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0.030585375772194112,\"z\":4000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"44dc6f03c77894ed8093\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"tabOrder\":19}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'a11dfc016a9d53005469'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"41bb34c83eb70689dbd9\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 575.35,
+ "height": 128.00,
+ "width": 280.00,
+ "x": 288.00,
"y": 0.03,
- "z": 4000.00
+ "z": 1000.00
},
{
- "config": "{\"name\":\"6e6fe471c3b20e83a729\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":543.4502955555447,\"y\":24.81527129377298,\"z\":3000,\"tabOrder\":22}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e1e8c09513819b074c45\"}",
+ "config": "{\"name\":\"46926684397506061040\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":282,\"y\":21.953394989491585,\"z\":4000,\"tabOrder\":12}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"/\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a7cf32283b0b200e067e\"}",
"filters": "[]",
"height": 104.00,
"width": 32.00,
- "x": 543.45,
- "y": 24.82,
- "z": 3000.00
+ "x": 282.00,
+ "y": 21.95,
+ "z": 4000.00
},
{
- "config": "{\"name\":\"72e7a6394e722e077730\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0,\"z\":1000,\"tabOrder\":16}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"e1e8c09513819b074c45\"}",
+ "config": "{\"name\":\"4c1c802b58bb92ad6b0c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'9b056cce7358990c1107'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"41bb34c83eb70689dbd9\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
- "x": 288.00,
+ "x": 576.00,
"y": 0.00,
- "z": 1000.00
+ "z": 0.00
},
{
- "config": "{\"name\":\"79448040008099d1ced3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":24}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ServiceCategory\",\"active\":true},{\"queryRef\":\"Costs.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"Costs.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.ServiceCategory\":{\"displayName\":\"Service category\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d3e6e8a7a06509c4ea42\"}",
+ "config": "{\"name\":\"4d858b509bb623bb52d0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.80123456789806,\"z\":1000,\"tabOrder\":31}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ServiceCategory\",\"active\":true},{\"queryRef\":\"Costs.ServiceName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceCategory\"},\"Name\":\"Costs.ServiceCategory\",\"NativeReferenceName\":\"Service category\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ServiceName\"},\"Name\":\"Costs.ServiceName\",\"NativeReferenceName\":\"Service1\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.ServiceCategory\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.ServiceName\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.ServiceCategory\":{\"displayName\":\"Service category\"},\"Costs.ServiceName\":{\"displayName\":\"Service\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Service filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"80ed05757ebe7524bcd0\"}",
"filters": "[]",
"height": 56.00,
"width": 200.00,
@@ -2031,33 +1985,34 @@
"z": 1000.00
},
{
- "config": "{\"name\":\"7a0a99c1056eb88c9cde\",\"layouts\":[{\"id\":0,\"position\":{\"x\":288,\"y\":0.02521273199749885,\"z\":1000,\"width\":280,\"height\":128,\"tabOrder\":23}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"8105a41e503b9c24b8e6\"}",
- "filters": "[{\"name\":\"Filter9772ed304b7730b301c3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "config": "{\"name\":\"50c46f7995c30607aa9a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.09723210130613325,\"y\":424.00000000000006,\"z\":12000,\"width\":1048,\"height\":128,\"tabOrder\":21}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
+ "filters": "[]",
"height": 128.00,
- "width": 280.00,
- "x": 288.00,
- "y": 0.03,
- "z": 1000.00
+ "width": 1048.00,
+ "x": 0.10,
+ "y": 424.00,
+ "z": 12000.00
},
{
- "config": "{\"name\":\"7ce92517065663600cb5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0.030585375772194112,\"z\":6000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"51b3fdfac0db3c3e2d04\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":40,\"x\":265.36890351136026,\"y\":25.732784449815597,\"z\":4000,\"tabOrder\":44}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a0d546007014d8050140\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 382.98,
- "y": 0.03,
- "z": 6000.00
+ "height": 104.00,
+ "width": 40.00,
+ "x": 265.37,
+ "y": 25.73,
+ "z": 4000.00
},
{
- "config": "{\"name\":\"8105a41e503b9c24b8e6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":129.73278444981557,\"width\":856,\"x\":310,\"y\":142.94366205209982,\"z\":5000,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"CD savings\",\"groupMode\":0}}",
- "height": 129.73,
- "width": 856.00,
- "x": 310.00,
- "y": 142.94,
- "z": 5000.00
+ "config": "{\"name\":\"57a9e3e62c430659d31b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"tabOrder\":26}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'f38702c42718b677ee9a'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"a0d546007014d8050140\"}",
+ "filters": "[]",
+ "height": 128.00,
+ "width": 280.00,
+ "x": 0.00,
+ "y": 0.45,
+ "z": 2000.00
},
{
- "config": "{\"name\":\"895f54341860b9536dc1\",\"layouts\":[{\"id\":0,\"position\":{\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"width\":280,\"height\":128,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"dd934a6975b131caaa61\"}",
+ "config": "{\"name\":\"58d7345de61000599862\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.02521273199749885,\"z\":1000,\"tabOrder\":17}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'a11dfc016a9d53005469'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"a0d546007014d8050140\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
@@ -2066,315 +2021,360 @@
"z": 1000.00
},
{
- "config": "{\"name\":\"91999392ec865ec08e8a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":47.99999999999999,\"width\":32,\"x\":416.0069720119873,\"y\":34.13518601364285,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Plus'\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
- "filters": "[]",
- "height": 48.00,
- "width": 32.00,
- "x": 416.01,
- "y": 34.14,
- "z": 5000.00
- },
- {
- "config": "{\"name\":\"93246649910a26e9649a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":224,\"x\":175.9931659759195,\"y\":0,\"z\":8000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment discount breakdown\",\"textStyle\":{\"color\":\"#6f4bb2\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'CD breakdown header'\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
- "filters": "[]",
- "height": 32.00,
- "width": 224.00,
- "x": 175.99,
- "y": 0.00,
- "z": 8000.00
+ "config": "{\"name\":\"5938db308717b6b7cc9a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.80123456789806,\"z\":2000,\"tabOrder\":14}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.CommitmentDiscountType\",\"active\":true},{\"queryRef\":\"Costs.CommitmentDiscountName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"},\"Name\":\"Costs.CommitmentDiscountType\",\"NativeReferenceName\":\"Type\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountName\"},\"Name\":\"Costs.CommitmentDiscountName\",\"NativeReferenceName\":\"Name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.CommitmentDiscountType\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.CommitmentDiscountName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.CommitmentDiscountType\":{\"displayName\":\"Type\"},\"Costs.CommitmentDiscountName\":{\"displayName\":\"Name\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Commitment discount filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"80ed05757ebe7524bcd0\"}",
+ "filters": "[{\"name\":\"28638fdd7a79bd2d6a00\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"''\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}]",
+ "height": 56.00,
+ "width": 200.00,
+ "x": 0.00,
+ "y": 112.80,
+ "z": 2000.00
},
{
- "config": "{\"name\":\"9553f8021c00c2287373\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":0,\"z\":0,\"width\":280,\"height\":128,\"tabOrder\":41}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"8105a41e503b9c24b8e6\"}",
+ "config": "{\"name\":\"5a48b5c038ab96a592ac\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0,\"z\":2000,\"tabOrder\":4}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'9b056cce7358990c1107'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"a7cf32283b0b200e067e\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
- "x": 576.00,
+ "x": 0.00,
"y": 0.00,
- "z": 0.00
+ "z": 2000.00
},
{
- "config": "{\"name\":\"976a673a9030ddb4675e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.49295449425011384,\"y\":271.99450614506617,\"z\":13000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"68d986f07668b64c0b0d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0.025212731997555693,\"z\":1000,\"tabOrder\":34}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Canvas'\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'f38702c42718b677ee9a'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'After negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"36360e3d7dd203594c33\"}",
"filters": "[]",
"height": 128.00,
- "width": 1048.00,
- "x": 0.49,
- "y": 271.99,
- "z": 13000.00
+ "width": 280.00,
+ "x": 288.00,
+ "y": 0.03,
+ "z": 1000.00
},
{
- "config": "{\"name\":\"a49069a38a06312c0b13\",\"layouts\":[{\"id\":0,\"position\":{\"x\":546.8068172946735,\"y\":24.429474352321336,\"z\":3000,\"width\":32,\"height\":104,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"dd934a6975b131caaa61\"}",
+ "config": "{\"name\":\"71931b627aa8daa9edc2\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":546.3171778676784,\"y\":25.732775161866698,\"z\":3000,\"tabOrder\":35}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a0d546007014d8050140\"}",
"filters": "[]",
"height": 104.00,
"width": 32.00,
- "x": 546.81,
- "y": 24.43,
+ "x": 546.32,
+ "y": 25.73,
"z": 3000.00
},
{
- "config": "{\"name\":\"a66874a17e5e480edb61\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0.030585375772194112,\"z\":8000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"719b78fe757bbc02b443\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":432.0069720119875,\"y\":26.13518601364285,\"z\":1000,\"tabOrder\":20}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Unused savings plans\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Unused savings plans\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused savings plans'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
+ "filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unused'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter3197dd6c0c42978c559d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Savings Plan'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "height": 72.00,
+ "width": 144.00,
+ "x": 432.01,
+ "y": 26.14,
+ "z": 1000.00
+ },
+ {
+ "config": "{\"name\":\"767db0e25480cc731980\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.79019316682974,\"y\":0,\"z\":7000,\"tabOrder\":57}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 704.00,
"width": 88.00,
- "x": 192.00,
- "y": 0.03,
- "z": 8000.00
+ "x": 286.79,
+ "y": 0.00,
+ "z": 7000.00
},
{
- "config": "{\"name\":\"aa707c7c85800c1601b0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0,\"z\":2000,\"tabOrder\":3}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"e1e8c09513819b074c45\"}",
+ "config": "{\"name\":\"7d7c7f047c65c4a154c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":59}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 128.00,
- "width": 280.00,
- "x": 0.00,
+ "height": 704.00,
+ "width": 88.00,
+ "x": 767.72,
"y": 0.00,
"z": 2000.00
},
{
- "config": "{\"name\":\"ad4fc74403c1876da23a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":31}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"d3e6e8a7a06509c4ea42\"}",
+ "config": "{\"name\":\"7fe571fb4985738eee6e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"tabOrder\":9}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'850da8650749804d7db7'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"41bb34c83eb70689dbd9\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
+ "height": 128.00,
+ "width": 280.00,
"x": 0.00,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.45,
+ "z": 2000.00
},
{
- "config": "{\"name\":\"b1e5a94f1b476421c830\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":200,\"x\":0,\"y\":0,\"z\":1000,\"tabOrder\":18}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\",\"howCreated\":\"InsertVisualButton\"}",
- "filters": "[]",
- "height": 720.00,
+ "config": "{\"name\":\"80ed05757ebe7524bcd0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\"}",
+ "height": 280.80,
"width": 200.00,
"x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "y": 104.00,
+ "z": 4000.00
},
{
- "config": "{\"name\":\"b388ec1532e078b43685\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"width\":280,\"height\":128,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"dd934a6975b131caaa61\"}",
+ "config": "{\"name\":\"812ef05010bd941c44a0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":58}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 128.00,
- "width": 280.00,
- "x": 0.00,
- "y": 0.45,
- "z": 2000.00
+ "height": 704.00,
+ "width": 88.00,
+ "x": 960.09,
+ "y": 0.00,
+ "z": 0.00
},
{
- "config": "{\"name\":\"bdfee96d89209d343e43\",\"layouts\":[{\"id\":0,\"position\":{\"x\":265.36890351136026,\"y\":25.732784449815597,\"z\":4000,\"width\":40,\"height\":104,\"tabOrder\":30}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8105a41e503b9c24b8e6\"}",
+ "config": "{\"name\":\"8607d10a48e4d998e740\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":40,\"x\":263.1755372720173,\"y\":23.089271084894538,\"z\":4000,\"tabOrder\":7}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"36360e3d7dd203594c33\"}",
"filters": "[]",
"height": 104.00,
"width": 40.00,
- "x": 265.37,
- "y": 25.73,
+ "x": 263.18,
+ "y": 23.09,
"z": 4000.00
},
{
- "config": "{\"name\":\"be20ae9420d567e976b8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0.030585375772194112,\"z\":2000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"870a460c73a7869568b1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":191.99999999999994,\"y\":0,\"z\":8000,\"tabOrder\":46}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 704.00,
"width": 88.00,
- "x": 767.72,
- "y": 0.03,
- "z": 2000.00
+ "x": 192.00,
+ "y": 0.00,
+ "z": 8000.00
},
{
- "config": "{\"name\":\"c134022f25962391ae63\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":224.80123456789806,\"z\":0,\"tabOrder\":17}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.BillingCurrency\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"BillingCurrency\"},\"Name\":\"Costs.BillingCurrency\",\"NativeReferenceName\":\"Currency\"}]},\"columnProperties\":{\"Costs.BillingCurrency\":{\"displayName\":\"Currency\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Currency filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"d3e6e8a7a06509c4ea42\"}",
+ "config": "{\"name\":\"9816a747e27c7be0c83e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.09723210130613325,\"y\":288,\"z\":13000,\"width\":1048,\"height\":128,\"tabOrder\":38}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 224.80,
- "z": 0.00
+ "height": 128.00,
+ "width": 1048.00,
+ "x": 0.10,
+ "y": 288.00,
+ "z": 13000.00
},
{
- "config": "{\"name\":\"c94e0bdaca43869cc58a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.5039284311499728,\"y\":543.9945061450662,\"z\":11000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"9905f8e490092d185a77\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":41}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings summary\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Summarize negotiated and commitment discount savings.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\"}",
"filters": "[]",
- "height": 128.00,
- "width": 1048.00,
- "x": 0.50,
- "y": 543.99,
- "z": 11000.00
+ "height": 104.00,
+ "width": 192.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 5000.00
},
{
- "config": "{\"name\":\"cc4777c5478bbaed5906\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":29}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"x_EffectiveSavingsRate1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective Savings Rate (ESR)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"e1e8c09513819b074c45\"}",
+ "config": "{\"name\":\"99c8eae8cce6094761d9\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":15}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/RateOptimization#savings-summary'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\"}",
"filters": "[]",
- "height": 128.00,
- "width": 280.00,
- "x": 576.00,
+ "height": 40.00,
+ "width": 40.00,
+ "x": 160.00,
"y": 0.00,
- "z": 0.00
+ "z": 6000.00
},
{
- "config": "{\"name\":\"cfd26edbb07e2c0443d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704.0305853757721,\"width\":1048.50392843115,\"x\":214.90276789869384,\"y\":8.005493854933814,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.03,
- "width": 1048.50,
- "x": 214.90,
- "y": 8.01,
- "z": 0.00
+ "config": "{\"name\":\"a01bbd4b245c08278318\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":288.00697201198636,\"y\":26.13518601364285,\"z\":2000,\"tabOrder\":50}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Used savings plans\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Used savings plans\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Used savings plans'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
+ "filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Used'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter8686be571bc0d3d00197\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Savings Plan'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "height": 72.00,
+ "width": 144.00,
+ "x": 288.01,
+ "y": 26.14,
+ "z": 2000.00
},
{
- "config": "{\"name\":\"d3e6e8a7a06509c4ea42\",\"layouts\":[{\"id\":0,\"position\":{\"height\":280.80123456789806,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\"}",
- "height": 280.80,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "config": "{\"name\":\"a0d546007014d8050140\",\"layouts\":[{\"id\":0,\"position\":{\"height\":129.73278444981557,\"width\":856,\"x\":309.9997906394788,\"y\":161,\"z\":5,\"tabOrder\":5000}}],\"singleVisualGroup\":{\"displayName\":\"CD savings\",\"groupMode\":0}}",
+ "height": 129.73,
+ "width": 856.00,
+ "x": 310.00,
+ "y": 161.00,
+ "z": 5.00
},
{
- "config": "{\"name\":\"d6fdfff9be1161601452\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":192,\"x\":0,\"y\":0,\"z\":5000,\"tabOrder\":32}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Savings summary\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Summarize negotiated and commitment discount savings.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\"}",
+ "config": "{\"name\":\"a13dbb58c3029c760c80\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":32,\"x\":128.1687489663169,\"y\":35,\"z\":7000,\"tabOrder\":1}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Plus'\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 48.00,
+ "width": 32.00,
+ "x": 128.17,
+ "y": 35.00,
+ "z": 7000.00
},
{
- "config": "{\"name\":\"dcc9b2810849bc900207\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.49295449425011384,\"y\":0,\"z\":15000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"a6e94ad1851a67a2edac\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":543.4502955555447,\"y\":22.768666283264565,\"z\":3000,\"tabOrder\":30}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"a7cf32283b0b200e067e\"}",
"filters": "[]",
- "height": 128.00,
- "width": 1048.00,
- "x": 0.49,
- "y": 0.00,
- "z": 15000.00
+ "height": 104.00,
+ "width": 32.00,
+ "x": 543.45,
+ "y": 22.77,
+ "z": 3000.00
},
{
- "config": "{\"name\":\"dd934a6975b131caaa61\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.45195301936707,\"width\":856,\"x\":310,\"y\":279.8117531556231,\"z\":4000,\"tabOrder\":2000}}],\"singleVisualGroup\":{\"displayName\":\"Total savings\",\"groupMode\":0}}",
- "height": 128.45,
+ "config": "{\"name\":\"a7cf32283b0b200e067e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":856,\"x\":310.82883888120926,\"y\":570,\"z\":2,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"ESR\",\"groupMode\":0}}",
+ "height": 128.00,
"width": 856.00,
- "x": 310.00,
- "y": 279.81,
- "z": 4000.00
+ "x": 310.83,
+ "y": 570.00,
+ "z": 2.00
},
{
- "config": "{\"name\":\"ddef0f53a7958e6b8ae7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":0,\"z\":0,\"width\":280,\"height\":128,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_TotalSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_TotalSavings)\",\"NativeReferenceName\":\"x_TotalSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_TotalSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#DEF7AA'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Total savings'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#7FBA00'\"}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"dd934a6975b131caaa61\"}",
+ "config": "{\"name\":\"a97dde3ce88c3cabcb83\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":62}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 128.00,
- "width": 280.00,
- "x": 576.00,
+ "height": 704.00,
+ "width": 88.00,
+ "x": 0.00,
"y": 0.00,
- "z": 0.00
+ "z": 10000.00
},
{
- "config": "{\"name\":\"e1e8c09513819b074c45\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128.81527129377298,\"width\":856,\"x\":310,\"y\":584,\"z\":2000,\"tabOrder\":4000}}],\"singleVisualGroup\":{\"displayName\":\"ESR\",\"groupMode\":0}}",
- "height": 128.82,
- "width": 856.00,
- "x": 310.00,
- "y": 584.00,
+ "config": "{\"name\":\"acbab5dd74371d0352eb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":192,\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"tabOrder\":47}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.KQL.RateOptimization/featureName/Summary'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"009e6105d67e28c44d02\",\"howCreated\":\"InsertVisualButton\"}",
+ "filters": "[]",
+ "height": 32.00,
+ "width": 192.00,
+ "x": 0.00,
+ "y": 688.00,
"z": 2000.00
},
{
- "config": "{\"name\":\"e3d6119fdb07a1b1bd45\",\"layouts\":[{\"id\":0,\"position\":{\"x\":546.3171778676784,\"y\":25.732775161866698,\"z\":3000,\"width\":32,\"height\":104,\"tabOrder\":36}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"8105a41e503b9c24b8e6\"}",
+ "config": "{\"name\":\"b1953c0094083e096e10\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":544.3858256439802,\"y\":23.089261796945667,\"z\":3000,\"tabOrder\":16}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"=\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Equals'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"36360e3d7dd203594c33\"}",
"filters": "[]",
"height": 104.00,
"width": 32.00,
- "x": 546.32,
- "y": 25.73,
+ "x": 544.39,
+ "y": 23.09,
"z": 3000.00
},
{
- "config": "{\"name\":\"e42e503e87a9c4da0008\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0.030585375772194112,\"z\":7000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"b4dede9ad6cd6e63a026\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":32,\"x\":270.30828385003826,\"y\":35,\"z\":6000,\"tabOrder\":53}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Plus'\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 286.79,
- "y": 0.03,
- "z": 7000.00
+ "height": 48.00,
+ "width": 32.00,
+ "x": 270.31,
+ "y": 35.00,
+ "z": 6000.00
},
{
- "config": "{\"name\":\"e5b841a7195040c80450\",\"layouts\":[{\"id\":0,\"position\":{\"height\":720,\"width\":192,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":42}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\"}",
- "filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "config": "{\"name\":\"b58ed9f3b0b838274060\",\"layouts\":[{\"id\":0,\"position\":{\"height\":98.13518601364285,\"width\":576.0069720119875,\"x\":448.00010909577645,\"y\":432.290100200993,\"z\":3,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"CD breakdown\",\"groupMode\":0}}",
+ "height": 98.14,
+ "width": 576.01,
+ "x": 448.00,
+ "y": 432.29,
+ "z": 3.00
},
{
- "config": "{\"name\":\"eb30e120c2a4b0ee6240\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":432.0069720119875,\"y\":26.13518601364285,\"z\":1000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Unused savings plans\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Unused savings plans\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused savings plans'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
- "filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unused'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter3197dd6c0c42978c559d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Savings Plan'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 72.00,
- "width": 144.00,
- "x": 432.01,
- "y": 26.14,
- "z": 1000.00
+ "config": "{\"name\":\"b9908904300005a1a502\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":56,\"z\":3000,\"tabOrder\":6}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.SubAccountName\",\"active\":true},{\"queryRef\":\"Costs.x_ResourceGroupName\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"SubAccountName\"},\"Name\":\"Costs.SubAccountName\",\"NativeReferenceName\":\"Subscription1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"x_ResourceGroupName\"},\"Name\":\"Costs.x_ResourceGroupName\",\"NativeReferenceName\":\"Resource group\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Costs.SubAccountName\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"Costs.x_ResourceGroupName\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Costs.SubAccountName\":{\"displayName\":\"Subscription\"},\"Costs.x_ResourceGroupName\":{\"displayName\":\"Resource group\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"80ed05757ebe7524bcd0\"}",
+ "filters": "[]",
+ "height": 56.00,
+ "width": 200.00,
+ "x": 0.00,
+ "y": 56.00,
+ "z": 3000.00
},
{
- "config": "{\"name\":\"ee0a677a957b27ee1d7e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.49295449425011384,\"y\":407.99450614506617,\"z\":12000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"bb768bce296450176e5c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.09723210130613325,\"y\":17.33768643411181,\"z\":15000,\"tabOrder\":3}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 128.00,
"width": 1048.00,
- "x": 0.49,
- "y": 407.99,
- "z": 12000.00
+ "x": 0.10,
+ "y": 17.34,
+ "z": 15000.00
},
{
- "config": "{\"name\":\"f2ffe51e73025851726b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0.030585375772194112,\"z\":5000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"c0471a3b9204997a3937\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.97554712644086,\"y\":0,\"z\":6000,\"tabOrder\":61}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 704.00,
"width": 88.00,
- "x": 479.16,
- "y": 0.03,
- "z": 5000.00
+ "x": 382.98,
+ "y": 0.00,
+ "z": 6000.00
},
{
- "config": "{\"name\":\"f61f2259e9070c1b6be4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":40,\"width\":40,\"x\":160,\"y\":0,\"z\":6000,\"tabOrder\":10}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/RateOptimization#savings-summary'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"1d6ff84c214aa684cd35\"}",
+ "config": "{\"name\":\"c8f253340b03c2036154\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":40}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.x_EffectiveSavingsRate\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"},\"Name\":\"Costs.x_EffectiveSavingsRate\",\"NativeReferenceName\":\"x_EffectiveSavingsRate\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_EffectiveSavingsRate\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'705dba682cbaaaa450e5'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective Savings Rate (ESR)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"a7cf32283b0b200e067e\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
+ "height": 128.00,
+ "width": 280.00,
+ "x": 576.00,
"y": 0.00,
- "z": 6000.00
+ "z": 0.00
},
{
- "config": "{\"name\":\"f789ffae212d542e05ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0.030585375772194112,\"z\":10000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"cfd26edbb07e2c0443d3\",\"howCreated\":\"InsertVisualButton\"}",
+ "config": "{\"name\":\"d206784193487035b006\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":0,\"z\":4000,\"tabOrder\":42}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c1\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c1\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"columnProperties\":{\"CommitmentDiscountCosts.ChargePeriodStart\":{\"formatString\":null}},\"hasDefaultSort\":true,\"objects\":{\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Between'\"}}}}}],\"selection\":[{\"properties\":{\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"slider\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":6,\"Percent\":0.4}}}}}}}],\"header\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"date\":[{\"properties\":{\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"general\":[{\"properties\":{\"outlineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"outlineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Charge period filter'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"'12'\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'wf_standard-font, helvetica, arial, sans-serif'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}},\"parentGroupName\":\"80ed05757ebe7524bcd0\"}",
+ "filters": "[]",
+ "height": 56.00,
+ "width": 200.00,
+ "x": 0.00,
+ "y": 0.00,
+ "z": 4000.00
+ },
+ {
+ "config": "{\"name\":\"d783fb64c3602e964c6d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":95.99999999999994,\"y\":0,\"z\":9000,\"tabOrder\":51}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 704.00,
"width": 88.00,
- "x": 0.00,
- "y": 0.03,
- "z": 10000.00
+ "x": 96.00,
+ "y": 0.00,
+ "z": 9000.00
},
{
- "config": "{\"name\":\"f81d9f91028093c86a74\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":32,\"x\":282,\"y\":24,\"z\":4000,\"tabOrder\":8}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"/\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"e1e8c09513819b074c45\"}",
+ "config": "{\"name\":\"da82acac030976aadeb5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":60}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 104.00,
- "width": 32.00,
- "x": 282.00,
- "y": 24.00,
+ "height": 704.00,
+ "width": 88.00,
+ "x": 575.35,
+ "y": 0.00,
"z": 4000.00
},
{
- "config": "{\"name\":\"fa03b460b6690c58e0ae\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":32,\"x\":128.1687489663169,\"y\":35,\"z\":7000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Plus'\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
+ "config": "{\"name\":\"dbefdd081a1069c2b070\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":25}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_NegotiatedDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_NegotiatedDiscountSavings)\",\"NativeReferenceName\":\"x_NegotiatedDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'6b3c182a0701476572d9'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"36360e3d7dd203594c33\"}",
"filters": "[]",
- "height": 48.00,
- "width": 32.00,
- "x": 128.17,
- "y": 35.00,
- "z": 7000.00
+ "height": 128.00,
+ "width": 280.00,
+ "x": 576.00,
+ "y": 0.00,
+ "z": 0.00
},
{
- "config": "{\"name\":\"fbb51c3486d3cb3473c7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":72,\"width\":144,\"x\":144.00000000000193,\"y\":26.135186013642624,\"z\":3000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Unused reservations\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Unused reservations\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unused reservations'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"4a2e87ca0746b2d8c78d\"}",
- "filters": "[{\"name\":\"Filter5d8bf88b8c620b07dee5\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountStatus\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountStatus\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unused'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}},{\"name\":\"Filter2bb42c0184174c946133\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"CommitmentDiscountType\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"CommitmentDiscountType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Reservation'\"}}}}}]},\"type\":\"Advanced\",\"howCreated\":1,\"objects\":{}}]",
- "height": 72.00,
- "width": 144.00,
- "x": 144.00,
- "y": 26.14,
- "z": 3000.00
+ "config": "{\"name\":\"dc7d218c094576a75471\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":224,\"x\":175.9931659759195,\"y\":0,\"z\":8000,\"tabOrder\":10}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Commitment discount breakdown\",\"textStyle\":{\"color\":\"#6f4bb2\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'CD breakdown header'\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
+ "filters": "[]",
+ "height": 32.00,
+ "width": 224.00,
+ "x": 175.99,
+ "y": 0.00,
+ "z": 8000.00
},
{
- "config": "{\"name\":\"fc50bb61d112107d179a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":576,\"y\":0,\"z\":0,\"width\":280,\"height\":128,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_NegotiatedDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_NegotiatedDiscountSavings)\",\"NativeReferenceName\":\"x_NegotiatedDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_NegotiatedDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"5308888ed6877376b819\"}",
+ "config": "{\"name\":\"e5f987d9258e009032aa\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":288,\"y\":0,\"z\":1000,\"tabOrder\":22}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ListCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ListCost)\",\"NativeReferenceName\":\"ListCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ListCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.ListCost)\":{}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'850da8650749804d7db7'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost without discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"a7cf32283b0b200e067e\"}",
"filters": "[]",
"height": 128.00,
"width": 280.00,
- "x": 576.00,
+ "x": 288.00,
"y": 0.00,
+ "z": 1000.00
+ },
+ {
+ "config": "{\"name\":\"e61fe1b0ebb807a7b421\",\"layouts\":[{\"id\":0,\"position\":{\"height\":47.99999999999999,\"width\":32,\"x\":416.0069720119873,\"y\":34.13518601364285,\"z\":5000,\"tabOrder\":55}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"+\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"18pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Plus'\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\"}",
+ "filters": "[]",
+ "height": 48.00,
+ "width": 32.00,
+ "x": 416.01,
+ "y": 34.14,
+ "z": 5000.00
+ },
+ {
+ "config": "{\"name\":\"ec7a213c03265eaba34a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":1048,\"x\":0.09723210130613325,\"y\":153.36277795495022,\"z\":14000,\"tabOrder\":11}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"2d113bce103289cc8c05\",\"howCreated\":\"InsertVisualButton\"}",
+ "filters": "[]",
+ "height": 128.00,
+ "width": 1048.00,
+ "x": 0.10,
+ "y": 153.36,
+ "z": 14000.00
+ },
+ {
+ "config": "{\"name\":\"f2071cb8990354e77232\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48.00000000000001,\"width\":496,\"x\":32.168748966316514,\"y\":13,\"z\":0,\"tabOrder\":45}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"outline\":[{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"3D\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Border'\"}}}}}]}},\"parentGroupName\":\"b58ed9f3b0b838274060\",\"howCreated\":\"InsertVisualButton\"}",
+ "filters": "[]",
+ "height": 48.00,
+ "width": 496.00,
+ "x": 32.17,
+ "y": 13.00,
"z": 0.00
},
{
- "config": "{\"name\":\"fd4725b2ab3db65a1d83\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0.45195301936706755,\"z\":2000,\"width\":280,\"height\":128,\"tabOrder\":58}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.ContractedCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.ContractedCost)\",\"NativeReferenceName\":\"ContractedCost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"ContractedCost\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Cost after negotiated discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}]}},\"parentGroupName\":\"8105a41e503b9c24b8e6\"}",
- "filters": "[{\"name\":\"Filter31f4ad67211065e055c6\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"PricingCategory\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"PricingCategory\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Committed'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
+ "config": "{\"name\":\"f25985b71e016a207063\",\"layouts\":[{\"id\":0,\"position\":{\"height\":104,\"width\":40,\"x\":265.8585444265391,\"y\":24.429483640270234,\"z\":4000,\"tabOrder\":27}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"-\",\"textStyle\":{\"fontFamily\":\"Arial Black\",\"fontSize\":\"44pt\"}}],\"horizontalTextAlignment\":\"center\"}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Minus'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"41bb34c83eb70689dbd9\"}",
+ "filters": "[]",
+ "height": 104.00,
+ "width": 40.00,
+ "x": 265.86,
+ "y": 24.43,
+ "z": 4000.00
+ },
+ {
+ "config": "{\"name\":\"fbda7a85a84eb3038163\",\"layouts\":[{\"id\":0,\"position\":{\"height\":128,\"width\":280,\"x\":576,\"y\":0,\"z\":0,\"tabOrder\":8}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.x_CommitmentDiscountSavings)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0},\"Name\":\"Sum(Costs.x_CommitmentDiscountSavings)\",\"NativeReferenceName\":\"x_CommitmentDiscountSavings\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"x_CommitmentDiscountSavings\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0.6}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"labelPrecision\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"40D\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"section\":{\"expr\":{\"Literal\":{\"Value\":\"'bf107809b34199521151'\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Savings from commitment discounts'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"10D\"}}}}}],\"background\":[{\"properties\":{\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"a0d546007014d8050140\"}",
+ "filters": "[]",
"height": 128.00,
"width": 280.00,
- "x": 0.00,
- "y": 0.45,
- "z": 2000.00
+ "x": 576.00,
+ "y": 0.00,
+ "z": 0.00
}
],
"width": 1280.00
diff --git a/src/power-bi/storage/Shared.Dataset/definition/tables/Costs.tmdl b/src/power-bi/storage/Shared.Dataset/definition/tables/Costs.tmdl
index 4718b8b23..e23dea98b 100644
--- a/src/power-bi/storage/Shared.Dataset/definition/tables/Costs.tmdl
+++ b/src/power-bi/storage/Shared.Dataset/definition/tables/Costs.tmdl
@@ -1382,310 +1382,310 @@ table Costs
queryGroup: Storage
source = ```
let
- // Tags to promote to explicit columns -- Tag names are case-sensitive and column names will be "tag_{TagName}"
- // Add any tags you need promoted to this list
- // For recommended tags, see https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-tagging#minimum-suggested-tags
- PromotedTags = {"Application", "BusinessUnit", "CostCenter", "Department", "Division", "Env", "Owner", "Product", "Project", "Purpose", "Service"},
-
- // Get the data
- RawData = ftk_Storage("focuscost"),
-
- // Helper functions
- _exists = (col) => Table.HasColumns(RawData, col),
- _isMissing = (col) => _exists(col) = false,
- _isBlank = (val) => val = null or val = "" or Text.Replace(val, " ", "") = "",
- _isNotBlank = (val) => _isBlank(val) = false,
- _stringValue = (val) => if _isBlank(val) then null else val,
- _swapCol = (tbl, oldCol, newCol, newVal, optional newType) => let add = Table.AddColumn(tbl, newCol, newVal, newType), del = if Table.HasColumns(add, oldCol) then Table.RemoveColumns(add, {oldCol}) else add in del,
- _resetCol = (tbl, col, newVal, optional newType) => let tmpCol = Text.Combine({"tmp_", col}), tmp = _swapCol(tbl, col, tmpCol, newVal, newType), ren = Table.RenameColumns(tmp, {{tmpCol, col}}) in ren,
-
- // Update previous FOCUS versions
- PerformDeprecatedOptimizations = #"Deprecated: Perform Extra Query Optimizations",
- HasPreview = Table.HasColumns(RawData, {"ChargeSubcategory"}),
- Has10 = Table.HasColumns(RawData, {"ChargeClass"}),
- LatestSchema = if HasPreview = false then RawData
- else if PerformDeprecatedOptimizations = false then error "LegacyFocusVersion: Please enable the 'Perform Extra Query Optimizations' parameter"
- else (
- let
- ChargeClass = if Has10
- then Table.ReplaceValue(RawData, null, each if [ChargeSubcategory] = "Refund" then "Correction" else null, Replacer.ReplaceValue, {"ChargeClass"})
- else Table.AddColumn( RawData, "ChargeClass", each if [ChargeSubcategory] = "Refund" then "Correction" else null),
- CDStatus = if Has10
- then Table.ReplaceValue(ChargeClass, null, each if [ChargeSubcategory] = "Used Commitment" or [ChargeSubcategory] = "Unused Commitment" then Text.Replace([ChargeSubcategory], " Commitment", "") else null, Replacer.ReplaceValue, {"CommitmentDiscountStatus"})
- else Table.AddColumn( ChargeClass, "CommitmentDiscountStatus", each if [ChargeSubcategory] = "Used Commitment" or [ChargeSubcategory] = "Unused Commitment" then Text.Replace([ChargeSubcategory], " Commitment", "") else null),
- ConsumedQuantity = if Has10
- then Table.ReplaceValue(CDStatus, null, each if [ChargeCategory] = "Usage" then [UsageQuantity] else null, Replacer.ReplaceValue, {"ConsumedQuantity"})
- else Table.AddColumn( CDStatus, "ConsumedQuantity", each if [ChargeCategory] = "Usage" then [UsageQuantity] else null),
- ConsumedUnit = if Has10
- then Table.ReplaceValue(ConsumedQuantity, null, each if [ChargeCategory] = "Usage" then [UsageUnit] else null, Replacer.ReplaceValue, {"ConsumedUnit"})
- else Table.AddColumn( ConsumedQuantity, "ConsumedUnit", each if [ChargeCategory] = "Usage" then [UsageUnit] else null),
- ChargeCategory = Table.ReplaceValue(ConsumedUnit, each [ChargeCategory], each if [ChargeCategory] = "Adjustment" and [ChargeSubcategory] = "Refund" then "Purchase" else [ChargeCategory], Replacer.ReplaceValue, {"ChargeCategory"}),
- PricingCategory = Table.ReplaceValue(ChargeCategory, each [PricingCategory], each if [PricingCategory] = "On-Demand" then "Standard" else if [PricingCategory] = "Commitment-Based" then "Committed" else [PricingCategory], Replacer.ReplaceValue, {"PricingCategory"}),
- RenamePreviewCols = if Has10
- then Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(PricingCategory,
- each [ContractedCost], each if [ContractedCost] <> null then [ContractedCost] else [x_OnDemandCost], Replacer.ReplaceValue, {"ContractedCost"}),
- each [x_ContractedCostInUsd], each if [x_ContractedCostInUsd] <> null then [x_ContractedCostInUsd] else [x_OnDemandCostInUsd], Replacer.ReplaceValue, {"x_ContractedCostInUsd"}),
- each [ContractedUnitPrice], each if [ContractedUnitPrice] <> null then [ContractedUnitPrice] else [x_OnDemandUnitPrice], Replacer.ReplaceValue, {"ContractedUnitPrice"}),
- each [RegionName], each if [RegionName] <> null then [RegionName] else [Region], Replacer.ReplaceValue, {"RegionName"})
- else Table.RenameColumns(PricingCategory, {{"x_OnDemandCost", "ContractedCost"}, {"x_OnDemandCostInUsd", "x_ContractedCostInUsd"}, {"x_OnDemandUnitPrice", "ContractedUnitPrice"}, {"Region", "RegionName"}}),
- RemovePreviewCols = Table.RemoveColumns(RenamePreviewCols, {"ChargeSubcategory", "UsageQuantity", "UsageUnit", "x_ChargeId"})
- in
- RemovePreviewCols
- ),
-
- // Fix known bugs and set datatyps
- Fixes = Table.TransformColumnTypes(
- Table.ReplaceValue(Table.ReplaceValue(
- // Create AvailabilityZone column if missing to support non-Microsoft clouds
- if Table.HasColumns(LatestSchema, {"AvailabilityZone"}) then LatestSchema else Table.AddColumn(LatestSchema, "AvailabilityZone", each null),
- // Fix savings plan purchases -- Cost Management fix pending as of Dec 8, 2024
- each [EffectiveCost], each if [ChargeCategory] = "Purchase" and [CommitmentDiscountId] <> "" and [CommitmentDiscountId] <> null then 0.0 else [EffectiveCost], Replacer.ReplaceValue, {"EffectiveCost"}),
- // Fix PricingCategory values -- Remove after Oct 1, 2025
- "Standard", each if [CommitmentDiscountId] <> null and [ChargeCategory] = "Usage" then "Committed" else [PricingCategory], Replacer.ReplaceValue, {"PricingCategory"}),
- {
- // Date columns
- {"BillingPeriodEnd", type datetimezone},
- {"BillingPeriodStart", type datetimezone},
- {"ChargePeriodEnd", type datetimezone},
- {"ChargePeriodStart", type datetimezone},
- {"x_BillingExchangeRateDate", type datetimezone},
- {"x_ServicePeriodStart", type datetimezone},
- {"x_ServicePeriodEnd", type datetimezone},
- // Cost/price columns
- {"BilledCost", type number},
- {"ContractedCost", type number},
- {"ContractedUnitPrice", type number},
- {"EffectiveCost", type number},
- {"ListCost", type number},
- {"ListUnitPrice", type number},
- {"x_BilledCostInUsd", type number},
- {"x_BilledUnitPrice", type number},
- {"x_ContractedCostInUsd", type number},
- {"x_EffectiveCostInUsd", type number},
- {"x_EffectiveUnitPrice", type number},
- // Other columns
- {"ConsumedQuantity", type number},
- {"PricingQuantity", type number},
- {"x_BillingExchangeRate", type number},
- {"x_PartnerCreditRate", type number},
- {"x_PricingBlockSize", type number}
- // {"x_SkuTerm", type number}
- // {"x_SkuIsCreditEligible", type logical}
- // {"x_PartnerCreditApplied", type logical}
- }
- ),
- OptionalFixes = if PerformDeprecatedOptimizations = false then Fixes else Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(
- // Track all the changes we're about to make before we make them for transparency
- Table.AddColumn(
- Fixes,
- "x_SourceChanges",
- each let
- value = Text.Combine(List.RemoveNulls({
- if ([ContractedCost] = null or [ContractedCost] = 0) and [EffectiveCost] <> 0 then "MissingContractedCost" else null,
- if ([ContractedUnitPrice] = null or [ContractedUnitPrice] = 0) and [x_EffectiveUnitPrice] <> 0 then "MissingContractedUnitPrice" else null,
- if ([ListCost] = null or [ListCost] = 0) and ([ContractedCost] <> 0 or [EffectiveCost] <> 0) then "MissingListCost" else null,
- if ([ListUnitPrice] = null or [ListUnitPrice] = 0) and ([ContractedUnitPrice] <> 0 or [x_EffectiveUnitPrice] <> 0) then "MissingListUnitPrice" else null,
- if [PricingCategory] = "Standard" and [CommitmentDiscountId] <> null and [ChargeCategory] = "Usage" then "PricingCategoryShouldBeCommitted" else null,
- if [x_SkuTerm] = "1Year" or [x_SkuTerm] = "3Years" or [x_SkuTerm] = "5Years" then "SkuTermShouldBeAnInteger" else null
- }), ","),
- output = if _isBlank(value) then null else value
- in
- output
- ),
- // Fix inconsistent Microsoft x_SkuTerm values
- "1Year", 12, Replacer.ReplaceValue, {"x_SkuTerm"}),
- "3Years", 36, Replacer.ReplaceValue, {"x_SkuTerm"}),
- "5Years", 60, Replacer.ReplaceValue, {"x_SkuTerm"}),
-
- // Split CostDetails by what needs prices and what doesn't
- PopulateMissingPrices =
- Table.TransformColumnTypes(
- if #"Experimental: Add Missing Prices" = false then
- // Copy prices/costs from related columns
- Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(OptionalFixes,
- 0.0, each if [x_EffectiveUnitPrice] <> 0 then [x_EffectiveUnitPrice] else [ContractedUnitPrice], Replacer.ReplaceValue, {"ContractedUnitPrice"}),
- 0.0, each if ([ContractedUnitPrice] <> 0 or [x_EffectiveUnitPrice] <> 0) then [ContractedUnitPrice] else [ListUnitPrice], Replacer.ReplaceValue, {"ListUnitPrice"}),
- 0.0, each if [EffectiveCost] <> 0 then [EffectiveCost] else [ContractedCost], Replacer.ReplaceValue, {"ContractedCost"}),
- 0.0, each if ([ContractedCost] <> 0 or [EffectiveCost] <> 0) then [ContractedCost] else [ListCost], Replacer.ReplaceValue, {"ListCost"})
- else
- Table.RemoveColumns(
- Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(
- // Join only the rows/columns that need to be joined
- Table.ExpandTableColumn(
- Table.NestedJoin(
- Table.AddColumn(OptionalFixes, "tmp_MeterOfferStart", each [x_SkuMeterId] & [x_SkuOfferId] & DateTimeZone.ToText([ChargePeriodStart], [Format="yyyy-MM"])),
- {"tmp_MeterOfferStart"},
- // Join missing prices with the cost rows that are missing tose prices
- Table.SelectColumns(
- Table.AddColumn(
- Table.SelectRows(Prices, each [x_SkuPriceType] = "Consumption" and [x_SkuMeterId] <> "" and [x_SkuMeterId] <> null),
- "tmp_MeterOfferStart",
- each [x_SkuMeterId] & [x_SkuOfferId] & DateTime.ToText([x_EffectivePeriodStart], [Format="yyyy-MM"])
- ),
- {"tmp_MeterOfferStart", "ListUnitPrice", "ContractedUnitPrice", "PricingUnit", "x_PricingBlockSize"}
- ),
- {"tmp_MeterOfferStart"},
- "Prices",
- JoinKind.LeftOuter
- ),
- "Prices",
- {"ListUnitPrice", "ContractedUnitPrice", "PricingUnit", "x_PricingBlockSize"},
- {"NewListUnitPrice", "NewContractedUnitPrice", "NewPricingUnit", "NewPricingBlockSize"}
- ),
- // Update missing prices
- 0.0, each if [x_EffectiveUnitPrice] <> 0 and [PricingUnit] = [NewPricingUnit] then [NewContractedUnitPrice] * [x_BillingExchangeRate] / [NewPricingBlockSize] * [x_PricingBlockSize] else [x_EffectiveUnitPrice], Replacer.ReplaceValue, {"ContractedUnitPrice"}),
- 0.0, each if ([ContractedUnitPrice] <> 0 or [x_EffectiveUnitPrice] <> 0) and [PricingUnit] = [NewPricingUnit] then [NewListUnitPrice] * [x_BillingExchangeRate] / [NewPricingBlockSize] * [x_PricingBlockSize] else [ContractedUnitPrice], Replacer.ReplaceValue, {"ListUnitPrice"}),
- // Update missing costs
- 0.0, each if [EffectiveCost] <> 0 and [ContractedUnitPrice] <> null then [PricingQuantity] * [ContractedUnitPrice] else [ContractedCost], Replacer.ReplaceValue, {"ContractedCost"}),
- 0.0, each if ([ContractedCost] <> 0 or [EffectiveCost] <> 0) and [ListUnitPrice] <> null then [PricingQuantity] * [ListUnitPrice] else [ListCost], Replacer.ReplaceValue, {"ListCost"}),
- {"NewListUnitPrice", "NewContractedUnitPrice", "NewPricingUnit", "NewPricingBlockSize", "tmp_MeterOfferStart"}
- ),
- {{"ContractedCost", type number}, {"ContractedUnitPrice", type number}, {"ListCost", type number}, {"ListUnitPrice", type number}}
- ),
-
- Add = Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
- PopulateMissingPrices,
- // Parse arrays
- "x_SkuDetailsDictionary", each if _isBlank([x_SkuDetails]) then [] else try Json.Document([x_SkuDetails]) otherwise []),
- "x_TagsDictionary", each if _isBlank([Tags]) then [] else try Json.Document([Tags]) otherwise []),
- // Commitment metadata
- "x_CommitmentDiscountUtilizationPotential", each if [CommitmentDiscountCategory] = "Usage" then [ConsumedQuantity] else if [CommitmentDiscountCategory] = "Spend" then [EffectiveCost] else 0, type number),
- "x_CommitmentDiscountUtilizationAmount", each if [CommitmentDiscountStatus] = "Used" then [x_CommitmentDiscountUtilizationPotential] else 0, type number),
- // Savings calculations
- // TODO: Remove or make a % -- "x_CommitmentDiscountPercent", each if [ContractedUnitPrice] <> null and [ContractedUnitPrice] > 0 and [x_EffectiveUnitPrice] <> null and [x_EffectiveUnitPrice] > 0 and [ContractedUnitPrice] >= [x_EffectiveUnitPrice] then [ContractedUnitPrice] - [x_EffectiveUnitPrice] else null, type number),
- // TODO: Remove or make a % -- "x_NegotiatedDiscountPercent", each if [ContractedUnitPrice] <> null and [ContractedUnitPrice] > 0 and [ListUnitPrice] <> null and [ListUnitPrice] > 0 and [ListUnitPrice] >= [ContractedUnitPrice] then [ListUnitPrice] - [ContractedUnitPrice] else null, type number),
- // TODO: Remove or make a % -- "x_DiscountUnitPriceSavings", each if [ListUnitPrice] <> null and [ListUnitPrice] > 0 and [x_EffectiveUnitPrice] <> null and [x_EffectiveUnitPrice] > 0 and [ListUnitPrice] > 0 and [ListUnitPrice] >= [x_EffectiveUnitPrice] then [ListUnitPrice] - [x_EffectiveUnitPrice] else null, type number),
- "x_CommitmentDiscountSavings", each if _isBlank([CommitmentDiscountCategory]) then 0 else if [ContractedCost] <> null and [ContractedCost] > 0 and [EffectiveCost] <> null and [EffectiveCost] > 0 and [ContractedCost] >= [EffectiveCost] then [ContractedCost] - [EffectiveCost] else null, type number),
- "x_NegotiatedDiscountSavings", each if [ListCost] <> null and [ListCost] > 0 and [ContractedCost] <> null and [ContractedCost] > 0 and [ListCost] >= [ContractedCost] then [ListCost] - [ContractedCost] else null, type number),
- "x_AmortizationCategory", each if [ChargeCategory] = "Purchase" and _isNotBlank([CommitmentDiscountId]) then "Principal" else if _isNotBlank([CommitmentDiscountId]) then "Amortized Charge" else ""),
- "x_CommitmentDiscountPercent", each if [ContractedUnitPrice] = 0 then 0 else ([ContractedUnitPrice] - [x_EffectiveUnitPrice]) / [ContractedUnitPrice]),
- "x_NegotiatedDiscountPercent", each if [ListUnitPrice] = 0 then 0 else ([ListUnitPrice] - [ContractedUnitPrice]) / [ListUnitPrice]),
- "x_TotalDiscountPercent", each if [ListUnitPrice] = 0 then 0 else ([ListUnitPrice] - [x_EffectiveUnitPrice]) / [ListUnitPrice]),
- "x_TotalSavings",
- each if [ListCost] <> null and [ListCost] > 0 and [EffectiveCost] <> null and [EffectiveCost] > 0 and [ListCost] >= [EffectiveCost] then [ListCost] - [EffectiveCost]
- else if [ContractedCost] <> null and [ContractedCost] > 0 and [EffectiveCost] <> null and [EffectiveCost] > 0 and [ContractedCost] >= [EffectiveCost] then [ContractedCost] - [EffectiveCost] else null, type number),
- // Month column
- "x_ChargeMonth", each DateTime.Date(Date.StartOfMonth([ChargePeriodStart])), type date),
- "x_ReportingDate", each if #"Default Granularity" = "Monthly" then [x_ChargeMonth] else DateTime.Date([ChargePeriodStart]), type date),
- OptionalAdd = if PerformDeprecatedOptimizations = false then Add else Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
- Add,
- // Explain why cost is 0
- "x_FreeReason",
- each if [BilledCost] <> 0.0 or [EffectiveCost] <> 0.0 then null
- else if [PricingCategory] = "Committed" then "Unknown " & [CommitmentDiscountStatus] & " Commitment"
- else if [x_BilledUnitPrice] = 0.0 and [x_EffectiveUnitPrice] = 0.0 and [ContractedUnitPrice] = 0.0 and [ListUnitPrice] = 0.0 and _isBlank([CommitmentDiscountType]) then (
- if _isNotBlank([x_SkuDescription]) and Text.Contains([x_SkuDescription], "Trial") then "Trial" else if _isNotBlank([x_SkuDescription]) and Text.Contains([x_SkuDescription], "Preview") then "Preview" else "Other"
- )
- else if [x_BilledUnitPrice] > 0.0 or [x_EffectiveUnitPrice] > 0.0 then (
- if [PricingQuantity] > 0.0 then "Low Usage" else if [PricingQuantity] = 0.0 then "No Usage" else "Unknown Negative Quantity"
- )
- else "Unknown"
- ),
- // Unique names -- Must be after ResourceName cleanup and Commitment columns
- // TODO: Only add differentiators when the name is not unique
- "CommitmentDiscountNameUnique", each if _isBlank([CommitmentDiscountId]) then null else [CommitmentDiscountName] & " (" & [CommitmentDiscountType] & ")"),
- "ResourceNameUnique", each if _isBlank([ResourceId]) then null else [ResourceName] & " (" & [ResourceType] & ")"),
- "x_ResourceGroupNameUnique", each if _isBlank([x_ResourceGroupName]) then null else [x_ResourceGroupName] & " (" & [SubAccountName] & ")"),
- "SubAccountNameUnique", each if _isBlank([SubAccountId]) then null else [SubAccountName] & " (" & ftk_ParseResourceName([SubAccountId]) & ")"),
-
- // FTK columns
- FTK = Table.RemoveColumns(
- Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
- Table.ExpandRecordColumn(
- Table.ReplaceErrorValues(Table.AddColumn(OptionalAdd, "tmp_Tags", each [x_TagsDictionary]), {{"tmp_Tags", null}}),
- "tmp_Tags",
- {"cm-resource-parent", "ms-resource-parent", "hidden-managedby", "costanalysis-parent", "ftk-version", "ftk-tool"},
- {"tmp_cmParent", "tmp_msParent", "tmp_ManagedBy", "tmp_caParent", "x_ToolkitVersion", "tmp_ToolkitTool"}
- ),
- "x_ResourceParentId",
- each _stringValue(Text.Replace("/" & (
- if _isNotBlank([tmp_cmParent]) then [tmp_cmParent]
- else if _isNotBlank([tmp_msParent]) then [tmp_msParent]
- else if _isNotBlank([tmp_ManagedBy]) then [tmp_ManagedBy]
- else if _isNotBlank([tmp_caParent]) then [tmp_caParent]
- else null
- ), "//", "/"))),
- "x_ResourceParentType", each ftk_ParseResourceType([x_ResourceParentId])),
- "x_ResourceParentName", each ftk_ParseResourceName([x_ResourceParentId])),
- "x_ToolkitTool",
- each if _isNotBlank([tmp_ToolkitTool]) then [tmp_ToolkitTool]
- else if _isBlank([x_ResourceParentId]) then null
- else if Text.Contains(Text.Lower([x_ResourceParentId]), "/providers/microsoft.cloud/hubs/") then "FinOps hubs"
- else null
- ),
- { "tmp_cmParent", "tmp_msParent", "tmp_caParent", "tmp_ManagedBy", "tmp_ToolkitTool" }
- ),
-
- // Extracted tags
- // TODO: Consider adding tag cleanup to this as well
- ExtractedTags = Table.ExpandRecordColumn(
- Table.ReplaceErrorValues(Table.AddColumn(FTK, "tmp_Tags", each [x_TagsDictionary]), {{"tmp_Tags", null}}),
- "tmp_Tags",
- PromotedTags,
- List.Transform(PromotedTags, each "tag_" & _)
- ),
-
- // AHB columns
- // TODO: Add SQL AHB handling
- AHB = Table.RemoveColumns(
- Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
- Table.TransformColumnTypes(
- Table.ExpandRecordColumn(
- Table.ReplaceErrorValues(Table.AddColumn(ExtractedTags, "tmp_SkuDetails", each [x_SkuDetailsDictionary]), {{"tmp_SkuDetails", null}}),
- "tmp_SkuDetails",
- {"UsageType", "ImageType", "ServiceType", "VMName", "VMProperties", "VCPUs", "ReservationOrderId", "ReservationId", "VMCapacityReservationId", "AHB", "vCores"},
- {"x_SkuUsageType", "x_SkuImageType", "x_SkuType", "tmp_VMName", "x_SkuVMProperties", "tmp_VMvCPUs", "tmp_AddlReservationOrderId", "tmp_AddlReservationId", "x_CapacityCommitmentId", "tmp_SQLAHB", "tmp_SQLvCores"}
- ),
- {{"tmp_VMvCPUs", Int64.Type}, {"tmp_SQLvCores", Int64.Type}}
- ),
- "x_ResourceMachineName", each if _isNotBlank([tmp_VMName]) then [tmp_VMName] else null),
- "x_SkuCoreCount", each if [tmp_VMvCPUs] <> null then [tmp_VMvCPUs] else if [tmp_SQLvCores] <> null then [tmp_SQLvCores] else null, Int64.Type),
- "x_ConsumedCoreHours", each if [x_SkuCoreCount] <> null then [x_SkuCoreCount] * [ConsumedQuantity] else null, type number),
- "x_SkuLicenseQuantity",
- each if [x_SkuCoreCount] = null then 0
- else if [x_SkuCoreCount] <= 8 then 8
- else if [x_SkuCoreCount] <= 16 then 16
- else if [x_SkuCoreCount] = 20 then 24
- else if [x_SkuCoreCount] > 20 then [x_SkuCoreCount]
- else 0,
- type number
- ),
- "x_SkuLicenseStatus", each if _isNotBlank([x_SkuMeterSubcategory]) and Text.Contains([x_SkuMeterSubcategory], "Windows") or [tmp_SQLAHB] = "False" then "Not enabled" else if (_isNotBlank([x_SkuImageType]) and Text.Contains([x_SkuImageType], "Windows Server BYOL")) or [tmp_SQLAHB] = "True" or (_isNotBlank([x_SkuMeterSubcategory]) and Text.Contains([x_SkuMeterSubcategory], "Azure Hybrid Benefit")) then "Enabled" else "Not supported"),
- "x_CommitmentDiscountKey", each [x_SkuType] & [x_SkuMeterId]),
- { "tmp_AddlReservationOrderId", "tmp_AddlReservationId", "tmp_SQLAHB", "tmp_SQLvCores", "tmp_VMName", "tmp_VMvCPUs" }
- ),
-
- // Unique key for the record -- WARNING: This increases the data size significantly.
- /*
- ChargeId = Table.AddColumn(Month, "x_ChargeId", each Text.Combine(List.RemoveItems({
- Date.ToText([ChargePeriodStart]),
- [x_BillingAccountId],
- if [x_BillingProfileId] = [x_BillingAccountId] then null else [x_BillingProfileId], // Only add BP if not the same as the BA (all EA)
- [x_InvoiceSectionId],
- if _isNotBlank([ResourceId]) and Text.Contains([ResourceId], [x_SubscriptionId]) then null else [x_SubscriptionId], // Only add sub if not in the resource ID
- [ResourceId],
- [tmp_ResourceLocation],
- [x_SkuOfferId],
- [SkuPriceId],
- [x_SkuMeterId],
- [x_SkuPartNumber],
- if _isBlank([CommitmentDiscountId]) then null else List.Last(Text.Split([CommitmentDiscountId], "/")),
- [x_CostAllocationRuleName],
- [x_CostCenter],
- if _isBlank([Tags]) then null else Text.Remove([Tags], {"{","""","}"}),
- if _isBlank([x_SkuDetails]) then null else Text.Remove([x_SkuDetails], {"{","""","}"})
- }, {null, ""}), "-")),
- */
-
- // Sort columns alphabetically
- Output = Table.ReorderColumns(AHB, List.Sort(Table.ColumnNames(AHB)))
- in
- Output
+ // Tags to promote to explicit columns -- Tag names are case-sensitive and column names will be "tag_{TagName}"
+ // Add any tags you need promoted to this list
+ // For recommended tags, see https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-tagging#minimum-suggested-tags
+ PromotedTags = {"Application", "BusinessUnit", "CostCenter", "Department", "Division", "Env", "Owner", "Product", "Project", "Purpose", "Service"},
- // annotation PBI_QueryRelationships = {"columnCount":50,"keyColumnNames":[],"queryRelationships":[],"columnIdentities":["Section1/Usage details amortized/usagedetailsamortized.{BillingAccountId,0}","Section1/Usage details amortized/usagedetailsamortized.{BillingAccountName,1}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodStartDate,2}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodEndDate,3}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileId,4}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileName,5}","Section1/Usage details amortized/usagedetailsamortized.{AccountOwnerId,6}","Section1/Usage details amortized/usagedetailsamortized.{AccountName,7}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionId,8}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionName,9}","Section1/Usage details amortized/usagedetailsamortized.{Date,10}","Section1/Usage details amortized/usagedetailsamortized.{Product,11}","Section1/Usage details amortized/usagedetailsamortized.{PartNumber,12}","Section1/Usage details amortized/usagedetailsamortized.{MeterId,13}","Section1/Usage details amortized/usagedetailsamortized.{ServiceFamily,14}","Section1/Usage details amortized/usagedetailsamortized.{MeterCategory,15}","Section1/Usage details amortized/usagedetailsamortized.{MeterSubCategory,16}","Section1/Usage details amortized/usagedetailsamortized.{MeterRegion,17}","Section1/Usage details amortized/usagedetailsamortized.{MeterName,18}","Section1/Usage details amortized/usagedetailsamortized.{Quantity,19}","Section1/Usage details amortized/usagedetailsamortized.{EffectivePrice,20}","Section1/Usage details amortized/usagedetailsamortized.{Cost,21}","Section1/Usage details amortized/usagedetailsamortized.{UnitPrice,22}","Section1/Usage details amortized/usagedetailsamortized.{BillingCurrency,23}","Section1/Usage details amortized/usagedetailsamortized.{ResourceLocation,24}","Section1/Usage details amortized/usagedetailsamortized.{AvailabilityZone,25}","Section1/Usage details amortized/usagedetailsamortized.{ConsumedService,26}","Section1/Usage details amortized/usagedetailsamortized.{ResourceId,27}","Section1/Usage details amortized/usagedetailsamortized.{ResourceName,28}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo1,29}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo2,30}","Section1/Usage details amortized/usagedetailsamortized.{AdditionalInfo,31}","Section1/Usage details amortized/usagedetailsamortized.{Tags,32}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSectionId,33}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSection,34}","Section1/Usage details amortized/usagedetailsamortized.{CostCenter,35}","Section1/Usage details amortized/usagedetailsamortized.{UnitOfMeasure,36}","Section1/Usage details amortized/usagedetailsamortized.{ResourceGroup,37}","Section1/Usage details amortized/usagedetailsamortized.{ReservationId,38}","Section1/Usage details amortized/usagedetailsamortized.{ReservationName,39}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderId,40}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderName,41}","Section1/Usage details amortized/usagedetailsamortized.{OfferId,42}","Section1/Usage details amortized/usagedetailsamortized.{IsAzureCreditEligible,43}","Section1/Usage details amortized/usagedetailsamortized.{Term,44}","Section1/Usage details amortized/usagedetailsamortized.{PublisherName,45}","Section1/Usage details amortized/usagedetailsamortized.{PlanName,46}","Section1/Usage details amortized/usagedetailsamortized.{ChargeType,47}","Section1/Usage details amortized/usagedetailsamortized.{Frequency,48}","Section1/Usage details amortized/usagedetailsamortized.{PublisherType,49}"],"ColumnCount":50,"KeyColumnNames":[],"ColumnIdentities":["Section1/Usage details amortized/usagedetailsamortized.{BillingAccountId,0}","Section1/Usage details amortized/usagedetailsamortized.{BillingAccountName,1}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodStartDate,2}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodEndDate,3}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileId,4}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileName,5}","Section1/Usage details amortized/usagedetailsamortized.{AccountOwnerId,6}","Section1/Usage details amortized/usagedetailsamortized.{AccountName,7}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionId,8}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionName,9}","Section1/Usage details amortized/usagedetailsamortized.{Date,10}","Section1/Usage details amortized/usagedetailsamortized.{Product,11}","Section1/Usage details amortized/usagedetailsamortized.{PartNumber,12}","Section1/Usage details amortized/usagedetailsamortized.{MeterId,13}","Section1/Usage details amortized/usagedetailsamortized.{ServiceFamily,14}","Section1/Usage details amortized/usagedetailsamortized.{MeterCategory,15}","Section1/Usage details amortized/usagedetailsamortized.{MeterSubCategory,16}","Section1/Usage details amortized/usagedetailsamortized.{MeterRegion,17}","Section1/Usage details amortized/usagedetailsamortized.{MeterName,18}","Section1/Usage details amortized/usagedetailsamortized.{Quantity,19}","Section1/Usage details amortized/usagedetailsamortized.{EffectivePrice,20}","Section1/Usage details amortized/usagedetailsamortized.{Cost,21}","Section1/Usage details amortized/usagedetailsamortized.{UnitPrice,22}","Section1/Usage details amortized/usagedetailsamortized.{BillingCurrency,23}","Section1/Usage details amortized/usagedetailsamortized.{ResourceLocation,24}","Section1/Usage details amortized/usagedetailsamortized.{AvailabilityZone,25}","Section1/Usage details amortized/usagedetailsamortized.{ConsumedService,26}","Section1/Usage details amortized/usagedetailsamortized.{ResourceId,27}","Section1/Usage details amortized/usagedetailsamortized.{ResourceName,28}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo1,29}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo2,30}","Section1/Usage details amortized/usagedetailsamortized.{AdditionalInfo,31}","Section1/Usage details amortized/usagedetailsamortized.{Tags,32}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSectionId,33}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSection,34}","Section1/Usage details amortized/usagedetailsamortized.{CostCenter,35}","Section1/Usage details amortized/usagedetailsamortized.{UnitOfMeasure,36}","Section1/Usage details amortized/usagedetailsamortized.{ResourceGroup,37}","Section1/Usage details amortized/usagedetailsamortized.{ReservationId,38}","Section1/Usage details amortized/usagedetailsamortized.{ReservationName,39}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderId,40}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderName,41}","Section1/Usage details amortized/usagedetailsamortized.{OfferId,42}","Section1/Usage details amortized/usagedetailsamortized.{IsAzureCreditEligible,43}","Section1/Usage details amortized/usagedetailsamortized.{Term,44}","Section1/Usage details amortized/usagedetailsamortized.{PublisherName,45}","Section1/Usage details amortized/usagedetailsamortized.{PlanName,46}","Section1/Usage details amortized/usagedetailsamortized.{ChargeType,47}","Section1/Usage details amortized/usagedetailsamortized.{Frequency,48}","Section1/Usage details amortized/usagedetailsamortized.{PublisherType,49}"],"RelationshipInfo":[]}
+ // Get the data
+ RawData = ftk_Storage("focuscost"),
+
+ // Helper functions
+ _exists = (col) => Table.HasColumns(RawData, col),
+ _isMissing = (col) => _exists(col) = false,
+ _isBlank = (val) => val = null or val = "" or Text.Replace(val, " ", "") = "",
+ _isNotBlank = (val) => _isBlank(val) = false,
+ _stringValue = (val) => if _isBlank(val) then null else val,
+ _swapCol = (tbl, oldCol, newCol, newVal, optional newType) => let add = Table.AddColumn(tbl, newCol, newVal, newType), del = if Table.HasColumns(add, oldCol) then Table.RemoveColumns(add, {oldCol}) else add in del,
+ _resetCol = (tbl, col, newVal, optional newType) => let tmpCol = Text.Combine({"tmp_", col}), tmp = _swapCol(tbl, col, tmpCol, newVal, newType), ren = Table.RenameColumns(tmp, {{tmpCol, col}}) in ren,
+
+ // Update previous FOCUS versions
+ PerformDeprecatedOptimizations = #"Deprecated: Perform Extra Query Optimizations",
+ HasPreview = Table.HasColumns(RawData, {"ChargeSubcategory"}),
+ Has10 = Table.HasColumns(RawData, {"ChargeClass"}),
+ LatestSchema = if HasPreview = false then RawData
+ else if PerformDeprecatedOptimizations = false then error "LegacyFocusVersion: Please enable the 'Perform Extra Query Optimizations' parameter"
+ else (
+ let
+ ChargeClass = if Has10
+ then Table.ReplaceValue(RawData, null, each if [ChargeSubcategory] = "Refund" then "Correction" else null, Replacer.ReplaceValue, {"ChargeClass"})
+ else Table.AddColumn( RawData, "ChargeClass", each if [ChargeSubcategory] = "Refund" then "Correction" else null),
+ CDStatus = if Has10
+ then Table.ReplaceValue(ChargeClass, null, each if [ChargeSubcategory] = "Used Commitment" or [ChargeSubcategory] = "Unused Commitment" then Text.Replace([ChargeSubcategory], " Commitment", "") else null, Replacer.ReplaceValue, {"CommitmentDiscountStatus"})
+ else Table.AddColumn( ChargeClass, "CommitmentDiscountStatus", each if [ChargeSubcategory] = "Used Commitment" or [ChargeSubcategory] = "Unused Commitment" then Text.Replace([ChargeSubcategory], " Commitment", "") else null),
+ ConsumedQuantity = if Has10
+ then Table.ReplaceValue(CDStatus, null, each if [ChargeCategory] = "Usage" then [UsageQuantity] else null, Replacer.ReplaceValue, {"ConsumedQuantity"})
+ else Table.AddColumn( CDStatus, "ConsumedQuantity", each if [ChargeCategory] = "Usage" then [UsageQuantity] else null),
+ ConsumedUnit = if Has10
+ then Table.ReplaceValue(ConsumedQuantity, null, each if [ChargeCategory] = "Usage" then [UsageUnit] else null, Replacer.ReplaceValue, {"ConsumedUnit"})
+ else Table.AddColumn( ConsumedQuantity, "ConsumedUnit", each if [ChargeCategory] = "Usage" then [UsageUnit] else null),
+ ChargeCategory = Table.ReplaceValue(ConsumedUnit, each [ChargeCategory], each if [ChargeCategory] = "Adjustment" and [ChargeSubcategory] = "Refund" then "Purchase" else [ChargeCategory], Replacer.ReplaceValue, {"ChargeCategory"}),
+ PricingCategory = Table.ReplaceValue(ChargeCategory, each [PricingCategory], each if [PricingCategory] = "On-Demand" then "Standard" else if [PricingCategory] = "Commitment-Based" then "Committed" else [PricingCategory], Replacer.ReplaceValue, {"PricingCategory"}),
+ RenamePreviewCols = if Has10
+ then Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(PricingCategory,
+ each [ContractedCost], each if [ContractedCost] <> null then [ContractedCost] else [x_OnDemandCost], Replacer.ReplaceValue, {"ContractedCost"}),
+ each [x_ContractedCostInUsd], each if [x_ContractedCostInUsd] <> null then [x_ContractedCostInUsd] else [x_OnDemandCostInUsd], Replacer.ReplaceValue, {"x_ContractedCostInUsd"}),
+ each [ContractedUnitPrice], each if [ContractedUnitPrice] <> null then [ContractedUnitPrice] else [x_OnDemandUnitPrice], Replacer.ReplaceValue, {"ContractedUnitPrice"}),
+ each [RegionName], each if [RegionName] <> null then [RegionName] else [Region], Replacer.ReplaceValue, {"RegionName"})
+ else Table.RenameColumns(PricingCategory, {{"x_OnDemandCost", "ContractedCost"}, {"x_OnDemandCostInUsd", "x_ContractedCostInUsd"}, {"x_OnDemandUnitPrice", "ContractedUnitPrice"}, {"Region", "RegionName"}}),
+ RemovePreviewCols = Table.RemoveColumns(RenamePreviewCols, {"ChargeSubcategory", "UsageQuantity", "UsageUnit", "x_ChargeId"})
+ in
+ RemovePreviewCols
+ ),
+
+ // Fix known bugs and set datatyps
+ Fixes = Table.TransformColumnTypes(
+ Table.ReplaceValue(Table.ReplaceValue(
+ // Create AvailabilityZone column if missing to support non-Microsoft clouds
+ if Table.HasColumns(LatestSchema, {"AvailabilityZone"}) then LatestSchema else Table.AddColumn(LatestSchema, "AvailabilityZone", each null),
+ // Fix savings plan purchases -- Cost Management fix pending as of Dec 8, 2024
+ each [EffectiveCost], each if [ChargeCategory] = "Purchase" and [CommitmentDiscountId] <> "" and [CommitmentDiscountId] <> null then 0.0 else [EffectiveCost], Replacer.ReplaceValue, {"EffectiveCost"}),
+ // Fix PricingCategory values -- Remove after Oct 1, 2025
+ "Standard", each if [CommitmentDiscountId] <> null and [ChargeCategory] = "Usage" then "Committed" else [PricingCategory], Replacer.ReplaceValue, {"PricingCategory"}),
+ {
+ // Date columns
+ {"BillingPeriodEnd", type datetimezone},
+ {"BillingPeriodStart", type datetimezone},
+ {"ChargePeriodEnd", type datetimezone},
+ {"ChargePeriodStart", type datetimezone},
+ {"x_BillingExchangeRateDate", type datetimezone},
+ {"x_ServicePeriodStart", type datetimezone},
+ {"x_ServicePeriodEnd", type datetimezone},
+ // Cost/price columns
+ {"BilledCost", type number},
+ {"ContractedCost", type number},
+ {"ContractedUnitPrice", type number},
+ {"EffectiveCost", type number},
+ {"ListCost", type number},
+ {"ListUnitPrice", type number},
+ {"x_BilledCostInUsd", type number},
+ {"x_BilledUnitPrice", type number},
+ {"x_ContractedCostInUsd", type number},
+ {"x_EffectiveCostInUsd", type number},
+ {"x_EffectiveUnitPrice", type number},
+ // Other columns
+ {"ConsumedQuantity", type number},
+ {"PricingQuantity", type number},
+ {"x_BillingExchangeRate", type number},
+ {"x_PartnerCreditRate", type number},
+ {"x_PricingBlockSize", type number}
+ // {"x_SkuTerm", type number}
+ // {"x_SkuIsCreditEligible", type logical}
+ // {"x_PartnerCreditApplied", type logical}
+ }
+ ),
+ OptionalFixes = if PerformDeprecatedOptimizations = false then Fixes else Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(
+ // Track all the changes we're about to make before we make them for transparency
+ Table.AddColumn(
+ Fixes,
+ "x_SourceChanges",
+ each let
+ value = Text.Combine(List.RemoveNulls({
+ if ([ContractedCost] = null or [ContractedCost] = 0) and [EffectiveCost] <> 0 then "MissingContractedCost" else null,
+ if ([ContractedUnitPrice] = null or [ContractedUnitPrice] = 0) and [x_EffectiveUnitPrice] <> 0 then "MissingContractedUnitPrice" else null,
+ if ([ListCost] = null or [ListCost] = 0) and ([ContractedCost] <> 0 or [EffectiveCost] <> 0) then "MissingListCost" else null,
+ if ([ListUnitPrice] = null or [ListUnitPrice] = 0) and ([ContractedUnitPrice] <> 0 or [x_EffectiveUnitPrice] <> 0) then "MissingListUnitPrice" else null,
+ if [PricingCategory] = "Standard" and [CommitmentDiscountId] <> null and [ChargeCategory] = "Usage" then "PricingCategoryShouldBeCommitted" else null,
+ if [x_SkuTerm] = "1Year" or [x_SkuTerm] = "3Years" or [x_SkuTerm] = "5Years" then "SkuTermShouldBeAnInteger" else null
+ }), ","),
+ output = if _isBlank(value) then null else value
+ in
+ output
+ ),
+ // Fix inconsistent Microsoft x_SkuTerm values
+ "1Year", 12, Replacer.ReplaceValue, {"x_SkuTerm"}),
+ "3Years", 36, Replacer.ReplaceValue, {"x_SkuTerm"}),
+ "5Years", 60, Replacer.ReplaceValue, {"x_SkuTerm"}),
+
+ // Split CostDetails by what needs prices and what doesn't
+ PopulateMissingPrices =
+ Table.TransformColumnTypes(
+ if #"Experimental: Add Missing Prices" = false then
+ // Copy prices/costs from related columns
+ Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(OptionalFixes,
+ 0.0, each if [x_EffectiveUnitPrice] <> 0 then [x_EffectiveUnitPrice] else [ContractedUnitPrice], Replacer.ReplaceValue, {"ContractedUnitPrice"}),
+ 0.0, each if ([ContractedUnitPrice] <> 0 or [x_EffectiveUnitPrice] <> 0) then [ContractedUnitPrice] else [ListUnitPrice], Replacer.ReplaceValue, {"ListUnitPrice"}),
+ 0.0, each if [EffectiveCost] <> 0 then [EffectiveCost] else [ContractedCost], Replacer.ReplaceValue, {"ContractedCost"}),
+ 0.0, each if ([ContractedCost] <> 0 or [EffectiveCost] <> 0) then [ContractedCost] else [ListCost], Replacer.ReplaceValue, {"ListCost"})
+ else
+ Table.RemoveColumns(
+ Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(Table.ReplaceValue(
+ // Join only the rows/columns that need to be joined
+ Table.ExpandTableColumn(
+ Table.NestedJoin(
+ Table.AddColumn(OptionalFixes, "tmp_MeterOfferStart", each [x_SkuMeterId] & [x_SkuOfferId] & DateTimeZone.ToText([ChargePeriodStart], [Format="yyyy-MM"])),
+ {"tmp_MeterOfferStart"},
+ // Join missing prices with the cost rows that are missing those prices
+ Table.SelectColumns(
+ Table.AddColumn(
+ Table.SelectRows(Prices, each [x_SkuPriceType] = "Consumption" and [x_SkuMeterId] <> "" and [x_SkuMeterId] <> null),
+ "tmp_MeterOfferStart",
+ each [x_SkuMeterId] & (if Table.HasColumns(Prices, {"x_SkuOfferId"}) then [x_SkuOfferId] else "") & DateTime.ToText([x_EffectivePeriodStart], [Format="yyyy-MM"])
+ ),
+ {"tmp_MeterOfferStart", "ListUnitPrice", "ContractedUnitPrice", "PricingUnit", "x_PricingBlockSize"}
+ ),
+ {"tmp_MeterOfferStart"},
+ "Prices",
+ JoinKind.LeftOuter
+ ),
+ "Prices",
+ {"ListUnitPrice", "ContractedUnitPrice", "PricingUnit", "x_PricingBlockSize"},
+ {"NewListUnitPrice", "NewContractedUnitPrice", "NewPricingUnit", "NewPricingBlockSize"}
+ ),
+ // Update missing prices
+ 0.0, each if [x_EffectiveUnitPrice] <> 0 and [PricingUnit] = [NewPricingUnit] then [NewContractedUnitPrice] * [x_BillingExchangeRate] / [NewPricingBlockSize] * [x_PricingBlockSize] else [x_EffectiveUnitPrice], Replacer.ReplaceValue, {"ContractedUnitPrice"}),
+ 0.0, each if ([ContractedUnitPrice] <> 0 or [x_EffectiveUnitPrice] <> 0) and [PricingUnit] = [NewPricingUnit] then [NewListUnitPrice] * [x_BillingExchangeRate] / [NewPricingBlockSize] * [x_PricingBlockSize] else [ContractedUnitPrice], Replacer.ReplaceValue, {"ListUnitPrice"}),
+ // Update missing costs
+ 0.0, each if [EffectiveCost] <> 0 and [ContractedUnitPrice] <> null then [PricingQuantity] * [ContractedUnitPrice] else [ContractedCost], Replacer.ReplaceValue, {"ContractedCost"}),
+ 0.0, each if ([ContractedCost] <> 0 or [EffectiveCost] <> 0) and [ListUnitPrice] <> null then [PricingQuantity] * [ListUnitPrice] else [ListCost], Replacer.ReplaceValue, {"ListCost"}),
+ {"NewListUnitPrice", "NewContractedUnitPrice", "NewPricingUnit", "NewPricingBlockSize", "tmp_MeterOfferStart"}
+ ),
+ {{"ContractedCost", type number}, {"ContractedUnitPrice", type number}, {"ListCost", type number}, {"ListUnitPrice", type number}}
+ ),
+
+ Add = Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
+ PopulateMissingPrices,
+ // Parse arrays
+ "x_SkuDetailsDictionary", each if _isBlank([x_SkuDetails]) then [] else try Json.Document([x_SkuDetails]) otherwise []),
+ "x_TagsDictionary", each if _isBlank([Tags]) then [] else try Json.Document([Tags]) otherwise []),
+ // Commitment metadata
+ "x_CommitmentDiscountUtilizationPotential", each if [CommitmentDiscountCategory] = "Usage" then [ConsumedQuantity] else if [CommitmentDiscountCategory] = "Spend" then [EffectiveCost] else 0, type number),
+ "x_CommitmentDiscountUtilizationAmount", each if [CommitmentDiscountStatus] = "Used" then [x_CommitmentDiscountUtilizationPotential] else 0, type number),
+ // Savings calculations
+ // TODO: Remove or make a % -- "x_CommitmentDiscountPercent", each if [ContractedUnitPrice] <> null and [ContractedUnitPrice] > 0 and [x_EffectiveUnitPrice] <> null and [x_EffectiveUnitPrice] > 0 and [ContractedUnitPrice] >= [x_EffectiveUnitPrice] then [ContractedUnitPrice] - [x_EffectiveUnitPrice] else null, type number),
+ // TODO: Remove or make a % -- "x_NegotiatedDiscountPercent", each if [ContractedUnitPrice] <> null and [ContractedUnitPrice] > 0 and [ListUnitPrice] <> null and [ListUnitPrice] > 0 and [ListUnitPrice] >= [ContractedUnitPrice] then [ListUnitPrice] - [ContractedUnitPrice] else null, type number),
+ // TODO: Remove or make a % -- "x_DiscountUnitPriceSavings", each if [ListUnitPrice] <> null and [ListUnitPrice] > 0 and [x_EffectiveUnitPrice] <> null and [x_EffectiveUnitPrice] > 0 and [ListUnitPrice] > 0 and [ListUnitPrice] >= [x_EffectiveUnitPrice] then [ListUnitPrice] - [x_EffectiveUnitPrice] else null, type number),
+ "x_CommitmentDiscountSavings", each if _isBlank([CommitmentDiscountCategory]) then 0 else if [ContractedCost] <> null and [ContractedCost] > 0 and [EffectiveCost] <> null and [EffectiveCost] > 0 and [ContractedCost] >= [EffectiveCost] then [ContractedCost] - [EffectiveCost] else null, type number),
+ "x_NegotiatedDiscountSavings", each if [ListCost] <> null and [ListCost] > 0 and [ContractedCost] <> null and [ContractedCost] > 0 and [ListCost] >= [ContractedCost] then [ListCost] - [ContractedCost] else null, type number),
+ "x_AmortizationCategory", each if [ChargeCategory] = "Purchase" and _isNotBlank([CommitmentDiscountId]) then "Principal" else if _isNotBlank([CommitmentDiscountId]) then "Amortized Charge" else ""),
+ "x_CommitmentDiscountPercent", each if [ContractedUnitPrice] = 0 then 0 else ([ContractedUnitPrice] - [x_EffectiveUnitPrice]) / [ContractedUnitPrice]),
+ "x_NegotiatedDiscountPercent", each if [ListUnitPrice] = 0 then 0 else ([ListUnitPrice] - [ContractedUnitPrice]) / [ListUnitPrice]),
+ "x_TotalDiscountPercent", each if [ListUnitPrice] = 0 then 0 else ([ListUnitPrice] - [x_EffectiveUnitPrice]) / [ListUnitPrice]),
+ "x_TotalSavings",
+ each if [ListCost] <> null and [ListCost] > 0 and [EffectiveCost] <> null and [EffectiveCost] > 0 and [ListCost] >= [EffectiveCost] then [ListCost] - [EffectiveCost]
+ else if [ContractedCost] <> null and [ContractedCost] > 0 and [EffectiveCost] <> null and [EffectiveCost] > 0 and [ContractedCost] >= [EffectiveCost] then [ContractedCost] - [EffectiveCost] else null, type number),
+ // Month column
+ "x_ChargeMonth", each DateTime.Date(Date.StartOfMonth([ChargePeriodStart])), type date),
+ "x_ReportingDate", each if #"Default Granularity" = "Monthly" then [x_ChargeMonth] else DateTime.Date([ChargePeriodStart]), type date),
+ OptionalAdd = if PerformDeprecatedOptimizations = false then Add else Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
+ Add,
+ // Explain why cost is 0
+ "x_FreeReason",
+ each if [BilledCost] <> 0.0 or [EffectiveCost] <> 0.0 then null
+ else if [PricingCategory] = "Committed" then "Unknown " & [CommitmentDiscountStatus] & " Commitment"
+ else if [x_BilledUnitPrice] = 0.0 and [x_EffectiveUnitPrice] = 0.0 and [ContractedUnitPrice] = 0.0 and [ListUnitPrice] = 0.0 and _isBlank([CommitmentDiscountType]) then (
+ if _isNotBlank([x_SkuDescription]) and Text.Contains([x_SkuDescription], "Trial") then "Trial" else if _isNotBlank([x_SkuDescription]) and Text.Contains([x_SkuDescription], "Preview") then "Preview" else "Other"
+ )
+ else if [x_BilledUnitPrice] > 0.0 or [x_EffectiveUnitPrice] > 0.0 then (
+ if [PricingQuantity] > 0.0 then "Low Usage" else if [PricingQuantity] = 0.0 then "No Usage" else "Unknown Negative Quantity"
+ )
+ else "Unknown"
+ ),
+ // Unique names -- Must be after ResourceName cleanup and Commitment columns
+ // TODO: Only add differentiators when the name is not unique
+ "CommitmentDiscountNameUnique", each if _isBlank([CommitmentDiscountId]) then null else [CommitmentDiscountName] & " (" & [CommitmentDiscountType] & ")"),
+ "ResourceNameUnique", each if _isBlank([ResourceId]) then null else [ResourceName] & " (" & [ResourceType] & ")"),
+ "x_ResourceGroupNameUnique", each if _isBlank([x_ResourceGroupName]) then null else [x_ResourceGroupName] & " (" & [SubAccountName] & ")"),
+ "SubAccountNameUnique", each if _isBlank([SubAccountId]) then null else [SubAccountName] & " (" & ftk_ParseResourceName([SubAccountId]) & ")"),
+
+ // FTK columns
+ FTK = Table.RemoveColumns(
+ Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
+ Table.ExpandRecordColumn(
+ Table.ReplaceErrorValues(Table.AddColumn(OptionalAdd, "tmp_Tags", each [x_TagsDictionary]), {{"tmp_Tags", null}}),
+ "tmp_Tags",
+ {"cm-resource-parent", "ms-resource-parent", "hidden-managedby", "costanalysis-parent", "ftk-version", "ftk-tool"},
+ {"tmp_cmParent", "tmp_msParent", "tmp_ManagedBy", "tmp_caParent", "x_ToolkitVersion", "tmp_ToolkitTool"}
+ ),
+ "x_ResourceParentId",
+ each _stringValue(Text.Replace("/" & (
+ if _isNotBlank([tmp_cmParent]) then [tmp_cmParent]
+ else if _isNotBlank([tmp_msParent]) then [tmp_msParent]
+ else if _isNotBlank([tmp_ManagedBy]) then [tmp_ManagedBy]
+ else if _isNotBlank([tmp_caParent]) then [tmp_caParent]
+ else null
+ ), "//", "/"))),
+ "x_ResourceParentType", each ftk_ParseResourceType([x_ResourceParentId])),
+ "x_ResourceParentName", each ftk_ParseResourceName([x_ResourceParentId])),
+ "x_ToolkitTool",
+ each if _isNotBlank([tmp_ToolkitTool]) then [tmp_ToolkitTool]
+ else if _isBlank([x_ResourceParentId]) then null
+ else if Text.Contains(Text.Lower([x_ResourceParentId]), "/providers/microsoft.cloud/hubs/") then "FinOps hubs"
+ else null
+ ),
+ { "tmp_cmParent", "tmp_msParent", "tmp_caParent", "tmp_ManagedBy", "tmp_ToolkitTool" }
+ ),
+
+ // Extracted tags
+ // TODO: Consider adding tag cleanup to this as well
+ ExtractedTags = Table.ExpandRecordColumn(
+ Table.ReplaceErrorValues(Table.AddColumn(FTK, "tmp_Tags", each [x_TagsDictionary]), {{"tmp_Tags", null}}),
+ "tmp_Tags",
+ PromotedTags,
+ List.Transform(PromotedTags, each "tag_" & _)
+ ),
+
+ // AHB columns
+ // TODO: Add SQL AHB handling
+ AHB = Table.RemoveColumns(
+ Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(Table.AddColumn(
+ Table.TransformColumnTypes(
+ Table.ExpandRecordColumn(
+ Table.ReplaceErrorValues(Table.AddColumn(ExtractedTags, "tmp_SkuDetails", each [x_SkuDetailsDictionary]), {{"tmp_SkuDetails", null}}),
+ "tmp_SkuDetails",
+ {"UsageType", "ImageType", "ServiceType", "VMName", "VMProperties", "VCPUs", "ReservationOrderId", "ReservationId", "VMCapacityReservationId", "AHB", "vCores"},
+ {"x_SkuUsageType", "x_SkuImageType", "x_SkuType", "tmp_VMName", "x_SkuVMProperties", "tmp_VMvCPUs", "tmp_AddlReservationOrderId", "tmp_AddlReservationId", "x_CapacityCommitmentId", "tmp_SQLAHB", "tmp_SQLvCores"}
+ ),
+ {{"tmp_VMvCPUs", Int64.Type}, {"tmp_SQLvCores", Int64.Type}}
+ ),
+ "x_ResourceMachineName", each if _isNotBlank([tmp_VMName]) then [tmp_VMName] else null),
+ "x_SkuCoreCount", each if [tmp_VMvCPUs] <> null then [tmp_VMvCPUs] else if [tmp_SQLvCores] <> null then [tmp_SQLvCores] else null, Int64.Type),
+ "x_ConsumedCoreHours", each if [x_SkuCoreCount] <> null then [x_SkuCoreCount] * [ConsumedQuantity] else null, type number),
+ "x_SkuLicenseQuantity",
+ each if [x_SkuCoreCount] = null then 0
+ else if [x_SkuCoreCount] <= 8 then 8
+ else if [x_SkuCoreCount] <= 16 then 16
+ else if [x_SkuCoreCount] = 20 then 24
+ else if [x_SkuCoreCount] > 20 then [x_SkuCoreCount]
+ else 0,
+ type number
+ ),
+ "x_SkuLicenseStatus", each if _isNotBlank([x_SkuMeterSubcategory]) and Text.Contains([x_SkuMeterSubcategory], "Windows") or [tmp_SQLAHB] = "False" then "Not enabled" else if (_isNotBlank([x_SkuImageType]) and Text.Contains([x_SkuImageType], "Windows Server BYOL")) or [tmp_SQLAHB] = "True" or (_isNotBlank([x_SkuMeterSubcategory]) and Text.Contains([x_SkuMeterSubcategory], "Azure Hybrid Benefit")) then "Enabled" else "Not supported"),
+ "x_CommitmentDiscountKey", each [x_SkuType] & [x_SkuMeterId]),
+ { "tmp_AddlReservationOrderId", "tmp_AddlReservationId", "tmp_SQLAHB", "tmp_SQLvCores", "tmp_VMName", "tmp_VMvCPUs" }
+ ),
+
+ // Unique key for the record -- WARNING: This increases the data size significantly.
+ /*
+ ChargeId = Table.AddColumn(Month, "x_ChargeId", each Text.Combine(List.RemoveItems({
+ Date.ToText([ChargePeriodStart]),
+ [x_BillingAccountId],
+ if [x_BillingProfileId] = [x_BillingAccountId] then null else [x_BillingProfileId], // Only add BP if not the same as the BA (all EA)
+ [x_InvoiceSectionId],
+ if _isNotBlank([ResourceId]) and Text.Contains([ResourceId], [x_SubscriptionId]) then null else [x_SubscriptionId], // Only add sub if not in the resource ID
+ [ResourceId],
+ [tmp_ResourceLocation],
+ [x_SkuOfferId],
+ [SkuPriceId],
+ [x_SkuMeterId],
+ [x_SkuPartNumber],
+ if _isBlank([CommitmentDiscountId]) then null else List.Last(Text.Split([CommitmentDiscountId], "/")),
+ [x_CostAllocationRuleName],
+ [x_CostCenter],
+ if _isBlank([Tags]) then null else Text.Remove([Tags], {"{","""","}"}),
+ if _isBlank([x_SkuDetails]) then null else Text.Remove([x_SkuDetails], {"{","""","}"})
+ }, {null, ""}), "-")),
+ */
+
+ // Sort columns alphabetically
+ Output = Table.ReorderColumns(AHB, List.Sort(Table.ColumnNames(AHB)))
+ in
+ Output
```
annotation PBI_ResultType = Table
annotation PBI_NavigationStepName = Navigation
+ annotation PBI_QueryRelationships = {"columnCount":50,"keyColumnNames":[],"queryRelationships":[],"columnIdentities":["Section1/Usage details amortized/usagedetailsamortized.{BillingAccountId,0}","Section1/Usage details amortized/usagedetailsamortized.{BillingAccountName,1}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodStartDate,2}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodEndDate,3}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileId,4}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileName,5}","Section1/Usage details amortized/usagedetailsamortized.{AccountOwnerId,6}","Section1/Usage details amortized/usagedetailsamortized.{AccountName,7}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionId,8}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionName,9}","Section1/Usage details amortized/usagedetailsamortized.{Date,10}","Section1/Usage details amortized/usagedetailsamortized.{Product,11}","Section1/Usage details amortized/usagedetailsamortized.{PartNumber,12}","Section1/Usage details amortized/usagedetailsamortized.{MeterId,13}","Section1/Usage details amortized/usagedetailsamortized.{ServiceFamily,14}","Section1/Usage details amortized/usagedetailsamortized.{MeterCategory,15}","Section1/Usage details amortized/usagedetailsamortized.{MeterSubCategory,16}","Section1/Usage details amortized/usagedetailsamortized.{MeterRegion,17}","Section1/Usage details amortized/usagedetailsamortized.{MeterName,18}","Section1/Usage details amortized/usagedetailsamortized.{Quantity,19}","Section1/Usage details amortized/usagedetailsamortized.{EffectivePrice,20}","Section1/Usage details amortized/usagedetailsamortized.{Cost,21}","Section1/Usage details amortized/usagedetailsamortized.{UnitPrice,22}","Section1/Usage details amortized/usagedetailsamortized.{BillingCurrency,23}","Section1/Usage details amortized/usagedetailsamortized.{ResourceLocation,24}","Section1/Usage details amortized/usagedetailsamortized.{AvailabilityZone,25}","Section1/Usage details amortized/usagedetailsamortized.{ConsumedService,26}","Section1/Usage details amortized/usagedetailsamortized.{ResourceId,27}","Section1/Usage details amortized/usagedetailsamortized.{ResourceName,28}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo1,29}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo2,30}","Section1/Usage details amortized/usagedetailsamortized.{AdditionalInfo,31}","Section1/Usage details amortized/usagedetailsamortized.{Tags,32}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSectionId,33}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSection,34}","Section1/Usage details amortized/usagedetailsamortized.{CostCenter,35}","Section1/Usage details amortized/usagedetailsamortized.{UnitOfMeasure,36}","Section1/Usage details amortized/usagedetailsamortized.{ResourceGroup,37}","Section1/Usage details amortized/usagedetailsamortized.{ReservationId,38}","Section1/Usage details amortized/usagedetailsamortized.{ReservationName,39}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderId,40}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderName,41}","Section1/Usage details amortized/usagedetailsamortized.{OfferId,42}","Section1/Usage details amortized/usagedetailsamortized.{IsAzureCreditEligible,43}","Section1/Usage details amortized/usagedetailsamortized.{Term,44}","Section1/Usage details amortized/usagedetailsamortized.{PublisherName,45}","Section1/Usage details amortized/usagedetailsamortized.{PlanName,46}","Section1/Usage details amortized/usagedetailsamortized.{ChargeType,47}","Section1/Usage details amortized/usagedetailsamortized.{Frequency,48}","Section1/Usage details amortized/usagedetailsamortized.{PublisherType,49}"],"ColumnCount":50,"KeyColumnNames":[],"ColumnIdentities":["Section1/Usage details amortized/usagedetailsamortized.{BillingAccountId,0}","Section1/Usage details amortized/usagedetailsamortized.{BillingAccountName,1}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodStartDate,2}","Section1/Usage details amortized/usagedetailsamortized.{BillingPeriodEndDate,3}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileId,4}","Section1/Usage details amortized/usagedetailsamortized.{BillingProfileName,5}","Section1/Usage details amortized/usagedetailsamortized.{AccountOwnerId,6}","Section1/Usage details amortized/usagedetailsamortized.{AccountName,7}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionId,8}","Section1/Usage details amortized/usagedetailsamortized.{SubscriptionName,9}","Section1/Usage details amortized/usagedetailsamortized.{Date,10}","Section1/Usage details amortized/usagedetailsamortized.{Product,11}","Section1/Usage details amortized/usagedetailsamortized.{PartNumber,12}","Section1/Usage details amortized/usagedetailsamortized.{MeterId,13}","Section1/Usage details amortized/usagedetailsamortized.{ServiceFamily,14}","Section1/Usage details amortized/usagedetailsamortized.{MeterCategory,15}","Section1/Usage details amortized/usagedetailsamortized.{MeterSubCategory,16}","Section1/Usage details amortized/usagedetailsamortized.{MeterRegion,17}","Section1/Usage details amortized/usagedetailsamortized.{MeterName,18}","Section1/Usage details amortized/usagedetailsamortized.{Quantity,19}","Section1/Usage details amortized/usagedetailsamortized.{EffectivePrice,20}","Section1/Usage details amortized/usagedetailsamortized.{Cost,21}","Section1/Usage details amortized/usagedetailsamortized.{UnitPrice,22}","Section1/Usage details amortized/usagedetailsamortized.{BillingCurrency,23}","Section1/Usage details amortized/usagedetailsamortized.{ResourceLocation,24}","Section1/Usage details amortized/usagedetailsamortized.{AvailabilityZone,25}","Section1/Usage details amortized/usagedetailsamortized.{ConsumedService,26}","Section1/Usage details amortized/usagedetailsamortized.{ResourceId,27}","Section1/Usage details amortized/usagedetailsamortized.{ResourceName,28}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo1,29}","Section1/Usage details amortized/usagedetailsamortized.{ServiceInfo2,30}","Section1/Usage details amortized/usagedetailsamortized.{AdditionalInfo,31}","Section1/Usage details amortized/usagedetailsamortized.{Tags,32}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSectionId,33}","Section1/Usage details amortized/usagedetailsamortized.{InvoiceSection,34}","Section1/Usage details amortized/usagedetailsamortized.{CostCenter,35}","Section1/Usage details amortized/usagedetailsamortized.{UnitOfMeasure,36}","Section1/Usage details amortized/usagedetailsamortized.{ResourceGroup,37}","Section1/Usage details amortized/usagedetailsamortized.{ReservationId,38}","Section1/Usage details amortized/usagedetailsamortized.{ReservationName,39}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderId,40}","Section1/Usage details amortized/usagedetailsamortized.{ProductOrderName,41}","Section1/Usage details amortized/usagedetailsamortized.{OfferId,42}","Section1/Usage details amortized/usagedetailsamortized.{IsAzureCreditEligible,43}","Section1/Usage details amortized/usagedetailsamortized.{Term,44}","Section1/Usage details amortized/usagedetailsamortized.{PublisherName,45}","Section1/Usage details amortized/usagedetailsamortized.{PlanName,46}","Section1/Usage details amortized/usagedetailsamortized.{ChargeType,47}","Section1/Usage details amortized/usagedetailsamortized.{Frequency,48}","Section1/Usage details amortized/usagedetailsamortized.{PublisherType,49}"],"RelationshipInfo":[]}
+
diff --git a/src/power-bi/storage/WorkloadOptimization.Report/report.json b/src/power-bi/storage/WorkloadOptimization.Report/report.json
index 243a260ba..dd093c34a 100644
--- a/src/power-bi/storage/WorkloadOptimization.Report/report.json
+++ b/src/power-bi/storage/WorkloadOptimization.Report/report.json
@@ -116,1154 +116,1154 @@
"displayName": "Recommendations",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "38074e77431ec2463ec4",
"ordinal": 1,
"visualContainers": [
{
"config": "{\"name\":\"0c2c99f9906b8c357dd7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":56,\"z\":2000,\"width\":200,\"height\":56,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"AdvisorRecommendations.properties.impact\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impact\"},\"Name\":\"AdvisorRecommendations.properties.impact\",\"NativeReferenceName\":\"Impact\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"AdvisorRecommendations.properties.impact\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.impact\":{\"displayName\":\"Impact\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Impact'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"81770b5f1d6a31a61819\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"0fc97e60dbab10e757cc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"18cbcc1077b2789281e9\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"196d7ce3118489620a90\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"1fb534406bc0815276d6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"29d8d2a08743049c616e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"371e5f8a07eee432120e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Advisor cost recommendations\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Identify idle and underutilized resources and optimize costs.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"3bffc1660cba60d140b7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"447dd7519615d3c09260\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":7000,\"width\":1048,\"height\":280,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Resources.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"name\"},\"Name\":\"Resources.name\",\"NativeReferenceName\":\"name\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#999900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'UnusedSavingsPlan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"4c53e2dbec7e493c26b0\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"name\"}},\"Right\":{\"Literal\":{\"Value\":\"''\"}}}}}}}]},\"type\":\"Advanced\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{}}]},\"isHiddenInViewMode\":false}]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 7000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"48f9d49ed4a10d881c01\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"532aaa876c7929683c6a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"5b64dac7840021b00010\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Advisor.properties.impactedValue)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"}},\"Function\":2},\"Name\":\"Min(Advisor.properties.impactedValue)\",\"NativeReferenceName\":\"Count of properties.impactedValue\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Impacted resources'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}]}}}",
"filters": "[{\"name\":\"e53c9899763de5b904c9\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.resourceMetadata.resourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":0}]",
- "height": 88.00,
- "width": 184.00,
- "x": 696.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 696.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"5b89ed9bac65655550bc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"81770b5f1d6a31a61819\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"600a1f5f04b951de9dc3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"66fb2805cd9e545cec5c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"68acede03706e28bc73a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"6dcfb99e1e564b9e29e6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"746c2ce3bb00e12a219c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"7ee27166847c8dcd669c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"80fd632d20a65343756b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":888,\"y\":8,\"z\":3000,\"width\":280,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Sum of properties.extendedProperties.annualSavingsAmount\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"filterSortOrder\":3,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}},\"preserveWhitespace\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"wordWrap\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Potential yearly savings (list)'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Default'\"}}}}}]}}}",
"filters": "[{\"name\":\"e53c9899763de5b904c9\",\"expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.resourceMetadata.resourceId\"}},\"Function\":2}},\"type\":\"Advanced\",\"howCreated\":1,\"ordinal\":0}]",
- "height": 88.00,
- "width": 280.00,
- "x": 888.00,
- "y": 8.00,
- "z": 3000.00
+ "height": 88.0,
+ "width": 280.0,
+ "x": 888.0,
+ "y": 8.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"81770b5f1d6a31a61819\",\"layouts\":[{\"id\":0,\"position\":{\"height\":224.84504504504508,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\"}",
"height": 224.85,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"8fe28d0333e117ad4d03\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/WorkloadOptimization#recommendations'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"92d2eec56511947ea876\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(AdvisorRecommendations.properties.recommendationTypeId)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.recommendationTypeId\"}},\"Function\":2},\"Name\":\"Min(AdvisorRecommendations.properties.recommendationTypeId)\",\"NativeReferenceName\":\"Count of properties.recommendationTypeId1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.recommendationTypeId\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Recommendations'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"9e3f5c57d4bb8701968b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"9e9e3eea5bb912790706\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"a2bccd122db08ca25b55\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.WorkloadOptimization/featureName/Recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"a5f7800140d6cb49dc17\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"a8a18b140c7d9a6a0c36\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":280,\"height\":88,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Advisor.properties.impact\"}],\"Y\":[{\"queryRef\":\"CountNonNull(Advisor.properties.shortDescription.solution)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impact\"},\"Name\":\"Advisor.properties.impact\",\"NativeReferenceName\":\"properties.impact\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}},\"Function\":2},\"Name\":\"CountNonNull(Advisor.properties.shortDescription.solution)\",\"NativeReferenceName\":\"Count of properties.shortDescription.solution1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'BottomCenter'\"}}},\"showGradientLegend\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"detailContentType\":{\"expr\":{\"Literal\":{\"Value\":\"'Percent of total'\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableTitleDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleFontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"optimizeLabelDisplay\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelOverflow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"dynamicLabelDetail\":{\"expr\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.shortDescription.solution\"}},\"Function\":2}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"highlightMatching\":1}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Right\":{\"Literal\":{\"Value\":\"'High'\"}}}}}]}},{\"properties\":{\"borderShow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF7300'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Right\":{\"Literal\":{\"Value\":\"'Medium'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Right\":{\"Literal\":{\"Value\":\"'Low'\"}}}}}]}}],\"categoryAxis\":[{\"properties\":{\"switchAxisPosition\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"valueAxis\":[{\"properties\":{\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Impact'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 280.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 280.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b70c1782d17b42087000\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"ca71e7f9906bbe001238\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":112.84504504504503,\"z\":1000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.lookbackPeriod\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\",\"NativeReferenceName\":\"Lookback period\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.lookbackPeriod\":{\"displayName\":\"Lookback period\"}},\"queryOptions\":{\"keepProjectionOrder\":true},\"showAllRoles\":[\"Values\"],\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Lookback period'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"81770b5f1d6a31a61819\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 112.85,
- "z": 1000.00
+ "z": 1000.0
},
{
"config": "{\"name\":\"cfbd29bc26e8e93d50ce\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":312,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Advisor.properties.impact\"},{\"queryRef\":\"Advisor.properties.shortDescription.problem\"},{\"queryRef\":\"Advisor.properties.impactedValue\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"},{\"queryRef\":\"Advisor.properties.lastUpdated\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impact\"},\"Name\":\"Advisor.properties.impact\",\"NativeReferenceName\":\"Impact\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.problem\"},\"Name\":\"Advisor.properties.shortDescription.problem\",\"NativeReferenceName\":\"Description\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"}},\"Function\":2},\"Name\":\"Advisor.properties.impactedValue\",\"NativeReferenceName\":\"Resources\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Yearly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.lastUpdated\"}},\"Function\":4},\"Name\":\"Advisor.properties.lastUpdated\",\"NativeReferenceName\":\"Latest properties.lastUpdated\"}]},\"columnProperties\":{\"Advisor.properties.impact\":{\"displayName\":\"Impact\"},\"Advisor.properties.shortDescription.problem\":{\"displayName\":\"Description\"},\"Advisor.properties.impactedValue\":{\"displayName\":\"Resources\"},\"Sum(Advisor.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Monthly savings\"},\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Yearly savings\"},\"Advisor.properties.lastUpdated\":{\"displayName\":\"Last updated\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"556.3460581851277D\"}}}},\"selector\":{\"metadata\":\"Advisor.properties.shortDescription.problem\"}}],\"columnHeaders\":[{\"properties\":{}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Top'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Low'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'FlagGreenPatternFill'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Medium'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'FlagMedium'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.impact\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'High'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'FlagLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Advisor.properties.impact\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}}}}]}}}",
"filters": "[]",
- "height": 312.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 312.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"cfe5e91bb37d8159172a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"d0cc121dbb01403c18d6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"d8d832a1c58b7e04402e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"e3075a4e702ba924a656\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"ec7ba11a07cb0d7d3e97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"f3b9b1ca2979b01c90d3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":56,\"width\":200,\"x\":0,\"y\":168.84504504504508,\"z\":0,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.term\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.term\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.term\",\"NativeReferenceName\":\"Term\"}]},\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.term\":{\"displayName\":\"Term\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"general\":[{\"properties\":{\"orientation\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}},\"filter\":{\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.term\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}]}}}}],\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"strictSingleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Term'\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"81770b5f1d6a31a61819\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
"y": 168.85,
- "z": 0.00
+ "z": 0.0
},
{
"config": "{\"name\":\"fb170c2928b39397b463\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"3bffc1660cba60d140b7\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"fc77c95d0d7500a1b8d3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":592,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/Microsoft_Azure_Expert/AdvisorMenuBlade/~/Cost/category/Cost'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18cbcc1077b2789281e9\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 592.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 592.0,
+ "z": 5000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Unattached disks",
"displayOption": 1,
"filters": "[{\"name\":\"d61be04deb2c003db020\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskState\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Unattached'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1,\"objects\":{}}]",
- "height": 720.00,
+ "height": 720.0,
"name": "8cbb99e1095a3882680b",
"ordinal": 2,
"visualContainers": [
{
"config": "{\"name\":\"00a6f56f01702a3d51dc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":6000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"06cab967556bb88a7c67\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"0c3a737d39eb36ad5e11\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":6000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/WorkloadOptimization#unattached-disks'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"0c63b6e904a30472e8c5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"16d64f80b3909665240c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"1730d59b81d06c52dc83\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"1b8e254b03ce94d8c59a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"1be4be49982d09cbcab7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"1da86c0f5ed08b62e616\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1dc9fcfbebc820e62ec7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.WorkloadOptimization/featureName/UnattachedDisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"2f48e0a7cae6a47cc351\",\"layouts\":[{\"id\":0,\"position\":{\"height\":183.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":4000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\"}",
- "height": 184.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"30c74fb0b1d088d180c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"316d59b14d83678163cc\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"31e5294b938e3746ee78\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":4000,\"width\":184,\"height\":88,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 4000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"3b7f8906b38acd71ea6a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"427bc2a4e006d3060a69\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":392,\"z\":2000,\"width\":1048,\"height\":320,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Disks.resourceGroup\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"},{\"queryRef\":\"Costs.ChargePeriod\"},{\"queryRef\":\"Sum(Costs.EffectiveCost)\"},{\"queryRef\":\"Sum(Costs.BilledCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Disks.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.BilledCost)\",\"NativeReferenceName\":\"BilledCost\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Measure\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriod\"},\"Name\":\"Costs.ChargePeriod\",\"NativeReferenceName\":\"ChargePeriod\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"BilledCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Disks.resourceGroup\":{\"displayName\":\"Resource group\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"441.43021990177425D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"104.55223880597015D\"}}}},\"selector\":{\"metadata\":\"Disks.location\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"171.48974304329354D\"}}}},\"selector\":{\"metadata\":\"Disks.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"86.20722391050697D\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"83.800630562379D\"}}}},\"selector\":{\"metadata\":\"Disks.diskType\"}}],\"columnFormatting\":[{\"properties\":{\"styleTotal\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"metadata\":\"Disks.properties.diskSizeGB\"}}],\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"grid\":[{\"properties\":{\"gridVertical\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"values\":[{\"properties\":{\"icon\":{\"kind\":\"Icon\",\"layout\":{\"expr\":{\"Literal\":{\"Value\":\"'Before'\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'Middle'\"}}},\"value\":{\"expr\":{\"Conditional\":{\"Cases\":[{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'ActiveSAS'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Attached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolHigh'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Reserved'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolMedium'\"}}},{\"Condition\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"properties.diskState\"}},\"Function\":3}},\"Right\":{\"Literal\":{\"Value\":\"'Unattached'\"}}},\"Annotations\":{\"PowerBI.SQExprEvaluationKind\":1,\"PowerBI.SQExprTextOperatorOption\":2}},\"Value\":{\"Literal\":{\"Value\":\"'CircleSymbolLow'\"}}}]}}}}},\"selector\":{\"data\":[{\"dataViewWildcard\":{\"matchingOption\":1}}],\"metadata\":\"Disks.name\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 320.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 392.00,
- "z": 2000.00
+ "height": 320.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 392.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"5006c6007e35e8034b98\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3750,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2Fdisks'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3750.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3750.0
},
{
"config": "{\"name\":\"5ded88c731697434240d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"5f129e401262d9902809\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":5000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Unattached disks\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Delete, archive, or change SKU for unused disks to reduce waste.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"615debd0401739c5d37c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"7178e23b3149a4ba50c6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"7462d8ab7779875e3191\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"9b35d44657172501000d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"a0b0b4591d0071428930\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"b58778cb4453c7156746\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"2f48e0a7cae6a47cc351\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"ba5382fa26b01892baa4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"c0ec2c095e8226780de0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":6000,\"width\":184,\"height\":88,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(Disks.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(Disks.id)\",\"NativeReferenceName\":\"Unattached disks\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(Disks.id)\":{\"displayName\":\"Unattached disks\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Unattached disks'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 6000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"c66976936b097943b76d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":3500,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 3500.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 3500.0
},
{
"config": "{\"name\":\"ceb14a73418c25665ddc\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":7000,\"width\":472,\"height\":88,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"treemap\",\"projections\":{\"Group\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}],\"Values\":[{\"queryRef\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\"}],\"Tooltips\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"Disk size GB\"},{\"Arithmetic\":{\"Left\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Right\":{\"ScopedEval\":{\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}},\"Scope\":[]}},\"Operator\":3},\"Name\":\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\",\"NativeReferenceName\":\"Percent\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Sum(Disks.properties.diskSizeGB)\":{\"displayName\":\"Disk size GB\"},\"Divide(Sum(Disks.properties.diskSizeGB), ScopedEval(Sum(Disks.properties.diskSizeGB), []))\":{\"displayName\":\"Percent\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Premium_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":3,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'Standard_LRS'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"sku.name\"}},\"Right\":{\"Literal\":{\"Value\":\"'StandardSSD_LRS'\"}}}}}]}}],\"legend\":[{\"properties\":{\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"showTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB) by SKU'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 472.00,
- "x": 792.00,
- "y": 8.00,
- "z": 7000.00
+ "height": 88.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"d2458e9f803d1e1de044\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"2f48e0a7cae6a47cc351\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"d3f9015fed0edc0891d0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"dc4edfa1901c2ae18654\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"1da86c0f5ed08b62e616\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"dc77447e018cd851723e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":3000,\"width\":1048,\"height\":280,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"columnChart\",\"projections\":{\"Category\":[{\"queryRef\":\"Costs.ChargePeriodStart\",\"active\":true}],\"Y\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}],\"Series\":[{\"queryRef\":\"Disks.name\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"c\",\"Entity\":\"Costs\",\"Type\":0},{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"},\"Name\":\"Costs.ChargePeriodStart\",\"NativeReferenceName\":\"ChargePeriodStart\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"EffectiveCost\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"name\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"c\"}},\"Property\":\"ChargePeriodStart\"}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"categoryAxis\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"showAxisTitle\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"legend\":[{\"properties\":{\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'Bottom'\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#009900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'Usage'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#999900'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Costs\"}},\"Property\":\"ChargeType\"}},\"Right\":{\"Literal\":{\"Value\":\"'UnusedSavingsPlan'\"}}}}}]}}]},\"vcObjects\":{\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}}}",
"filters": "[{\"name\":\"13ec05da9ca4de601e2d\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Disks\"}},\"Property\":\"name\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Where\":[{\"Condition\":{\"Not\":{\"Expression\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"null\"}}]]}}}}}]},\"type\":\"Categorical\",\"howCreated\":0,\"objects\":{\"general\":[{\"properties\":{\"isInvertedSelectionMode\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"isHiddenInViewMode\":false}]",
- "height": 280.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 104.00,
- "z": 3000.00
+ "height": 280.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"dd763cb40e6b9a9b935d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1500,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.sku.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Disks.sku.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Disks.sku.name\":{\"displayName\":\"SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'SKU'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"2f48e0a7cae6a47cc351\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1500.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1500.0
},
{
"config": "{\"name\":\"e2fbb6b5c005c726ca07\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"e51349ce9e39e74db0b8\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"f047d640061673ac1043\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":5000,\"width\":184,\"height\":88,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 5000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"f252c2d5534aa1dad9b5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"00a6f56f01702a3d51dc\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{}",
"displayName": "Get started",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "ReportSection04cb7247170034c13d74",
"visualContainers": [
{
"config": "{\"name\":\"082146655dc1a325d0b4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":25}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-ConnectData7243700207572936.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"c0288720eb0904d3b509\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"143e1bfe2d1434d65512\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":9}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"5c8ab7772ec904187186\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"1f0aaf0086db14167503\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":3000,\"tabOrder\":12}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect this report to your environment\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ea797c8f510914ad09a3\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 3000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"207b94865a32e8013ad7\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":672,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 672.00,
- "y": 0.00,
- "z": 5000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 672.0,
+ "y": 0.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"23105961ad3843079310\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":768,\"y\":0,\"z\":4000,\"tabOrder\":18000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 768.00,
- "y": 0.00,
- "z": 4000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 768.0,
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"26e8af11eba15b908270\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":192,\"y\":0,\"z\":10000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 192.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"28c7f170ce0ab80e9b0a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":2000,\"tabOrder\":26}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'3b1b62340c08ecd05d46'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ea797c8f510914ad09a3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"31541bce407e81a32b71\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":192,\"z\":17000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 192.00,
- "z": 17000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"3639d70bd471505ba508\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":576,\"y\":0,\"z\":6000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 576.00,
- "y": 0.00,
- "z": 6000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 576.0,
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"4480d2899bda9e1434da\",\"layouts\":[{\"id\":0,\"position\":{\"height\":24,\"width\":144,\"x\":0.2160493827160508,\"y\":288,\"z\":1000,\"tabOrder\":4}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Connect your data'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'d443ffc47a11d360037e'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"c0288720eb0904d3b509\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 144.00,
+ "height": 24.0,
+ "width": 144.0,
"x": 0.22,
- "y": 288.00,
- "z": 1000.00
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"56c89cfac751e2d2a1e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":32,\"width\":32,\"x\":784,\"y\":48,\"z\":5000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close9574438897237076.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9813616349546728.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Close-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Close-White9525936596282278.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"selected\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#BA141A'\"}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"hover\"}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#750D10'\"}}}}}},\"selector\":{\"id\":\"selected\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'3b1b62340c08ecd05d46'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Close button'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 32.00,
- "x": 784.00,
- "y": 48.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 32.0,
+ "x": 784.0,
+ "y": 48.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"5c8ab7772ec904187186\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":304,\"z\":6000,\"width\":272,\"height\":368,\"tabOrder\":7000}}],\"singleVisualGroup\":{\"displayName\":\"Customize copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 504.00,
- "y": 304.00,
- "z": 6000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 504.0,
+ "y": 304.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"5d6366d7b633b1031d05\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":192,\"z\":0,\"width\":247.99999999999997,\"height\":176,\"tabOrder\":23}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Customize your report\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Keep what works, remove what you don't need, and tailor visuals and metrics to highlight what's important.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Data dictionary\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"5c8ab7772ec904187186\"}",
"filters": "[]",
- "height": 176.00,
- "width": 248.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 176.0,
+ "width": 248.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6237196c6ce43eb11670\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":1232,\"x\":24,\"y\":16,\"z\":0,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 696.00,
- "width": 1232.00,
- "x": 24.00,
- "y": 16.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 1232.0,
+ "x": 24.0,
+ "y": 16.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"6438ac1c49e977218a74\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":864,\"y\":0,\"z\":3000,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 864.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 864.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"6a7203d933cbe61a54ab\",\"layouts\":[{\"id\":0,\"position\":{\"x\":214.8655587817734,\"y\":112.00000371107124,\"z\":11000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":12000}}],\"singleVisualGroup\":{\"displayName\":\"Help dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
"x": 214.87,
- "y": 112.00,
- "z": 11000.00
+ "y": 112.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"6dede4f3d7d3cc892286\",\"layouts\":[{\"id\":0,\"position\":{\"x\":137.1344412182266,\"y\":487.99999628892874,\"z\":2000,\"width\":96,\"height\":32,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'qna'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Ask question'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Question'\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 137.13,
- "y": 488.00,
- "z": 2000.00
+ "y": 488.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"709126297d06ab01a0ed\",\"layouts\":[{\"id\":0,\"position\":{\"height\":424,\"width\":776,\"x\":40,\"y\":96,\"z\":1000,\"tabOrder\":5}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit reports include preconfigured visuals, but aren't connected to your data. This report connects to Azure Resource Graph and cost data in a storage account β either directly exported from Microsoft Cost Management or as part of FinOps hubs. This report supports up to $2 million of cost data per month with incremental refresh enabled. If you need to support more than $2 million per month, please use \"},{\"value\":\"FinOps hubs\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\" with Data Explorer.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Use the following steps to connect to Azure Resource Graph and your storage account:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Configure Cost Management exports\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Create new exports in Cost Management to initiate data ingestion. Remember to run at least one export manually to load an initial dataset. The following Cost Management datasets are recommended for this report:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Cost and usage (FOCUS) \"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Price sheet β Required to calculate accurate and complete savings.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The following Cost Management datasets are supported but not used by this report:\",\"textStyle\":{\"fontSize\":\"12px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Reservation recommendations\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation transactions\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Reservation details\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs/configure\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Connect to your storage account\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"From this page, select \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Home\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Transform data β¨\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" > \"},{\"value\":\"Edit parameters\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" above and set the following parameters:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Storage URL\",\"textStyle\":{\"fontWeight\":\"bold\"}}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If connecting to FinOps hubs:\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Open theΒ \"},{\"value\":\"list of resource groups\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups\"},{\"value\":\"Β in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Select the hub resource group.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ DeploymentsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Select theΒ hubΒ deployment.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ Outputs.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Copy the value forΒ \"},{\"value\":\"storageUrlForPowerBI\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.6px\"}},{\"value\":\".\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"If connecting directly to Cost Management exports in storage:\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Open the desired storage account in the Azure portal.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"SelectΒ SettingsΒ >Β EndpointsΒ in the menu.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Copy theΒ Data Lake StorageΒ URL.\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Append the container and export path, if applicable\"}],\"listType\":\"ordered\",\"indent\":2},{\"textRuns\":[{\"value\":\"Number of Months\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"Β β Optional number of closed months to show. Leave empty to show all data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"RangeStart\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" / \"},{\"value\":\"RangeEnd \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Optional date range you would like to limit to. If not specified, the report will include all data in storage.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Default Granularity \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Select whether you want charts to show \"},{\"value\":\"Daily\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" or \"},{\"value\":\"Monthly\",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\" data.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"NOTE: When customizing charts, use x_ReportingDate to align to this setting. Otherwise, use ChargePeriodStart for daily and x_ChargeMonth for monthly data.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"Experimental: Add Missing Prices \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Indicate whether you want missing prices to be populated from the exported price sheet data. This option requires a large join which may increase refresh times and limit the total monthly cost supported.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Deprecated: Perform Extra Query Optimizations \",\"textStyle\":{\"fontWeight\":\"bold\"}},{\"value\":\"β Indicate whether you want to support FOCUS 1.0 preview and additional custom columns from FinOps toolkit 0.7 reports. This option is for backwards compatibility only and will be removed in a future release.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Apply changes to refresh the report. This report imports all cost data, which can be slow for large accounts. If you run into any performance issues or timeouts, please consider using FinOps hubs with Data Explorer. Data Explorer provides advanced analytics capabilities, significantly improves performance, and offers new capabilities like forecasting and anomaly detection. \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Learn more about FinOps hubs\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/finops/hubs\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Authorize data sources\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"FinOps toolkit reports connect to one or more of the following data sources. Use these settings to configure authorization:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Azure Data Explorer (Kusto)Β β Use an account that has at least viewer access to the Hub and Ingestion databases.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"(your storage account)Β β Use a SAS token or an account that has Storage Blob Data Reader or greater access.\"}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"Azure Resource GraphΒ β Use an account that has direct access to any subscriptions you would like to report on.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://ccmstorageprod...Β β Anonymous access. This URL is used for reservation size flexibility data.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"https://github.com/...Β β Anonymous access. This URL is used for FinOps toolkit open data files.\",\"textStyle\":{\"fontFamily\":\"inherit\"}}],\"listType\":\"bullet\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Troubleshoot common issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you do not see any data after connecting to all data sources, check the following:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Confirm data was ingested into the configured storage account container (\\\"ingestion\\\" for FinOps hubs).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the currency filter to ensure the correct currency is selected.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Check the date picker at the top-left of each page to ensure the data you exported is within the same time frame.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For additional guidance, refer to theΒ \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/trouble\"},{\"value\":\".\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ea797c8f510914ad09a3\"}",
"filters": "[]",
- "height": 424.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 1000.00
+ "height": 424.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"70e9bb148301b663a150\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":19}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"ea797c8f510914ad09a3\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"77ee0feb454b638580be\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":479.99999999999994,\"y\":0,\"z\":7000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 480.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 480.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"7eceabed8b4a4201d070\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":960.0000000000001,\"y\":0,\"z\":2000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 960.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 960.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"7f2b843db7d09c1b0cee\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1160,\"y\":688,\"z\":1000,\"width\":112.00000000000001,\"height\":32,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback010740419814817104.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.WorkloadOptimization/featureName/GetStarted'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 112.00,
- "x": 1160.00,
- "y": 688.00,
- "z": 1000.00
+ "height": 32.0,
+ "width": 112.0,
+ "x": 1160.0,
+ "y": 688.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"81f8c441ed93c863e375\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":96,\"z\":18000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 96.00,
- "z": 18000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 18000.0
},
{
"config": "{\"name\":\"885c70c691d2b85220b4\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":304,\"z\":5000,\"width\":272.0000000000001,\"height\":312,\"tabOrder\":9000}}],\"singleVisualGroup\":{\"displayName\":\"Get data copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 312.00,
- "width": 272.00,
- "x": 792.00,
- "y": 304.00,
- "z": 5000.00
+ "height": 312.0,
+ "width": 272.0,
+ "x": 792.0,
+ "y": 304.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"8a4573bf23d8b8613b68\",\"layouts\":[{\"id\":0,\"position\":{\"x\":211.66666666666669,\"y\":24.166666666666668,\"z\":9000,\"width\":852.5,\"height\":85.83333333333334,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Workload optimization\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"42pt\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Report name'\"}}}}}]}}}",
"filters": "[]",
"height": 85.83,
- "width": 852.50,
+ "width": 852.5,
"x": 211.67,
"y": 24.17,
- "z": 9000.00
+ "z": 9000.0
},
{
"config": "{\"name\":\"906ec3cf4a1ea0d9d39c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":112.00000000000001,\"z\":8000,\"width\":848,\"height\":176,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"The \"},{\"value\":\"Workload optimization report\",\"textStyle\":{\"fontWeight\":\"bold\",\"color\":\"#6f4bb2\"}},{\"value\":\" provides insights into resource utilization and efficiency opportunities based on historical usage patterns. Use this report to determine if resources can be scaled down or even shutdown during off-peak hours to minimize wasteful usage and spending. Also consider cheaper alternatives when available and ensure all workloads have some direct or indirect link to business value to avoid unnecessary usage and costs that don't contribute to the mission.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This report helps implement the \"},{\"value\":\"Workload optimization capability\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/framework/optimize/workloads\"},{\"value\":\" in the FinOps Framework.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Learn more\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://aka.ms/ftk/pbi/WorkloadOptimization\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Description'\"}}}}}]}}}",
"filters": "[]",
- "height": 176.00,
- "width": 848.00,
- "x": 216.00,
- "y": 112.00,
- "z": 8000.00
+ "height": 176.0,
+ "width": 848.0,
+ "x": 216.0,
+ "y": 112.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"95b23a61ad37269dcb0d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":0,\"z\":19000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 0.00,
- "z": 19000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 19000.0
},
{
- "config": "{\"name\":\"9c7d5b6e8a011dee850b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-01-24 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
+ "config": "{\"name\":\"9c7d5b6e8a011dee850b\",\"layouts\":[{\"id\":0,\"position\":{\"x\":104,\"y\":688,\"z\":3000,\"width\":240,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"0.8 Β· 2025-02-10 Β· Storage\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#808080\"}}]}]}}]},\"vcObjects\":{\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Version info'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"7D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}]}}}",
"filters": "[]",
- "height": 32.00,
- "width": 240.00,
- "x": 104.00,
- "y": 688.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 240.0,
+ "x": 104.0,
+ "y": 688.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"9f70ed04030084409d16\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":152,\"height\":24,\"tabOrder\":6}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink292390249589896.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to add dataΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}],\"glow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/getdata'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"885c70c691d2b85220b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 152.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 152.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"a23e00500013bdda06c6\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":0,\"y\":0,\"z\":12000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 0.00,
- "y": 0.00,
- "z": 12000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"a9177d3dc09b75276309\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":27}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-AddData17914943068990197.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"885c70c691d2b85220b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"a9821a9d8e9c61d519e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":96,\"y\":0,\"z\":11000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 96.00,
- "y": 0.00,
- "z": 11000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"abb05a191c856b20b062\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1.1368683772161603e-13,\"y\":192.00000000000006,\"z\":0,\"width\":272,\"height\":96,\"tabOrder\":13}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Add business context\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Join cost with business data to align with your organization and quantify business value.\"}]}]}}]}},\"parentGroupName\":\"885c70c691d2b85220b4\"}",
"filters": "[]",
- "height": 96.00,
- "width": 272.00,
- "x": 0.00,
- "y": 192.00,
- "z": 0.00
+ "height": 96.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"b45d523993ad1c3eea06\",\"layouts\":[{\"id\":0,\"position\":{\"x\":40,\"y\":96,\"z\":4000,\"width\":776,\"height\":384,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Sorry to hear that you're experiencing issues. We're here to help!\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Please note Microsoft Support does not handle support requests for FinOps toolkit. However, the underlying products sued by tools in the toolkit are officially supported. Use the following steps if you run into an issue:\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Before you begin\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you aren't seeing data after connecting and syncing successfully, try the following troubleshooting steps:\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Clear all filters (see the button below).\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Clear RangeStart, RangeEnd, Number of Months date parameters and refresh data.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm data is loading by navigating to Home > Transform Data > Queries > Costs.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If data is in this view, then there is a filter causing the data to not render in the report.\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"If using raw exports (not FinOps hubs):\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are CSV or parquet files in the specified storage path.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failures, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If using FinOps hubs:\"}],\"listType\":\"bullet\"},{\"textRuns\":[{\"value\":\"Confirm there are parquet files in the ingestion container in the storage account.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, check for CSV or parquet files in the msexports container.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If not, confirm Cost Management exports were configured correctly, have no failed runs, and run them again.\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"If data is in msexports, check the Data Factory triggers to confirm they are all started. You may need to register the Microsoft.EventGrid resource provider, restart the triggers, then re-run the exports (or manually retry the failed pipeline runs).\"}],\"listType\":\"ordered\",\"indent\":1},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"This is a condensed version of the troubleshooting guide. If these did not help, continue with the list below and run through the full troubleshooting guide, if needed.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"1. Report security issues securely\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If you believe you've found a security vulnerability, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Reporting security issues\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/blob/dev/SECURITY.md\"},{\"value\":\". \",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"2. Confirm all setup instructions were completed in order\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"9 out of 10 issues are due to missing steps. Please review and follow the instructions carefully. For this report, close this dialog and select the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Connect your data\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"13.3333px\"}},{\"value\":\" button.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"3. Walk through the troubleshooting guide\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"The most common issues and their solutions are documented and should be able to be resolved independently. If you have a specific error code, refer to \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Common errors\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/errors\"},{\"value\":\". For a guided walk through, refer to the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"Troubleshooting guide\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/troubleshooting\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"4. Identify the source of the issue\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"For error message, what product is showing the error? Does the error refer to another product? For missing or incorrect data, is the data generated in a Power BI report or does it come directly from a product, like Cost Management?\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"5. Create support requests for product issues\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"If the source of the issue is a managed product (including data from Cost Management), create a Microsoft support request for that specific product. Refer to the data dictionary to identify whether a specific column is sourced from Cost Management or is created or updated by the FinOps toolkit. If you're not sure about the source, ask in the \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"discussion forum\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://github.com/microsoft/finops-toolkit/discussions/categories/q-a\"},{\"value\":\".\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"6. Create an issue in GitHub\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Whether you submit a support request or not, we recommend \",\"textStyle\":{\"fontSize\":\"13.3333px\"}},{\"value\":\"creating an issue in GitHub\",\"textStyle\":{\"fontSize\":\"13.3333px\"},\"url\":\"https://aka.ms/ftk/ideas\"},{\"value\":\" to let us know about the problems you're facing. Even if the issue is a product bug, we would like to document it to help others.\",\"textStyle\":{\"fontSize\":\"13.3333px\"}}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"We try to respond to issues and discussions within two business days but there can sometimes be unanticipated delays. If you completed all of the preceding steps and the issue wasn't resolved within a week, we should set up a Teams call for you. Then you can share your screen so we can troubleshoot the issue together.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Steps'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\"}",
"filters": "[]",
- "height": 384.00,
- "width": 776.00,
- "x": 40.00,
- "y": 96.00,
- "z": 4000.00
+ "height": 384.0,
+ "width": 776.0,
+ "x": 40.0,
+ "y": 96.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"b56f13cdcb59ae41e7c0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":384,\"z\":15000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 384.00,
- "z": 15000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 384.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"b6d7573c0ce88208a400\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":480,\"z\":14000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 480.00,
- "z": 14000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 480.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"b9a566e439ddb542a036\",\"layouts\":[{\"id\":0,\"position\":{\"x\":8,\"y\":687.9999999999999,\"z\":4000,\"width\":96.00000000000001,\"height\":32,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Toolbox.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Toolbox3204520726329514.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β FinOps toolkit'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#6F4BB2'\"}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/finops/toolkit'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'This report is part of the Microsoft FinOps toolkit, an open-source collection of FinOps solutions that help you manage and optimize your cost, usage, and carbon.'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK link'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
- "x": 8.00,
- "y": 688.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 96.0,
+ "x": 8.0,
+ "y": 688.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"ba0eca5fa5050b4362a4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":48,\"width\":736,\"x\":40,\"y\":40,\"z\":6000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Help + support\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"20pt\"}}]}]}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\"}",
"filters": "[]",
- "height": 48.00,
- "width": 736.00,
- "x": 40.00,
- "y": 40.00,
- "z": 6000.00
+ "height": 48.0,
+ "width": 736.0,
+ "x": 40.0,
+ "y": 40.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"bea78b3644427023d39c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":288,\"z\":16000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 288.00,
- "z": 16000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"c0288720eb0904d3b509\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":304,\"z\":7000,\"width\":272,\"height\":368,\"tabOrder\":8000}}],\"singleVisualGroup\":{\"displayName\":\"Connect copy\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 368.00,
- "width": 272.00,
- "x": 216.00,
- "y": 304.00,
- "z": 7000.00
+ "height": 368.0,
+ "width": 272.0,
+ "x": 216.0,
+ "y": 304.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"c105ca29db32464e67e0\",\"layouts\":[{\"id\":0,\"position\":{\"x\":241.1344412182266,\"y\":487.99999628892874,\"z\":1000,\"width\":96,\"height\":32,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Bug.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Bug9076115215259053.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Report a bug'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/ideas'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'New issue'\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 96.00,
+ "height": 32.0,
+ "width": 96.0,
"x": 241.13,
- "y": 488.00,
- "z": 1000.00
+ "y": 488.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"c54723799da7248a1829\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":288,\"y\":0,\"z\":9000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 288.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 288.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"c8ca998a2cc5ab5c54be\",\"layouts\":[{\"id\":0,\"position\":{\"height\":560.5479452054796,\"width\":852.3287671232878,\"x\":0,\"y\":0,\"z\":0,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"60D\"}}},\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Dialog container'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
"height": 560.55,
"width": 852.33,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"ce6dabc665210600556d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":18}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"c0288720eb0904d3b509\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"d336779274d8e3152483\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":272,\"height\":176,\"tabOrder\":16}}],\"singleVisual\":{\"visualType\":\"image\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"imageUrl\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"GetStarted-CustomizeReport5477659270158559.png\"}}}}}],\"imageScaling\":[{\"properties\":{\"imageScalingType\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}]}},\"parentGroupName\":\"5c8ab7772ec904187186\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"dac20dda545708191deb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1152,\"y\":0,\"z\":0,\"tabOrder\":19000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 13'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1152.00,
- "y": 0.00,
- "z": 0.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1152.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"dacfef74b1a1465e4265\",\"layouts\":[{\"id\":0,\"position\":{\"x\":1064,\"y\":688,\"z\":2000,\"width\":88,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled40465909342341844.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'Bookmark'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}},\"bookmark\":{\"expr\":{\"Literal\":{\"Value\":\"'ef79b7aa916210d0d0ad'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
- "x": 1064.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 88.0,
+ "x": 1064.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"df38ca80130a6401454c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":288,\"z\":1000,\"width\":160,\"height\":24,\"tabOrder\":2}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'ExternalLink.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"ExternalLink7990467786314797.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'How to customizeΒ Β '\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"rightMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}},\"verticalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'top'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}},\"bottomMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"shape\":[{\"properties\":{\"roundEdge\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/customize'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"5c8ab7772ec904187186\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 24.00,
- "width": 160.00,
- "x": 0.00,
- "y": 288.00,
- "z": 1000.00
+ "height": 24.0,
+ "width": 160.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"ea797c8f510914ad09a3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":216,\"y\":113,\"z\":12000,\"width\":852.3287671232878,\"height\":560.5479452054796,\"tabOrder\":10000}}],\"singleVisualGroup\":{\"displayName\":\"Connect dialog\",\"groupMode\":0,\"isHidden\":true}}",
"height": 560.55,
"width": 852.33,
- "x": 216.00,
- "y": 113.00,
- "z": 12000.00
+ "x": 216.0,
+ "y": 113.0,
+ "z": 12000.0
},
{
"config": "{\"name\":\"ecb2b8a0230332a60430\",\"layouts\":[{\"id\":0,\"position\":{\"x\":213.33333333333334,\"y\":8.333333333333334,\"z\":10000,\"width\":194.16666666666669,\"height\":46.66666666666667,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"FinOps toolkit\",\"textStyle\":{\"fontSize\":\"20pt\",\"color\":\"#a6a6a6\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'FTK label'\"}}}}}]}}}",
@@ -1272,461 +1272,461 @@
"width": 194.17,
"x": 213.33,
"y": 8.33,
- "z": 10000.00
+ "z": 10000.0
},
{
"config": "{\"name\":\"eceff6a05039a2eb29cd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":2000,\"width\":272,\"height\":176,\"tabOrder\":20}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangleRounded'\"}}},\"rectangleRoundedCurve\":{\"expr\":{\"Literal\":{\"Value\":\"2L\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"50D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Grey bg'\"}}}}}]}},\"parentGroupName\":\"885c70c691d2b85220b4\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 176.00,
- "width": 272.00,
- "x": 0.00,
- "y": 0.00,
- "z": 2000.00
+ "height": 176.0,
+ "width": 272.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"f18fa1ad0ba68686ad00\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0.03600823045266566,\"y\":192,\"z\":0,\"width\":256,\"height\":176,\"tabOrder\":11}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Connect your data\",\"textStyle\":{\"fontSize\":\"14pt\"}}]},{\"textRuns\":[{\"value\":\"Connect to data across billing accounts and subscriptions to get started.\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"\"}]},{\"textRuns\":[{\"value\":\"Troubleshooting tips\",\"textStyle\":{\"color\":\"#6f4bb2\"},\"url\":\"https://learn.microsoft.com/cloud-computing/finops/toolkit/help/data-dictionary\"}]}]}}]}},\"parentGroupName\":\"c0288720eb0904d3b509\"}",
"filters": "[]",
- "height": 176.00,
- "width": 256.00,
+ "height": 176.0,
+ "width": 256.0,
"x": 0.04,
- "y": 192.00,
- "z": 0.00
+ "y": 192.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"f231c3dbe68eb9c85305\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":1056,\"y\":0,\"z\":1000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 12'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 1056.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 1056.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"f2e114f2aa930db58b53\",\"layouts\":[{\"id\":0,\"position\":{\"x\":41.13444121822661,\"y\":487.99999628892874,\"z\":3000,\"width\":88,\"height\":32,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'clearAllSlicers'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"url\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Clear filters'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"weight\":{\"expr\":{\"Literal\":{\"Value\":\"1D\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'ClearAllSlicers'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/bladeName/PowerBI.RateOptimization.GetStarted/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Rate%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Rate%20optimization%20report%3F/featureName/PowerBI.RateOptimization.GetStarted/surveyId/FTK0.8'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Clear filters'\"}}}}}]}},\"parentGroupName\":\"6a7203d933cbe61a54ab\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 88.00,
+ "height": 32.0,
+ "width": 88.0,
"x": 41.13,
- "y": 488.00,
- "z": 3000.00
+ "y": 488.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"f4b6c3309950c42036b1\",\"layouts\":[{\"id\":0,\"position\":{\"height\":696,\"width\":80,\"x\":384,\"y\":0,\"z\":8000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 696.00,
- "width": 80.00,
- "x": 384.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 696.0,
+ "width": 80.0,
+ "x": 384.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"f7163fc3088b7352d008\",\"layouts\":[{\"id\":0,\"position\":{\"height\":80,\"width\":1232,\"x\":0,\"y\":576,\"z\":13000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}]}},\"parentGroupName\":\"6237196c6ce43eb11670\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 80.00,
- "width": 1232.00,
- "x": 0.00,
- "y": 576.00,
- "z": 13000.00
+ "height": 80.0,
+ "width": 1232.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 13000.0
}
],
- "width": 1280.00
+ "width": 1280.0
},
{
"config": "{\"visibility\":1}",
"displayName": "Virtual machines",
"displayOption": 1,
"filters": "[]",
- "height": 720.00,
+ "height": 720.0,
"name": "dca176302754c6dc09e1",
"ordinal": 3,
"visualContainers": [
{
"config": "{\"name\":\"012e2e9a60dd000813e4\",\"layouts\":[{\"id\":0,\"position\":{\"height\":247.99999999999994,\"width\":200,\"x\":0,\"y\":104.00000000000006,\"z\":6000,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Filters\",\"groupMode\":0,\"isHidden\":false,\"objects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\"}",
- "height": 248.00,
- "width": 200.00,
- "x": 0.00,
- "y": 104.00,
- "z": 6000.00
+ "height": 248.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 104.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"043e50fa6760d8735203\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":183.99999999999994,\"z\":0,\"width\":192,\"height\":64,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.hardwareProfile.vmSize\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"VirtualMachines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"hardwareProfile.vmSize\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.hardwareProfile.vmSize\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Size'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"012e2e9a60dd000813e4\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 184.00,
- "z": 0.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 184.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"0828972da3003ccd67d3\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":104,\"z\":2000,\"width\":280,\"height\":184,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS type\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS type\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count per OS type'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 216.00,
- "y": 104.00,
- "z": 2000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 216.0,
+ "y": 104.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"18c08d7be0513c6b425e\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720.0000000000011,\"tabOrder\":11000}}],\"singleVisualGroup\":{\"displayName\":\"Sidebar\",\"groupMode\":0,\"isHidden\":false}}",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"1f02ac2266ee22329ebb\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":863.9023169244952,\"y\":0,\"z\":1000,\"tabOrder\":16000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 10'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 863.90,
- "y": 0.00,
- "z": 1000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 863.9,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"20fba69eec77cd064631\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":1000,\"width\":200,\"height\":720,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":2,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"shadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}},{\"properties\":{\"shadowPositionPreset\":{\"expr\":{\"Literal\":{\"Value\":\"'centerRight'\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"20D\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar bg'\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 720.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 1000.00
+ "height": 720.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"221e46667dae87685476\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":0,\"width\":192,\"height\":720,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"\"}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Sidebar shadow'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'View cost savings for commitment discounts used during the specified period.'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"dropShadow\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"preset\":{\"expr\":{\"Literal\":{\"Value\":\"'CenterRight'\"}}},\"angle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}},\"shadowDistance\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowBlur\":{\"expr\":{\"Literal\":{\"Value\":\"10L\"}}},\"shadowSpread\":{\"expr\":{\"Literal\":{\"Value\":\"3L\"}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"70L\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\"}",
"filters": "[]",
- "height": 720.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 0.00
+ "height": 720.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"3542e130cd470c470eda\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":96,\"z\":16000,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 96.00,
- "z": 16000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 96.0,
+ "z": 16000.0
},
{
"config": "{\"name\":\"3f5db2b792698b60ee6b\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":96,\"y\":0,\"z\":9000,\"tabOrder\":11000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 2'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 96.00,
- "y": 0.00,
- "z": 9000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 96.0,
+ "y": 0.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"437337e61200770de40d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":8,\"z\":11000,\"width\":184,\"height\":88,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Costs.EffectiveCost)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"u\",\"Entity\":\"Costs\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0},\"Name\":\"Sum(Costs.EffectiveCost)\",\"NativeReferenceName\":\"Effective cost\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"u\"}},\"Property\":\"EffectiveCost\"}},\"Function\":0}}}]},\"columnProperties\":{\"Sum(Costs.EffectiveCost)\":{\"displayName\":\"Effective cost\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Effective cost'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 792.00,
- "y": 8.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 792.0,
+ "y": 8.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"479da8953d6ace10a0e0\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":192,\"z\":15000,\"tabOrder\":17000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 192.00,
- "z": 15000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 192.0,
+ "z": 15000.0
},
{
"config": "{\"name\":\"49424646e0d465e43002\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":0,\"z\":17000,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 0.00,
- "z": 17000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 17000.0
},
{
"config": "{\"name\":\"4f9645948004647c9cbd\",\"layouts\":[{\"id\":0,\"position\":{\"x\":792,\"y\":104,\"z\":4000,\"width\":472,\"height\":184,\"tabOrder\":3000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Advisor.properties.impactedValue\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\"},{\"queryRef\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\"},{\"queryRef\":\"Advisor.properties.extendedProperties.currentSku\"},{\"queryRef\":\"Advisor.properties.extendedProperties.targetSku\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.impactedValue\"},\"Name\":\"Advisor.properties.impactedValue\",\"NativeReferenceName\":\"Resource name1\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.savingsAmount)\",\"NativeReferenceName\":\"Monthly savings\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.annualSavingsAmount\"}},\"Function\":0},\"Name\":\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\",\"NativeReferenceName\":\"Annual savings\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.currentSku\"},\"Name\":\"Advisor.properties.extendedProperties.currentSku\",\"NativeReferenceName\":\"Current SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.targetSku\"},\"Name\":\"Advisor.properties.extendedProperties.targetSku\",\"NativeReferenceName\":\"Target SKU\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.savingsAmount\"}},\"Function\":0}}}]},\"columnProperties\":{\"Advisor.properties.impactedValue\":{\"displayName\":\"Resource name\"},\"Sum(Advisor.properties.extendedProperties.savingsAmount)\":{\"displayName\":\"Monthly savings\"},\"Sum(Advisor.properties.extendedProperties.annualSavingsAmount)\":{\"displayName\":\"Annual savings\"},\"Advisor.properties.extendedProperties.currentSku\":{\"displayName\":\"Current SKU\"},\"Advisor.properties.extendedProperties.targetSku\":{\"displayName\":\"Target SKU\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"total\":[{\"properties\":{\"totals\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"201D\"}}}},\"selector\":{\"metadata\":\"Advisor.properties.impactedValue\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter1842f9a0958b740359a3\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"AdvisorRecommendations\"}},\"Property\":\"properties.shortDescription.solution\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.shortDescription.solution\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'Right-size or shutdown underutilized virtual machines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 472.00,
- "x": 792.00,
- "y": 104.00,
- "z": 4000.00
+ "height": 184.0,
+ "width": 472.0,
+ "x": 792.0,
+ "y": 104.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"5268d98d05e288e0c09a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":576,\"z\":11000,\"tabOrder\":12000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 576.00,
- "z": 11000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 576.0,
+ "z": 11000.0
},
{
"config": "{\"name\":\"535fd6e70e8b625030e5\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":0,\"y\":0,\"z\":10000,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 1'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 0.00,
- "y": 0.00,
- "z": 10000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"55bd7741e9b9bd97d274\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":3000,\"width\":200,\"height\":56,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Subscriptions.name\",\"active\":true},{\"queryRef\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"a\",\"Entity\":\"AdvisorRecommendations\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"a\"}},\"Property\":\"properties.extendedProperties.ResourceGroup\"},\"Name\":\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\",\"NativeReferenceName\":\"Resource group1\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Subscriptions.name\"],\"isCollapsed\":true,\"isPinned\":true},{\"queryRefs\":[\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\"],\"isCollapsed\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"AdvisorRecommendations.properties.extendedProperties.ResourceGroup\":{\"displayName\":\"Resource group\"},\"Subscriptions.name\":{\"displayName\":\"Subscription\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Subscription'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"012e2e9a60dd000813e4\"}",
"filters": "[]",
- "height": 56.00,
- "width": 200.00,
- "x": 0.00,
- "y": 0.00,
- "z": 3000.00
+ "height": 56.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"56e10ffa24d6000272c6\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":119.99999999999994,\"z\":1000,\"width\":192.00000000000003,\"height\":64,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"VirtualMachines.name\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"VirtualMachines.name\",\"NativeReferenceName\":\"name\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"VirtualMachines.name\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"VirtualMachines.name\":{}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"012e2e9a60dd000813e4\"}",
"filters": "[]",
- "height": 64.00,
- "width": 192.00,
- "x": 0.00,
- "y": 120.00,
- "z": 1000.00
+ "height": 64.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 120.0,
+ "z": 1000.0
},
{
"config": "{\"name\":\"617da9d4094788507550\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":383.9013683550949,\"z\":13000,\"tabOrder\":15000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 383.90,
- "z": 13000.00
+ "y": 383.9,
+ "z": 13000.0
},
{
"config": "{\"name\":\"64cc3a5c52704436eb9e\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":575.3462550456627,\"y\":0,\"z\":4000,\"tabOrder\":14000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 7'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 575.35,
- "y": 0.00,
- "z": 4000.00
+ "y": 0.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"663748b52b10d19b99b8\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":4000,\"width\":192,\"height\":32,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"display\":{\"mode\":\"hidden\"},\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β About Azure Advisor'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://learn.microsoft.com/azure/advisor/advisor-reference-cost-recommendations'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'About'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 4000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 4000.0
},
{
"config": "{\"name\":\"734b308f44799d493d08\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":0,\"z\":7000,\"width\":192,\"height\":104,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"textbox\",\"drillFilterOtherVisuals\":true,\"objects\":{\"general\":[{\"properties\":{\"paragraphs\":[{\"textRuns\":[{\"value\":\"Virtual machines\",\"textStyle\":{\"fontWeight\":\"bold\",\"fontFamily\":\"Segoe UI Light\",\"fontSize\":\"14pt\",\"color\":\"#ffffff\"}}]},{\"textRuns\":[{\"value\":\"Delete, archive, or change SKU for unused disks to reduce waste.\",\"textStyle\":{\"fontSize\":\"8pt\",\"color\":\"#ffffff\"}}]}]}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Header'\"}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading2'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"subTitle\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"''\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"heading\":{\"expr\":{\"Literal\":{\"Value\":\"'Heading3'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"titleWrap\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\"}",
"filters": "[]",
- "height": 104.00,
- "width": 192.00,
- "x": 0.00,
- "y": 0.00,
- "z": 7000.00
+ "height": 104.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"85220b5299bd6a14210d\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0.010973936899858927,\"y\":479.9013683550949,\"z\":12000,\"tabOrder\":0}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
+ "height": 88.0,
+ "width": 1048.0,
"x": 0.01,
- "y": 479.90,
- "z": 12000.00
+ "y": 479.9,
+ "z": 12000.0
},
{
"config": "{\"name\":\"8b96895a188de203d68d\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":487.99999999999994,\"z\":7000,\"width\":472,\"height\":224,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Disks.name\"},{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Disks.location\"},{\"queryRef\":\"Disks.sku.name\"},{\"queryRef\":\"Disks.properties.diskSizeGB\"},{\"queryRef\":\"Disks.diskType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0},{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"name\"},\"Name\":\"Disks.name\",\"NativeReferenceName\":\"Disk name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"location\"},\"Name\":\"Disks.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"sku.name\"},\"Name\":\"Disks.sku.name\",\"NativeReferenceName\":\"SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"},\"Name\":\"Disks.properties.diskSizeGB\",\"NativeReferenceName\":\"Disk size GB\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"diskType\"},\"Name\":\"Disks.diskType\",\"NativeReferenceName\":\"Disk type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Disks.name\":{\"displayName\":\"Disk name\"},\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Disks.location\":{\"displayName\":\"Region\"},\"Disks.sku.name\":{\"displayName\":\"SKU\"},\"Disks.properties.diskSizeGB\":{\"displayName\":\"Disk size GB\"},\"Disks.diskType\":{\"displayName\":\"Disk type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"204.98988921419917D\"}}}},\"selector\":{\"metadata\":\"Disks.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.98078219913356D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{},\"selector\":{\"metadata\":\"Disks.location\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Compute disks'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 472.00,
- "x": 216.00,
- "y": 488.00,
- "z": 7000.00
+ "height": 224.0,
+ "width": 472.0,
+ "x": 216.0,
+ "y": 488.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"8fc5b7a1400ad5d03426\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":192,\"y\":0,\"z\":8000,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 3'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
- "x": 192.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 704.0,
+ "width": 88.0,
+ "x": 192.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"924e4bf0ac0a305b0300\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":1048.0876708841058,\"x\":215.79148101381097,\"y\":7.998822330878503,\"z\":0,\"tabOrder\":0}}],\"singleVisualGroup\":{\"displayName\":\"Layout grid\",\"groupMode\":0,\"isHidden\":true}}",
- "height": 704.00,
+ "height": 704.0,
"width": 1048.09,
"x": 215.79,
- "y": 8.00,
- "z": 0.00
+ "y": 8.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"9d4514891410de028d70\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":286.7901931668298,\"y\":0,\"z\":7000,\"tabOrder\":10000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 286.79,
- "y": 0.00,
- "z": 7000.00
+ "y": 0.0,
+ "z": 7000.0
},
{
"config": "{\"name\":\"9e1770c55088a8804057\",\"layouts\":[{\"id\":0,\"position\":{\"x\":504,\"y\":104,\"z\":5000,\"width\":280,\"height\":184,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"hundredPercentStackedBarChart\",\"projections\":{\"Series\":[{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"}],\"Y\":[{\"queryRef\":\"Count(Virtual Machines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"Power state\"},{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Count(Virtual Machines.id)\",\"NativeReferenceName\":\"Count of id1\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"Power state\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"labels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"optimizeLabelDisplay\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelOverflow\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"labelPosition\":{\"expr\":{\"Literal\":{\"Value\":\"'Auto'\"}}},\"enableValueDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"enableDetailDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableTitleDataLabel\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"enableBackground\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"backgroundColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":4,\"Percent\":0.4}}}}},\"labelContentLayout\":{\"expr\":{\"Literal\":{\"Value\":\"'SingleLine'\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"dataPoint\":[{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF0000'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM stopped'\"}}}}}]}},{\"properties\":{\"fill\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#FF8C00'\"}}}}}},\"selector\":{\"data\":[{\"scopeId\":{\"Comparison\":{\"ComparisonKind\":0,\"Left\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"VirtualMachines\"}},\"Property\":\"powerState.displayStatus\"}},\"Right\":{\"Literal\":{\"Value\":\"'VM deallocated'\"}}}}}]}}],\"ribbonBands\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"valueAxis\":[{\"properties\":{\"invertAxis\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine count by state'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[{\"name\":\"Filter6c91924cc80632f27d40\",\"expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Entity\":\"Resources\"}},\"Property\":\"type\"}},\"filter\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Where\":[{\"Condition\":{\"In\":{\"Expressions\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"type\"}}],\"Values\":[[{\"Literal\":{\"Value\":\"'microsoft.compute/virtualmachines'\"}}]]}}}]},\"type\":\"Categorical\",\"howCreated\":1}]",
- "height": 184.00,
- "width": 280.00,
- "x": 504.00,
- "y": 104.00,
- "z": 5000.00
+ "height": 184.0,
+ "width": 280.0,
+ "x": 504.0,
+ "y": 104.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b1b7c47b25b45561906c\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":296,\"z\":3000,\"width\":1048,\"height\":184,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Subscriptions.name\"},{\"queryRef\":\"Virtual Machines.resourceGroup\"},{\"queryRef\":\"Virtual Machines.hardwareProfile.vmSize\"},{\"queryRef\":\"Virtual Machines.powerState.displayStatus\"},{\"queryRef\":\"Virtual Machines.storageProfile.imageReference.sku\"},{\"queryRef\":\"Virtual Machines.storageProfile.osDisk.osType\"},{\"queryRef\":\"Virtual Machines.licenseType\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"s\",\"Entity\":\"Subscriptions\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"s\"}},\"Property\":\"name\"},\"Name\":\"Subscriptions.name\",\"NativeReferenceName\":\"Subscription name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"resourceGroup\"},\"Name\":\"Virtual Machines.resourceGroup\",\"NativeReferenceName\":\"Resource group\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"hardwareProfile.vmSize\"},\"Name\":\"Virtual Machines.hardwareProfile.vmSize\",\"NativeReferenceName\":\"Size\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"powerState.displayStatus\"},\"Name\":\"Virtual Machines.powerState.displayStatus\",\"NativeReferenceName\":\"State\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.imageReference.sku\"},\"Name\":\"Virtual Machines.storageProfile.imageReference.sku\",\"NativeReferenceName\":\"Image reference SKU\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"storageProfile.osDisk.osType\"},\"Name\":\"Virtual Machines.storageProfile.osDisk.osType\",\"NativeReferenceName\":\"OS\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"licenseType\"},\"Name\":\"Virtual Machines.licenseType\",\"NativeReferenceName\":\"License type\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Subscriptions.name\":{\"displayName\":\"Subscription name\"},\"Virtual Machines.resourceGroup\":{\"displayName\":\"Resource group\"},\"Virtual Machines.hardwareProfile.vmSize\":{\"displayName\":\"Size\"},\"Virtual Machines.powerState.displayStatus\":{\"displayName\":\"State\"},\"Virtual Machines.storageProfile.imageReference.sku\":{\"displayName\":\"Image reference SKU\"},\"Virtual Machines.storageProfile.osDisk.osType\":{\"displayName\":\"OS\"},\"Virtual Machines.licenseType\":{\"displayName\":\"License type\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"columnWidth\":[{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"185.27678387042303D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.resourceGroup\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"198D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.storageProfile.imageReference.sku\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"114D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.powerState.displayStatus\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"191.47622535693588D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"246.17910804947712D\"}}}},\"selector\":{\"metadata\":\"Subscriptions.name\"}},{\"properties\":{\"value\":{\"expr\":{\"Literal\":{\"Value\":\"144.07462149101514D\"}}}},\"selector\":{\"metadata\":\"Virtual Machines.hardwareProfile.vmSize\"}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machine summary'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 184.00,
- "width": 1048.00,
- "x": 216.00,
- "y": 296.00,
- "z": 3000.00
+ "height": 184.0,
+ "width": 1048.0,
+ "x": 216.0,
+ "y": 296.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"b637a97051869eada9d7\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":624,\"z\":5000,\"width\":192,\"height\":32,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'rightArrow'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Open in Azure portal'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#browse/Microsoft.Compute%2FVirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Open in portal'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 624.00,
- "z": 5000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 624.0,
+ "z": 5000.0
},
{
"config": "{\"name\":\"b9b370bb58e753a20d97\",\"layouts\":[{\"id\":0,\"position\":{\"x\":215.99999999999997,\"y\":8,\"z\":10000,\"width\":184,\"height\":88,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(VirtualMachines.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(VirtualMachines.id)\",\"NativeReferenceName\":\"Virtual machines\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"columnProperties\":{\"Min(VirtualMachines.id)\":{\"displayName\":\"Virtual machines\"}},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Virtual machines'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 216.00,
- "y": 8.00,
- "z": 10000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 216.0,
+ "y": 8.0,
+ "z": 10000.0
},
{
"config": "{\"name\":\"be283185ce0cab03056c\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":382.9755471264409,\"y\":0,\"z\":6000,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 5'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 382.98,
- "y": 0.00,
- "z": 6000.00
+ "y": 0.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"c0756d2b77c058a58479\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":688.0000000000011,\"z\":2000,\"width\":192,\"height\":32,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'custom'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Feedback-White08007760675531328.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Give feedback'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20understand%20and%20optimize%20cost%20and%20usage%20with%20the%20FinOps%20toolkit%20Workload%20optimization%20report%3F/cvaQuestion/How%20valuable%20is%20the%20Workload%20optimization%20report%3F/surveyId/FTK0.8/bladeName/PowerBI.Storage.WorkloadOptimization/featureName/VirtualMachines'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Feedback'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 688.00,
- "z": 2000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 688.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c604eb003eb6ad583a0a\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":767.7169629648845,\"y\":0,\"z\":2000,\"tabOrder\":4000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 9'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 767.72,
- "y": 0.00,
- "z": 2000.00
+ "y": 0.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"c80cebe0b5e8a1ad30d2\",\"layouts\":[{\"id\":0,\"position\":{\"x\":160,\"y\":0,\"z\":8000,\"width\":40,\"height\":40,\"tabOrder\":6000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'information'\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'right'\"}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"iconSize\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}}},\"selector\":{\"id\":\"default\"}},{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/pbi/WorkloadOptimization#virtual-machines'\"}}},\"tooltip\":{\"expr\":{\"Literal\":{\"Value\":\"'About this page'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Help'\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\"}",
"filters": "[]",
- "height": 40.00,
- "width": 40.00,
- "x": 160.00,
- "y": 0.00,
- "z": 8000.00
+ "height": 40.0,
+ "width": 40.0,
+ "x": 160.0,
+ "y": 0.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"cca310b0c7dd4c2924a3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":88,\"width\":1048,\"x\":0,\"y\":288,\"z\":14000,\"tabOrder\":13000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Row 4'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 88.00,
- "width": 1048.00,
- "x": 0.00,
- "y": 288.00,
- "z": 14000.00
+ "height": 88.0,
+ "width": 1048.0,
+ "x": 0.0,
+ "y": 288.0,
+ "z": 14000.0
},
{
"config": "{\"name\":\"ce8d99359c4bc71e3806\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":656.0000000000011,\"z\":3000,\"width\":192,\"height\":32,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"actionButton\",\"drillFilterOtherVisuals\":true,\"objects\":{\"icon\":[{\"properties\":{\"shapeType\":{\"expr\":{\"Literal\":{\"Value\":\"'help'\"}}},\"image\":{\"image\":{\"name\":{\"expr\":{\"Literal\":{\"Value\":\"'Question-Circled-White.svg'\"}}},\"url\":{\"expr\":{\"ResourcePackageItem\":{\"PackageName\":\"RegisteredResources\",\"PackageType\":1,\"ItemName\":\"Question-Circled-White3792978913051954.svg\"}}},\"scaling\":{\"expr\":{\"Literal\":{\"Value\":\"'Normal'\"}}}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"topMargin\":{\"expr\":{\"Literal\":{\"Value\":\"4L\"}}},\"placement\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"lineColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"lineWeight\":{\"expr\":{\"Literal\":{\"Value\":\"1L\"}}}},\"selector\":{\"id\":\"default\"}}],\"text\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Β Β Get help'\"}}},\"horizontalAlignment\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"underline\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"leftMargin\":{\"expr\":{\"Literal\":{\"Value\":\"16L\"}}}},\"selector\":{\"id\":\"default\"}}],\"fill\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}},{\"properties\":{\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"100D\"}}},\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}}},\"selector\":{\"id\":\"default\"}}]},\"vcObjects\":{\"visualLink\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"type\":{\"expr\":{\"Literal\":{\"Value\":\"'WebUrl'\"}}},\"showDefaultTooltip\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"webUrl\":{\"expr\":{\"Literal\":{\"Value\":\"'https://aka.ms/ftk/discuss'\"}}}}}],\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Get help'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"18c08d7be0513c6b425e\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 32.00,
- "width": 192.00,
- "x": 0.00,
- "y": 656.00,
- "z": 3000.00
+ "height": 32.0,
+ "width": 192.0,
+ "x": 0.0,
+ "y": 656.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"d1696170969b62342a43\",\"layouts\":[{\"id\":0,\"position\":{\"x\":0,\"y\":55.99999999999994,\"z\":2000,\"width\":200,\"height\":64,\"tabOrder\":1000}}],\"singleVisual\":{\"visualType\":\"slicer\",\"projections\":{\"Values\":[{\"queryRef\":\"Resources.location\",\"active\":true}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"r\",\"Entity\":\"Resources\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"r\"}},\"Property\":\"location\"},\"Name\":\"Resources.location\",\"NativeReferenceName\":\"Region\"}]},\"expansionStates\":[{\"roles\":[\"Values\"],\"levels\":[{\"queryRefs\":[\"Resources.location\"],\"isCollapsed\":true,\"isPinned\":true}],\"root\":{\"identityValues\":null}}],\"columnProperties\":{\"Resources.location\":{\"displayName\":\"Region\"}},\"drillFilterOtherVisuals\":true,\"objects\":{\"selection\":[{\"properties\":{\"singleSelect\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"selectAllCheckboxEnabled\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"header\":[{\"properties\":{\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":0}}}}},\"fontFamily\":{\"expr\":{\"Literal\":{\"Value\":\"'''Segoe UI Semibold'', wf_segoe-ui_semibold, helvetica, arial, sans-serif'\"}}},\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"9D\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Region'\"}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}}}}],\"items\":[{\"properties\":{\"steppedLayoutIndentation\":{\"expr\":{\"Literal\":{\"Value\":\"16D\"}}},\"expandCollapseToggleType\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"padding\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"background\":{\"solid\":{\"color\":{\"expr\":{\"Literal\":{\"Value\":\"'#E0DAF1'\"}}}}},\"outlineStyle\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":1,\"Percent\":0}}}}},\"textSize\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bold\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"data\":[{\"properties\":{\"mode\":{\"expr\":{\"Literal\":{\"Value\":\"'Dropdown'\"}}}}}],\"pendingChangesIcon\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"position\":{\"expr\":{\"Literal\":{\"Value\":\"'left'\"}}}}}],\"general\":[{\"properties\":{}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"border\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"color\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":0,\"Percent\":-0.1}}}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Filter'\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"padding\":[{\"properties\":{\"top\":{\"expr\":{\"Literal\":{\"Value\":\"6D\"}}},\"left\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}},\"bottom\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"right\":{\"expr\":{\"Literal\":{\"Value\":\"8D\"}}}}}]}},\"parentGroupName\":\"012e2e9a60dd000813e4\"}",
"filters": "[]",
- "height": 64.00,
- "width": 200.00,
- "x": 0.00,
- "y": 56.00,
- "z": 2000.00
+ "height": 64.0,
+ "width": 200.0,
+ "x": 0.0,
+ "y": 56.0,
+ "z": 2000.0
},
{
"config": "{\"name\":\"de54553e039a70658d8a\",\"layouts\":[{\"id\":0,\"position\":{\"x\":408,\"y\":8,\"z\":9000,\"width\":184,\"height\":88,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Sum(Disks.properties.diskSizeGB)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"d\",\"Entity\":\"Disks\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0},\"Name\":\"Sum(Disks.properties.diskSizeGB)\",\"NativeReferenceName\":\"properties.diskSizeGB\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"d\"}},\"Property\":\"properties.diskSizeGB\"}},\"Function\":0}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Disk size (GB)'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 408.00,
- "y": 8.00,
- "z": 9000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 408.0,
+ "y": 8.0,
+ "z": 9000.0
},
{
"config": "{\"name\":\"e2889a7f8d9c50b23089\",\"layouts\":[{\"id\":0,\"position\":{\"x\":696,\"y\":487.99999999999994,\"z\":6000,\"width\":568,\"height\":224,\"tabOrder\":5000}}],\"singleVisual\":{\"visualType\":\"tableEx\",\"projections\":{\"Values\":[{\"queryRef\":\"Virtual Machines.name\"},{\"queryRef\":\"Network interfaces.name\"},{\"queryRef\":\"Network interfaces.location\"},{\"queryRef\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\"},{\"queryRef\":\"Public ip addresses.name\"},{\"queryRef\":\"Public ip addresses.properties.ipAddress\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"v\",\"Entity\":\"VirtualMachines\",\"Type\":0},{\"Name\":\"n\",\"Entity\":\"NetworkInterfaces\",\"Type\":0},{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"},\"Name\":\"Virtual Machines.name\",\"NativeReferenceName\":\"Virtual machine name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"name\"},\"Name\":\"Network interfaces.name\",\"NativeReferenceName\":\"Network interface\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"location\"},\"Name\":\"Network interfaces.location\",\"NativeReferenceName\":\"Region\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"n\"}},\"Property\":\"properties.ipConfigurations.properties.privateIPAddress\"},\"Name\":\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\",\"NativeReferenceName\":\"Private IP address\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"name\"},\"Name\":\"Public ip addresses.name\",\"NativeReferenceName\":\"Public IP name\"},{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"properties.ipAddress\"},\"Name\":\"Public ip addresses.properties.ipAddress\",\"NativeReferenceName\":\"Public IP address\"}],\"OrderBy\":[{\"Direction\":1,\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"v\"}},\"Property\":\"name\"}}}]},\"columnProperties\":{\"Virtual Machines.name\":{\"displayName\":\"Virtual machine name\"},\"Network interfaces.name\":{\"displayName\":\"Network interface\"},\"Network interfaces.location\":{\"displayName\":\"Region\"},\"Network interfaces.properties.ipConfigurations.properties.privateIPAddress\":{\"displayName\":\"Private IP address\"},\"Public ip addresses.name\":{\"displayName\":\"Public IP name\"},\"Public ip addresses.properties.ipAddress\":{\"displayName\":\"Public IP address\"}},\"drillFilterOtherVisuals\":true,\"vcObjects\":{\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IP addresses'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 224.00,
- "width": 568.00,
- "x": 696.00,
- "y": 488.00,
- "z": 6000.00
+ "height": 224.0,
+ "width": 568.0,
+ "x": 696.0,
+ "y": 488.0,
+ "z": 6000.0
},
{
"config": "{\"name\":\"e3b192204eaa721a02e3\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":671.5316090052736,\"y\":0,\"z\":3000,\"tabOrder\":7000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 8'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 671.53,
- "y": 0.00,
- "z": 3000.00
+ "y": 0.0,
+ "z": 3000.0
},
{
"config": "{\"name\":\"eb957047aa4622895305\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":960.0876708841058,\"y\":0,\"z\":0,\"tabOrder\":2000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 11'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 960.09,
- "y": 0.00,
- "z": 0.00
+ "y": 0.0,
+ "z": 0.0
},
{
"config": "{\"name\":\"efde44a4bd0cee333846\",\"layouts\":[{\"id\":0,\"position\":{\"x\":600,\"y\":8,\"z\":8000,\"width\":184,\"height\":88,\"tabOrder\":9000}}],\"singleVisual\":{\"visualType\":\"card\",\"projections\":{\"Values\":[{\"queryRef\":\"Min(PublicIPAddresses.id)\"}]},\"prototypeQuery\":{\"Version\":2,\"From\":[{\"Name\":\"p\",\"Entity\":\"PublicIPAddresses\",\"Type\":0}],\"Select\":[{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2},\"Name\":\"Min(PublicIPAddresses.id)\",\"NativeReferenceName\":\"Count of id\"}],\"OrderBy\":[{\"Direction\":2,\"Expression\":{\"Aggregation\":{\"Expression\":{\"Column\":{\"Expression\":{\"SourceRef\":{\"Source\":\"p\"}},\"Property\":\"id\"}},\"Function\":2}}}]},\"drillFilterOtherVisuals\":true,\"hasDefaultSort\":true,\"objects\":{\"categoryLabels\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"labels\":[{\"properties\":{\"labelDisplayUnits\":{\"expr\":{\"Literal\":{\"Value\":\"0D\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"32D\"}}}}}]},\"vcObjects\":{\"visualTooltip\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}}}}],\"title\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"true\"}}},\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Public IPs'\"}}},\"alignment\":{\"expr\":{\"Literal\":{\"Value\":\"'center'\"}}},\"fontSize\":{\"expr\":{\"Literal\":{\"Value\":\"12D\"}}}}}]}}}",
"filters": "[]",
- "height": 88.00,
- "width": 184.00,
- "x": 600.00,
- "y": 8.00,
- "z": 8000.00
+ "height": 88.0,
+ "width": 184.0,
+ "x": 600.0,
+ "y": 8.0,
+ "z": 8000.0
},
{
"config": "{\"name\":\"fff8c6123a93176d8959\",\"layouts\":[{\"id\":0,\"position\":{\"height\":704,\"width\":88,\"x\":479.1609010860518,\"y\":0,\"z\":5000,\"tabOrder\":8000}}],\"singleVisual\":{\"visualType\":\"shape\",\"drillFilterOtherVisuals\":true,\"objects\":{\"shape\":[{\"properties\":{\"tileShape\":{\"expr\":{\"Literal\":{\"Value\":\"'rectangle'\"}}}}}],\"rotation\":[{\"properties\":{\"shapeAngle\":{\"expr\":{\"Literal\":{\"Value\":\"0L\"}}}}}],\"fill\":[{\"properties\":{\"fillColor\":{\"solid\":{\"color\":{\"expr\":{\"ThemeDataColor\":{\"ColorId\":8,\"Percent\":0}}}}},\"transparency\":{\"expr\":{\"Literal\":{\"Value\":\"80D\"}}}},\"selector\":{\"id\":\"default\"}}],\"outline\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]},\"vcObjects\":{\"title\":[{\"properties\":{\"text\":{\"expr\":{\"Literal\":{\"Value\":\"'Col 6'\"}}}}}],\"visualHeader\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}],\"background\":[{\"properties\":{\"show\":{\"expr\":{\"Literal\":{\"Value\":\"false\"}}}}}]}},\"parentGroupName\":\"924e4bf0ac0a305b0300\",\"howCreated\":\"InsertVisualButton\"}",
"filters": "[]",
- "height": 704.00,
- "width": 88.00,
+ "height": 704.0,
+ "width": 88.0,
"x": 479.16,
- "y": 0.00,
- "z": 5000.00
+ "y": 0.0,
+ "z": 5000.0
}
],
- "width": 1280.00
+ "width": 1280.0
}
],
"theme": "Microsoft_FinOps_light_theme4289017974727012.json"
-}
\ No newline at end of file
+}
diff --git a/src/powershell/Private/Get-VersionNumber.ps1 b/src/powershell/Private/Get-VersionNumber.ps1
index e648ac537..75f2afe47 100644
--- a/src/powershell/Private/Get-VersionNumber.ps1
+++ b/src/powershell/Private/Get-VersionNumber.ps1
@@ -4,5 +4,5 @@
function Get-VersionNumber
{
param()
- return '0.8-dev'
+ return '0.8'
}
diff --git a/src/powershell/Public/Remove-FinOpsHub.ps1 b/src/powershell/Public/Remove-FinOpsHub.ps1
index 14c06e0d3..1f2781376 100644
--- a/src/powershell/Public/Remove-FinOpsHub.ps1
+++ b/src/powershell/Public/Remove-FinOpsHub.ps1
@@ -48,7 +48,11 @@ function Remove-FinOpsHub
[Parameter(ParameterSetName = 'Name')]
[Parameter(ParameterSetName = 'Object')]
- [switch]$KeepStorageAccount
+ [switch]$KeepStorageAccount,
+
+ [Parameter(ParameterSetName = 'Name')]
+ [Parameter(ParameterSetName = 'Object')]
+ [switch]$Force
)
$context = Get-AzContext
@@ -105,7 +109,7 @@ function Remove-FinOpsHub
if ($PSCmdlet.ShouldProcess($Name, 'DeleteFinOpsHub'))
{
# Initialize a flag to track if "Yes to All" was selected
- $yesToAll = $false
+ $yesToAll = $Force
# Loop through each resource
$success = $true
@@ -126,21 +130,31 @@ function Remove-FinOpsHub
# Handle the user's choice
switch ($confirmation)
{
- 0 { # Yes
+ 0
+ {
+ # Yes
# Continue with deletion
}
- 1 { # Yes to All
+ 1
+ {
+ # Yes to All
$yesToAll = $true
}
- 2 { # No
+ 2
+ {
+ # No
Write-Verbose -Message "Skipping resource: $($resource.Name)"
continue
}
- 3 { # No to All
+ 3
+ {
+ # No to All
Write-Verbose -Message "Skipping all resources."
return $false
}
- 4 { # Suspend
+ 4
+ {
+ # Suspend
Write-Verbose -Message "Operation suspended."
return $false
}
diff --git a/src/scripts/Deploy-Toolkit.ps1 b/src/scripts/Deploy-Toolkit.ps1
index e6c9bf3de..6a5cf83eb 100644
--- a/src/scripts/Deploy-Toolkit.ps1
+++ b/src/scripts/Deploy-Toolkit.ps1
@@ -64,6 +64,7 @@ function iff([bool]$Condition, $IfTrue, $IfFalse)
# Build toolkit if requested
if ($Build)
{
+ Write-Verbose "Building $Template template..."
& "$PSScriptRoot/Build-Toolkit" -Template $Template
}
@@ -120,6 +121,7 @@ if (Test-Path "$PSScriptRoot/../workbooks/$Template")
{
"resourceGroup"
{
+ Write-Verbose 'Starting resource group deployment...'
# Set default RG name
if ($Demo)
@@ -143,9 +145,11 @@ if (Test-Path "$PSScriptRoot/../workbooks/$Template")
else
{
# Create resource group if it doesn't exist
+ Write-Verbose 'Checking resource group $ResourceGroup...'
$rg = Get-AzResourceGroup $ResourceGroup -ErrorAction SilentlyContinue
if ($null -eq $rg)
{
+ Write-Verbose 'Creating resource group $ResourceGroup...'
New-AzResourceGroup `
-Name $ResourceGroup `
-Location $Location `
@@ -168,6 +172,7 @@ if (Test-Path "$PSScriptRoot/../workbooks/$Template")
}
"subscription"
{
+ Write-Verbose 'Starting subscription deployment...'
Write-Host " β [sub] $((Get-AzContext).Subscription.Name)..."
$Parameters.Keys | ForEach-Object { Write-Host " $($_) = $($Parameters[$_])" }
@@ -197,6 +202,8 @@ if (Test-Path "$PSScriptRoot/../workbooks/$Template")
}
"tenant"
{
+ Write-Verbose 'Starting tenant deployment...'
+
$azContext = (Get-AzContext).Tenant
Write-Host " β [tenant] $(iff ([string]::IsNullOrWhitespace($azContext.Name)) $azContext.Id $azContext.Name)..."
$Parameters.Keys | ForEach-Object { Write-Host " $($_) = $($Parameters[$_])" }
diff --git a/src/scripts/Init-Repo.ps1 b/src/scripts/Init-Repo.ps1
index 5f8fff581..4f69e6b3d 100644
--- a/src/scripts/Init-Repo.ps1
+++ b/src/scripts/Init-Repo.ps1
@@ -32,6 +32,9 @@
.PARAMETER All
Installs optional apps and modules.
+
+ .PARAMETER Upgrade
+ Indicates whether specified components should be upgraded, if already installed.
#>
[CmdletBinding(SupportsShouldProcess)]
Param(
@@ -39,7 +42,8 @@ Param(
[switch] $BicepPowerShell,
[switch] $NPM,
[switch] $Pester,
- [switch] $All
+ [switch] $All,
+ [switch] $Upgrade
)
# winget (check only)
@@ -51,7 +55,7 @@ Write-Verbose "...$(if (-not $winget) { 'not ' })installed"
if ($VSCode -or $All)
{
Write-Verbose "Checking for VS Code..."
- if ((pwsh -NoProfile -Command 'code --version' | Join-String).Contains('not recognized') -eq $false)
+ if ((pwsh -NoProfile -Command 'code --version' | Join-String).Contains('not recognized') -eq $false -and -not $Upgrade)
{
Write-Verbose "...already installed"
}
@@ -75,7 +79,7 @@ if ($VSCode -or $All)
# Az -- required for testing
Write-Verbose "Checking for Az PowerShell..."
-if (Get-Module -Name Az -ListAvailable)
+if ((Get-Module -Name Az -ListAvailable) -and -not $Upgrade)
{
Write-Verbose "...installed"
}
@@ -93,7 +97,7 @@ else
if ($BicepPowerShell -or $All)
{
Write-Verbose "Checking for Bicep PowerShell..."
- if (Get-Module -Name Bicep -ListAvailable)
+ if ((Get-Module -Name Bicep -ListAvailable) -and -not $Upgrade)
{
Write-Verbose "...installed"
}
@@ -110,7 +114,7 @@ if ($BicepPowerShell -or $All)
# Bicep CLI -- required for testing
Write-Verbose "Checking for bicep..."
-if ((pwsh -NoProfile -Command 'bicep --version' | Join-String).Contains('not recognized') -eq $false)
+if ((pwsh -NoProfile -Command 'bicep --version' | Join-String).Contains('not recognized') -eq $false -and -not $Upgrade)
{
Write-Verbose "...already installed"
}
diff --git a/src/templates/finops-hub/main.bicep b/src/templates/finops-hub/main.bicep
index 087e3f745..7819569a1 100644
--- a/src/templates/finops-hub/main.bicep
+++ b/src/templates/finops-hub/main.bicep
@@ -179,7 +179,7 @@ output name string = hubName
output location string = location
@description('Name of the Data Factory.')
-output dataFactorytName string = hub.outputs.dataFactorytName
+output dataFactoryName string = hub.outputs.dataFactoryName
@description('The resource ID of the deployed storage account.')
output storageAccountId string = hub.outputs.storageAccountId
diff --git a/src/templates/finops-hub/modules/dataExplorer.bicep b/src/templates/finops-hub/modules/dataExplorer.bicep
index 213806cf1..67befd072 100644
--- a/src/templates/finops-hub/modules/dataExplorer.bicep
+++ b/src/templates/finops-hub/modules/dataExplorer.bicep
@@ -127,6 +127,7 @@ param enablePublicAccess bool
// Variables
//------------------------------------------------------------------------------
+// cSpell:ignore ftkver, privatelink
var ftkver = any(loadTextContent('ftkver.txt')) // any() is used to suppress a warning the array size (only happens when version does not contain a dash)
var ftkVersion = contains(ftkver, '-') ? split(ftkver, '-')[0] : ftkver
var ftkBranch = contains(ftkver, '-') ? split(ftkver, '-')[1] : ''
@@ -237,7 +238,7 @@ resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
resource cluster 'Microsoft.Kusto/clusters@2023-08-15' = {
name: clusterName
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Kusto/clusters') ? tagsByResource['Microsoft.Kusto/clusters'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Kusto/clusters'] ?? {})
sku: {
name: clusterSku
tier: startsWith(clusterSku, 'Dev(No SLA)_') ? 'Basic' : 'Standard'
@@ -373,7 +374,7 @@ resource clusterStorageAccess 'Microsoft.Authorization/roleAssignments@2022-04-0
resource dataExplorerPrivateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = if (!enablePublicAccess) {
name: dataExplorerPrivateDnsZoneName
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones') ? tagsByResource['Microsoft.Network/privateDnsZones'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones'] ?? {})
properties: {}
}
@@ -382,7 +383,7 @@ resource dataExplorerPrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtu
name: '${replace(dataExplorerPrivateDnsZone.name, '.', '-')}-link'
location: 'global'
parent: dataExplorerPrivateDnsZone
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones/virtualNetworkLinks') ? tagsByResource['Microsoft.Network/privateDnsZones/virtualNetworkLinks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones/virtualNetworkLinks'] ?? {})
properties: {
virtualNetwork: {
id: virtualNetworkId
@@ -395,7 +396,7 @@ resource dataExplorerPrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtu
resource dataExplorerEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!enablePublicAccess) {
name: '${cluster.name}-ep'
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateEndpoints') ? tagsByResource['Microsoft.Network/privateEndpoints'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateEndpoints'] ?? {})
properties: {
subnet: {
id: privateEndpointSubnetId
diff --git a/src/templates/finops-hub/modules/dataFactory.bicep b/src/templates/finops-hub/modules/dataFactory.bicep
index 54bf3c419..3eded5c23 100644
--- a/src/templates/finops-hub/modules/dataFactory.bicep
+++ b/src/templates/finops-hub/modules/dataFactory.bicep
@@ -64,10 +64,12 @@ param enablePublicAccess bool
//------------------------------------------------------------------------------
var focusSchemaVersion = '1.0'
+// cSpell:ignore ftkver
var ftkVersion = loadTextContent('ftkver.txt')
var exportApiVersion = '2023-07-01-preview'
var hubDataExplorerName = 'hubDataExplorer'
+// cSpell:ignore timeframe
// Function to generate the body for a Cost Management export
func getExportBody(exportContainerName string, datasetType string, schemaVersion string, isMonthly bool, exportFormat string, compressionMode string, partitionData string, dataOverwriteBehavior string) string => '{ "properties": { "definition": { "dataSet": { "configuration": { "dataVersion": "${schemaVersion}", "filters": [] }, "granularity": "Daily" }, "timeframe": "${isMonthly ? 'TheLastMonth': 'MonthToDate' }", "type": "${datasetType}" }, "deliveryInfo": { "destination": { "container": "${exportContainerName}", "rootFolderPath": "@{if(startswith(item().scope, \'/\'), substring(item().scope, 1, sub(length(item().scope), 1)) ,item().scope)}", "type": "AzureBlob", "resourceId": "@{variables(\'storageAccountId\')}" } }, "schedule": { "recurrence": "${ isMonthly ? 'Monthly' : 'Daily'}", "recurrencePeriod": { "from": "2024-01-01T00:00:00.000Z", "to": "2050-02-01T00:00:00.000Z" }, "status": "Inactive" }, "format": "${exportFormat}", "partitionData": "${partitionData}", "dataOverwriteBehavior": "${dataOverwriteBehavior}", "compressionMode": "${compressionMode}" }, "id": "@{variables(\'resourceManagementUri\')}@{item().scope}/providers/Microsoft.CostManagement/exports/@{variables(\'exportName\')}", "name": "@{variables(\'exportName\')}", "type": "Microsoft.CostManagement/reports", "identity": { "type": "systemAssigned" }, "location": "global" }'
@@ -90,6 +92,7 @@ var datasetPropsDefault = {
var safeExportContainerName = replace('${exportContainerName}', '-', '_')
var safeIngestionContainerName = replace('${ingestionContainerName}', '-', '_')
var safeConfigContainerName = replace('${configContainerName}', '-', '_')
+// cSpell:ignore vnet
var managedVnetName = 'default'
// Separator used to separate ingestion ID from file name for ingested files
@@ -143,6 +146,7 @@ resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
name: keyVaultName
}
+// cSpell:ignore azuretimezones
module azuretimezones 'azuretimezones.bicep' = {
name: 'azuretimezones'
params: {
@@ -217,9 +221,6 @@ module getStoragePrivateEndpointConnections 'storageEndpoints.bicep' = if (!enab
module approveStoragePrivateEndpointConnections 'storageEndpoints.bicep' = if (!enablePublicAccess) {
name: 'ApproveStoragePrivateEndpointConnections'
- dependsOn: [
- getStoragePrivateEndpointConnections
- ]
params: {
storageAccountName: storageAccount.name
privateEndpointConnections: getStoragePrivateEndpointConnections.outputs.privateEndpointConnections
@@ -251,9 +252,6 @@ module getKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!en
module approveKeyVaultPrivateEndpointConnections 'keyVaultEndpoints.bicep' = if (!enablePublicAccess) {
name: 'ApproveKeyVaultPrivateEndpointConnections'
- dependsOn: [
- getKeyVaultPrivateEndpointConnections
- ]
params: {
keyVaultName: keyVault.name
privateEndpointConnections: getKeyVaultPrivateEndpointConnections.outputs.privateEndpointConnections
@@ -285,9 +283,6 @@ module getDataExplorerPrivateEndpointConnections 'dataExplorerEndpoints.bicep' =
module approveDataExplorerPrivateEndpointConnections 'dataExplorerEndpoints.bicep' = if (deployDataExplorer && !enablePublicAccess) {
name: 'ApproveDataExplorerPrivateEndpointConnections'
- dependsOn: [
- getDataExplorerPrivateEndpointConnections
- ]
params: {
dataExplorerName: dataExplorerName
privateEndpointConnections: getDataExplorerPrivateEndpointConnections.outputs.privateEndpointConnections
@@ -302,7 +297,7 @@ module approveDataExplorerPrivateEndpointConnections 'dataExplorerEndpoints.bice
resource triggerManagerIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: '${dataFactory.name}_triggerManager'
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.ManagedIdentity/userAssignedIdentities') ? tagsByResource['Microsoft.ManagedIdentity/userAssignedIdentities'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.ManagedIdentity/userAssignedIdentities'] ?? {})
}
resource triggerManagerRoleAssignments 'Microsoft.Authorization/roleAssignments@2022-04-01' = [for role in autoStartRbacRoles: {
@@ -332,6 +327,7 @@ resource factoryIdentityStorageRoleAssignments 'Microsoft.Authorization/roleAssi
resource deleteOldResources 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
name: '${dataFactory.name}_deleteOldResources'
+ // cSpell:ignore chinaeast2
// chinaeast2 is the only region in China that supports deployment scripts
location: startsWith(location, 'china') ? 'chinaeast2' : location
identity: {
@@ -344,7 +340,7 @@ resource deleteOldResources 'Microsoft.Resources/deploymentScripts@2020-10-01' =
dependsOn: [
triggerManagerRoleAssignments
]
- tags: union(tags, contains(tagsByResource, 'Microsoft.Resources/deploymentScripts') ? tagsByResource['Microsoft.Resources/deploymentScripts'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Resources/deploymentScripts'] ?? {})
properties: {
azPowerShellVersion: '8.0'
retentionInterval: 'PT1H'
@@ -416,6 +412,7 @@ resource stopTriggers 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
// Linked services
//------------------------------------------------------------------------------
+// cSpell:ignore linkedservices
resource linkedService_keyVault 'Microsoft.DataFactory/factories/linkedservices@2018-06-01' = {
name: keyVault.name
parent: dataFactory
@@ -1109,6 +1106,7 @@ resource pipeline_InitializeHub 'Microsoft.DataFactory/factories/pipelines@2018-
}
userProperties: []
typeProperties: {
+ // cSpell:ignore Ingestions
command: '.show capacity | where Resource == \'Ingestions\' | project Remaining'
commandTimeout: '00:20:00'
}
@@ -1218,6 +1216,7 @@ resource pipeline_InitializeHub 'Microsoft.DataFactory/factories/pipelines@2018-
userProperties: []
typeProperties: {
command: {
+ // cSpell:ignore isnull, isnotempty
value: '@concat(\'.append HubSettingsLog <| print version="\', variables(\'version\'), \'",scopes=dynamic(\', variables(\'scopes\'), \'),retention=dynamic(\', variables(\'retention\'), \') | extend scopes = iff(isnull(scopes[0]), pack_array(scopes), scopes) | mv-apply scopeObj = scopes on (where isnotempty(scopeObj.scope) | summarize scopes = make_set(scopeObj.scope))\')'
type: 'Expression'
}
@@ -1251,6 +1250,7 @@ resource pipeline_InitializeHub 'Microsoft.DataFactory/factories/pipelines@2018-
}
userProperties: []
typeProperties: {
+ // cSpell:ignore externaldata
command: '.set-or-replace PricingUnits <| externaldata(x_PricingUnitDescription: string, AccountTypes: string, x_PricingBlockSize: decimal, PricingUnit: string)[@"https://github.com/microsoft/finops-toolkit/releases/download/v${ftkVersion}/PricingUnits.csv"] with (format="csv", ignoreFirstRecord=true) | project-away AccountTypes'
commandTimeout: '00:20:00'
}
@@ -1861,6 +1861,7 @@ resource pipeline_RunBackfillJob 'Microsoft.DataFactory/factories/pipelines@2018
typeProperties: {
variableName: 'exportName'
value: {
+ // cSpell:ignore costdetails
value: '@toLower(concat(variables(\'finOpsHub\'), \'-monthly-costdetails\'))'
type: 'Expression'
}
@@ -2729,6 +2730,7 @@ resource pipeline_ExecuteExportsETL 'Microsoft.DataFactory/factories/pipelines@2
typeProperties: {
variableName: 'mcaColumnToCheck'
value: {
+ // cSpell:ignore pricesheet, reservationtransactions, reservationrecommendations
value: '@if(contains(createArray(\'pricesheet\', \'reservationtransactions\'), toLower(variables(\'exportDatasetType\'))), \'BillingProfileId\', if(equals(toLower(variables(\'exportDatasetType\')), \'reservationrecommendations\'), \'Net Savings\', null))'
type: 'Expression'
}
@@ -3190,6 +3192,7 @@ resource pipeline_ExecuteExportsETL 'Microsoft.DataFactory/factories/pipelines@2
typeProperties: {
variableName: 'hubDataset'
value: {
+ // cSpell:ignore focuscost, reservationdetails
value: '@if(equals(toLower(variables(\'exportDatasetType\')), \'focuscost\'), \'Costs\', if(equals(toLower(variables(\'exportDatasetType\')), \'pricesheet\'), \'Prices\', if(equals(toLower(variables(\'exportDatasetType\')), \'reservationdetails\'), \'CommitmentDiscountUsage\', if(equals(toLower(variables(\'exportDatasetType\')), \'reservationrecommendations\'), \'Recommendations\', if(equals(toLower(variables(\'exportDatasetType\')), \'reservationtransactions\'), \'Transactions\', toLower(variables(\'exportDatasetType\')))))))'
type: 'Expression'
}
@@ -3472,6 +3475,7 @@ resource pipeline_ToIngestion 'Microsoft.DataFactory/factories/pipelines@2018-06
type: 'Expression'
}
condition: {
+ // cSpell:ignore endswith
value: '@and(endswith(item().name, \'.parquet\'), not(startswith(item().name, concat(pipeline().parameters.ingestionId, \'${ingestionIdFileNameSeparator}\'))))'
type: 'Expression'
}
@@ -4248,6 +4252,7 @@ resource pipeline_ToDataExplorer 'Microsoft.DataFactory/factories/pipelines@2018
userProperties: []
typeProperties: {
command: {
+ // cSpell:ignore abfss, toscalar
value: '@concat(\'.ingest into table \', pipeline().parameters.table, \' ("abfss://${ingestionContainerName}@${storageAccount.name}.dfs.${environment().suffixes.storage}/\', pipeline().parameters.folderPath, \'/\', pipeline().parameters.fileName, \';managed_identity=system") with (format="parquet", ingestionMappingReference="\', pipeline().parameters.table, \'_mapping", tags="[\\"drop-by:\', pipeline().parameters.ingestionId, \'\\", \\"drop-by:\', pipeline().parameters.folderPath, \'/\', pipeline().parameters.originalFileName, \'\\", \\"drop-by:ftk-version-${ftkVersion}\\"]"); print Success = assert(iff(toscalar($command_results | project-keep HasErrors) == false, true, false), "Ingestion Failed")\')'
type: 'Expression'
}
@@ -4282,6 +4287,7 @@ resource pipeline_ToDataExplorer 'Microsoft.DataFactory/factories/pipelines@2018
}
typeProperties: {
command: {
+ // cSpell:ignore startofmonth, strcat, todatetime
value: '@concat(\'.drop extents <| .show extents | extend isOldFinalData = (TableName startswith "\', replace(pipeline().parameters.table, \'_raw\', \'_final_v\'), \'" and Tags !has "drop-by:\', pipeline().parameters.ingestionId, \'" and Tags has "drop-by:\', pipeline().parameters.folderPath, \'") | extend isPastFinalRetention = (TableName startswith "\', replace(pipeline().parameters.table, \'_raw\', \'_final_v\'), \'" and todatetime(substring(strcat(replace_string(extract("drop-by:[A-Za-z]+/(\\\\d{4}/\\\\d{2}(/\\\\d{2})?)", 1, Tags), "/", "-"), "-01"), 0, 10)) < datetime_add("month", -\', if(lessOrEquals(variables(\'finalRetentionMonths\'), 0), 0, variables(\'finalRetentionMonths\')), \', startofmonth(now()))) | where isOldFinalData or isPastFinalRetention\')'
type: 'Expression'
}
@@ -4746,7 +4752,7 @@ resource startTriggers 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
name: '${dataFactory.name}_startTriggers'
// chinaeast2 is the only region in China that supports deployment scripts
location: startsWith(location, 'china') ? 'chinaeast2' : location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Resources/deploymentScripts') ? tagsByResource['Microsoft.Resources/deploymentScripts'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Resources/deploymentScripts'] ?? {})
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
diff --git a/src/templates/finops-hub/modules/ftkver.txt b/src/templates/finops-hub/modules/ftkver.txt
index 12f2e5f06..ce609caf8 100644
--- a/src/templates/finops-hub/modules/ftkver.txt
+++ b/src/templates/finops-hub/modules/ftkver.txt
@@ -1 +1 @@
-0.8-dev
\ No newline at end of file
+0.8
\ No newline at end of file
diff --git a/src/templates/finops-hub/modules/hub.bicep b/src/templates/finops-hub/modules/hub.bicep
index 223e5dffd..f3e1b5bd5 100644
--- a/src/templates/finops-hub/modules/hub.bicep
+++ b/src/templates/finops-hub/modules/hub.bicep
@@ -146,6 +146,7 @@ param enableDefaultTelemetry bool = true
// Variables
//------------------------------------------------------------------------------
+// cSpell:ignore ftkver
// Add cm-resource-parent to group resources in Cost Management
var finOpsToolkitVersion = loadTextContent('ftkver.txt')
var resourceTags = union(tags, {
@@ -177,6 +178,7 @@ var safeDataExplorerSubnetId = enablePublicAccess ? '' : vnet.outputs.dataExplor
var safeFinopsHubSubnetId = enablePublicAccess ? '' : vnet.outputs.finopsHubSubnetId
var safeScriptSubnetId = enablePublicAccess ? '' : vnet.outputs.scriptSubnetId
+// cSpell:ignore eventgrid
// var eventGridName = 'finops-hub-eventgrid-${uniqueSuffix}'
// var eventGridPrefix = '${replace(hubName, '_', '-')}-ns'
@@ -190,6 +192,7 @@ var safeScriptSubnetId = enablePublicAccess ? '' : vnet.outputs.scriptSubnetId
// EventGrid Contributor role
// var eventGridContributorRoleId = '1e241071-0855-49ea-94dc-649edcd759de'
+// cSpell:ignore israelcentral, uaenorth, italynorth, switzerlandnorth, mexicocentral, southcentralus, polandcentral, swedencentral, spaincentral, francecentral, usdodeast, usdodcentral
// Find a fallback region for EventGrid
// var eventGridLocationFallback = {
// israelcentral: 'uaenorth'
@@ -225,7 +228,7 @@ resource defaultTelemetry 'Microsoft.Resources/deployments@2022-09-01' = if (ena
metadata: {
_generator: {
name: 'FinOps toolkit'
- version: finOpsToolkitVersion
+ version: loadTextContent('ftkver.txt')
}
}
resources: []
@@ -237,6 +240,7 @@ resource defaultTelemetry 'Microsoft.Resources/deployments@2022-09-01' = if (ena
// Virtual network
//------------------------------------------------------------------------------
+// cSpell:ignore vnet
module vnet 'vnet.bicep' = if (!enablePublicAccess) {
name: 'vnet'
params: {
@@ -263,6 +267,7 @@ module storage 'storage.bicep' = {
tagsByResource: tagsByResource
enableInfrastructureEncryption: enableInfrastructureEncryption
scopesToMonitor: scopesToMonitor
+ // cSpell:ignore msexport
msexportRetentionInDays: exportRetentionInDays
ingestionRetentionInMonths: ingestionRetentionInMonths
rawRetentionInDays: dataExplorerRawRetentionInDays
@@ -306,7 +311,7 @@ resource dataFactory 'Microsoft.DataFactory/factories@2018-06-01' = {
location: location
tags: union(
resourceTags,
- contains(tagsByResource, 'Microsoft.DataFactory/factories') ? tagsByResource['Microsoft.DataFactory/factories'] : {}
+ tagsByResource[?'Microsoft.DataFactory/factories'] ?? {}
)
identity: { type: 'SystemAssigned' }
properties: any({ // Using any() to hide the error that gets surfaced because globalConfigurations is not in the ADF schema yet
@@ -381,7 +386,7 @@ output name string = hubName
output location string = location
@description('Name of the Data Factory.')
-output dataFactorytName string = dataFactory.name
+output dataFactoryName string = dataFactory.name
@description('Resource ID of the storage account created for the hub instance. This must be used when creating the Cost Management export.')
output storageAccountId string = storage.outputs.resourceId
diff --git a/src/templates/finops-hub/modules/keyVault.bicep b/src/templates/finops-hub/modules/keyVault.bicep
index a25b7e9b0..1e3c884ce 100644
--- a/src/templates/finops-hub/modules/keyVault.bicep
+++ b/src/templates/finops-hub/modules/keyVault.bicep
@@ -52,13 +52,14 @@ var keyVaultPrefix = '${replace(hubName, '_', '-')}-vault'
var keyVaultSuffix = '-${uniqueSuffix}'
var keyVaultName = replace('${take(keyVaultPrefix, 24 - length(keyVaultSuffix))}${keyVaultSuffix}', '--', '-')
var keyVaultSecretName = '${toLower(hubName)}-storage-key'
+// cSpell:ignore privatelink, vaultcore
var keyVaultPrivateDnsZoneName = 'privatelink${replace(environment().suffixes.keyvaultDns, 'vault', 'vaultcore')}'
var formattedAccessPolicies = [for accessPolicy in accessPolicies: {
- applicationId: contains(accessPolicy, 'applicationId') ? accessPolicy.applicationId : ''
- objectId: contains(accessPolicy, 'objectId') ? accessPolicy.objectId : ''
+ applicationId: accessPolicy.?applicationId ?? ''
+ objectId: accessPolicy.?objectId ?? ''
permissions: accessPolicy.permissions
- tenantId: contains(accessPolicy, 'tenantId') ? accessPolicy.tenantId : tenant().tenantId
+ tenantId: accessPolicy.?tenantId ?? tenant().tenantId
}]
//==============================================================================
@@ -68,7 +69,7 @@ var formattedAccessPolicies = [for accessPolicy in accessPolicies: {
resource keyVault 'Microsoft.KeyVault/vaults@2023-02-01' = {
name: keyVaultName
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.KeyVault/vaults') ? tagsByResource['Microsoft.KeyVault/vaults'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.KeyVault/vaults'] ?? {})
properties: {
enabledForDeployment: true
enabledForTemplateDeployment: true
@@ -115,7 +116,7 @@ resource keyVault_secret 'Microsoft.KeyVault/vaults/secrets@2023-02-01' = if (!e
resource keyVaultPrivateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = if (!enablePublicAccess) {
name: keyVaultPrivateDnsZoneName
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.KeyVault/privateDnsZones') ? tagsByResource['Microsoft.KeyVault/privateDnsZones'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.KeyVault/privateDnsZones'] ?? {})
properties: {}
}
@@ -123,7 +124,7 @@ resource keyVaultPrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNe
name: '${replace(keyVaultPrivateDnsZone.name, '.', '-')}-link'
location: 'global'
parent: keyVaultPrivateDnsZone
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones/virtualNetworkLinks') ? tagsByResource['Microsoft.Network/privateDnsZones/virtualNetworkLinks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones/virtualNetworkLinks'] ?? {})
properties: {
virtualNetwork: {
id: virtualNetworkId
@@ -135,7 +136,7 @@ resource keyVaultPrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNe
resource keyVaultEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!enablePublicAccess) {
name: '${keyVault.name}-ep'
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateEndpoints') ? tagsByResource['Microsoft.Network/privateEndpoints'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateEndpoints'] ?? {})
properties: {
subnet: {
id: privateEndpointSubnetId
diff --git a/src/templates/finops-hub/modules/storage.bicep b/src/templates/finops-hub/modules/storage.bicep
index 3d06c3a40..0841ef149 100644
--- a/src/templates/finops-hub/modules/storage.bicep
+++ b/src/templates/finops-hub/modules/storage.bicep
@@ -30,6 +30,7 @@ param tagsByResource object = {}
@description('Optional. List of scope IDs to monitor and ingest cost for.')
param scopesToMonitor array
+// cSpell:ignore msexport
@description('Optional. Number of days of data to retain in the msexports container. Default: 0.')
param msexportRetentionInDays int = 0
@@ -67,6 +68,7 @@ var storageAccountSuffix = uniqueSuffix
var storageAccountName = '${take(safeHubName, 24 - length(storageAccountSuffix))}${storageAccountSuffix}'
var scriptStorageAccountName = '${take(safeHubName, 16 - length(storageAccountSuffix))}script${storageAccountSuffix}'
var schemaFiles = {
+ // cSpell:ignore focuscost, pricesheet, reservationdetails, reservationrecommendations, reservationtransactions
'focuscost_1.0r2': loadTextContent('../schemas/focuscost_1.0r2.json')
'focuscost_1.0': loadTextContent('../schemas/focuscost_1.0.json')
'focuscost_1.0-preview(v1)': loadTextContent('../schemas/focuscost_1.0-preview(v1).json')
@@ -100,7 +102,7 @@ resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: sku
}
kind: 'BlockBlobStorage'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/storageAccounts') ? tagsByResource['Microsoft.Storage/storageAccounts'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/storageAccounts'] ?? {})
properties: union(!enableInfrastructureEncryption ? {} : {
encryption: {
keySource: 'Microsoft.Storage'
@@ -127,7 +129,7 @@ resource scriptStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' =
name: 'Standard_LRS' //sku
}
kind: 'StorageV2'// 'BlockBlobStorage'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/storageAccounts') ? tagsByResource['Microsoft.Storage/storageAccounts'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/storageAccounts'] ?? {})
properties: {
supportsHttpsTrafficOnly: true
allowSharedKeyAccess: true
@@ -149,30 +151,31 @@ resource scriptStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' =
}
resource blobPrivateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = if (!enablePublicAccess) {
+ // cSpell:ignore privatelink
name: 'privatelink.blob.${environment().suffixes.storage}'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/privateDnsZones') ? tagsByResource['Microsoft.Storage/privateDnsZones'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/privateDnsZones'] ?? {})
properties: {}
}
resource dfsPrivateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = if (!enablePublicAccess) {
name: 'privatelink.dfs.${environment().suffixes.storage}'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/privateDnsZones') ? tagsByResource['Microsoft.Storage/privateDnsZones'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/privateDnsZones'] ?? {})
properties: {}
}
resource queuePrivateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = if (!enablePublicAccess) {
name: 'privatelink.queue.${environment().suffixes.storage}'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/privateDnsZones') ? tagsByResource['Microsoft.Storage/privateDnsZones'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/privateDnsZones'] ?? {})
properties: {}
}
resource tablePrivateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = if (!enablePublicAccess) {
name: 'privatelink.table.${environment().suffixes.storage}'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/privateDnsZones') ? tagsByResource['Microsoft.Storage/privateDnsZones'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/privateDnsZones'] ?? {})
properties: {}
}
@@ -180,7 +183,7 @@ resource blobPrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetwor
parent: blobPrivateDnsZone
name: '${replace(blobPrivateDnsZone.name, '.', '-')}-link'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones/virtualNetworkLinks') ? tagsByResource['Microsoft.Network/privateDnsZones/virtualNetworkLinks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones/virtualNetworkLinks'] ?? {})
properties: {
registrationEnabled: false
virtualNetwork: {
@@ -193,7 +196,7 @@ resource dfsPrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetwork
parent: dfsPrivateDnsZone
name: '${replace(dfsPrivateDnsZone.name, '.', '-')}-link'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones/virtualNetworkLinks') ? tagsByResource['Microsoft.Network/privateDnsZones/virtualNetworkLinks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones/virtualNetworkLinks'] ?? {})
properties: {
registrationEnabled: false
virtualNetwork: {
@@ -206,7 +209,7 @@ resource queuePrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetwo
parent: queuePrivateDnsZone
name: '${replace(queuePrivateDnsZone.name, '.', '-')}-link'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones/virtualNetworkLinks') ? tagsByResource['Microsoft.Network/privateDnsZones/virtualNetworkLinks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones/virtualNetworkLinks'] ?? {})
properties: {
registrationEnabled: false
virtualNetwork: {
@@ -219,7 +222,7 @@ resource tablePrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetwo
parent: tablePrivateDnsZone
name: '${replace(tablePrivateDnsZone.name, '.', '-')}-link'
location: 'global'
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateDnsZones/virtualNetworkLinks') ? tagsByResource['Microsoft.Network/privateDnsZones/virtualNetworkLinks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateDnsZones/virtualNetworkLinks'] ?? {})
properties: {
registrationEnabled: false
virtualNetwork: {
@@ -231,7 +234,7 @@ resource tablePrivateDnsZoneLink 'Microsoft.Network/privateDnsZones/virtualNetwo
resource blobEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!enablePublicAccess) {
name: '${storageAccount.name}-blob-ep'
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateEndpoints') ? tagsByResource['Microsoft.Network/privateEndpoints'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateEndpoints'] ?? {})
properties: {
subnet: {
id: privateEndpointSubnetId
@@ -251,7 +254,7 @@ resource blobEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!ena
resource scriptEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!enablePublicAccess) {
name: '${scriptStorageAccount.name}-blob-ep'
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateEndpoints') ? tagsByResource['Microsoft.Network/privateEndpoints'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateEndpoints'] ?? {})
properties: {
subnet: {
id: privateEndpointSubnetId
@@ -271,7 +274,7 @@ resource scriptEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!e
resource dfsEndpoint 'Microsoft.Network/privateEndpoints@2023-11-01' = if (!enablePublicAccess) {
name: '${storageAccount.name}-dfs-ep'
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Network/privateEndpoints') ? tagsByResource['Microsoft.Network/privateEndpoints'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Network/privateEndpoints'] ?? {})
properties: {
subnet: {
id: privateEndpointSubnetId
@@ -376,7 +379,7 @@ resource ingestionContainer 'Microsoft.Storage/storageAccounts/blobServices/cont
// Create managed identity to upload files
resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: '${storageAccountName}_blobManager'
- tags: union(tags, contains(tagsByResource, 'Microsoft.ManagedIdentity/userAssignedIdentities') ? tagsByResource['Microsoft.ManagedIdentity/userAssignedIdentities'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.ManagedIdentity/userAssignedIdentities'] ?? {})
location: location
}
@@ -394,9 +397,10 @@ resource identityRoleAssignments 'Microsoft.Authorization/roleAssignments@2022-0
resource uploadSettings 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: '${storageAccountName}_uploadSettings'
kind: 'AzurePowerShell'
+ // cSpell:ignore chinaeast
// chinaeast2 is the only region in China that supports deployment scripts
location: startsWith(location, 'china') ? 'chinaeast2' : location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Resources/deploymentScripts') ? tagsByResource['Microsoft.Resources/deploymentScripts'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Resources/deploymentScripts'] ?? {})
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
@@ -428,6 +432,7 @@ resource uploadSettings 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
retentionInterval: 'PT1H'
environmentVariables: [
{
+ // cSpell:ignore ftkver
name: 'ftkVersion'
value: loadTextContent('./ftkver.txt')
}
diff --git a/src/templates/finops-hub/modules/vnet.bicep b/src/templates/finops-hub/modules/vnet.bicep
index da70169ec..58e307cbe 100644
--- a/src/templates/finops-hub/modules/vnet.bicep
+++ b/src/templates/finops-hub/modules/vnet.bicep
@@ -26,6 +26,7 @@ param tagsByResource object = {}
//------------------------------------------------------------------------------
var safeHubName = replace(replace(toLower(hubName), '-', ''), '_', '')
+// cSpell:ignore vnet
var vNetName = '${safeHubName}-vnet-${location}'
var nsgName = '${vNetName}-nsg'
var subnets = [
@@ -83,7 +84,7 @@ var subnets = [
resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-01' = {
name: nsgName
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/networkSecurityGroups') ? tagsByResource['Microsoft.Storage/networkSecurityGroups'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/networkSecurityGroups'] ?? {})
properties: {
securityRules: [
{
@@ -171,7 +172,7 @@ resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-01' = {
resource vNet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
name: vNetName
location: location
- tags: union(tags, contains(tagsByResource, 'Microsoft.Storage/virtualNetworks') ? tagsByResource['Microsoft.Storage/virtualNetworks'] : {})
+ tags: union(tags, tagsByResource[?'Microsoft.Storage/virtualNetworks'] ?? {})
properties: {
addressSpace: {
addressPrefixes: [virtualNetworkAddressPrefix]
diff --git a/src/templates/finops-workbooks/ftkver.txt b/src/templates/finops-workbooks/ftkver.txt
index 12f2e5f06..ce609caf8 100644
--- a/src/templates/finops-workbooks/ftkver.txt
+++ b/src/templates/finops-workbooks/ftkver.txt
@@ -1 +1 @@
-0.8-dev
\ No newline at end of file
+0.8
\ No newline at end of file
diff --git a/src/workbooks/.scaffold/ftkver.txt b/src/workbooks/.scaffold/ftkver.txt
index 12f2e5f06..ce609caf8 100644
--- a/src/workbooks/.scaffold/ftkver.txt
+++ b/src/workbooks/.scaffold/ftkver.txt
@@ -1 +1 @@
-0.8-dev
\ No newline at end of file
+0.8
\ No newline at end of file
diff --git a/src/workbooks/.scaffold/main.bicep b/src/workbooks/.scaffold/main.bicep
index add919c1e..de135da5b 100644
--- a/src/workbooks/.scaffold/main.bicep
+++ b/src/workbooks/.scaffold/main.bicep
@@ -32,6 +32,7 @@ var workbookJson = string(loadJsonContent('workbook.json'))
// The last segment of the telemetryId is used to identify this module
var workbookId = '000'
var telemetryId = '00f120b5-2007-6120-0000-${workbookId}30126b006'
+// cSpell:ignore ftkver
var finOpsToolkitVersion = loadTextContent('ftkver.txt')
// Add tags to all resources